Merge "Fix how nc is called in qos test"
diff --git a/neutron_tempest_plugin/api/test_security_groups.py b/neutron_tempest_plugin/api/test_security_groups.py
index 7ea9f82..dab183f 100644
--- a/neutron_tempest_plugin/api/test_security_groups.py
+++ b/neutron_tempest_plugin/api/test_security_groups.py
@@ -145,13 +145,15 @@
sg_quota = self._get_sg_quota()
new_sg_quota = 2 * sg_quota
self._set_sg_quota(new_sg_quota)
- return new_sg_quota
+ self.assertEqual(self._get_sg_quota(), new_sg_quota,
+ "Security group quota wasn't changed correctly")
def _decrease_sg_quota(self):
sg_quota = self._get_sg_quota()
new_sg_quota = sg_quota // 2
self._set_sg_quota(new_sg_quota)
- return new_sg_quota
+ self.assertEqual(self._get_sg_quota(), new_sg_quota,
+ "Security group quota wasn't changed correctly")
def _set_sg_quota(self, val):
sg_quota = self._get_sg_quota()
@@ -192,19 +194,15 @@
@decorators.idempotent_id('623d909c-6ef8-43d6-93ee-97086e2651e8')
def test_sg_quota_increased(self):
self._create_max_allowed_sg_amount()
- new_quota = self._increase_sg_quota()
+ self._increase_sg_quota()
self._create_max_allowed_sg_amount()
- quota_set = self._get_sg_quota()
- self.assertEqual(quota_set, new_quota,
- "Security group quota was not changed correctly")
- self.assertEqual(quota_set, self._get_sg_amount(),
+ self.assertEqual(self._get_sg_quota(), self._get_sg_amount(),
"Amount of security groups doesn't match quota")
@decorators.idempotent_id('ba95676c-8d9a-4482-b4ec-74d51a4602a6')
def test_sg_quota_decrease_less_than_created(self):
self._create_max_allowed_sg_amount()
- new_quota = self._decrease_sg_quota()
- self.assertEqual(self._get_sg_quota(), new_quota)
+ self._decrease_sg_quota()
@decorators.idempotent_id('d43cf1a7-aa7e-4c41-9340-627a1a6ab961')
def test_create_sg_when_quota_disabled(self):
@@ -223,7 +221,7 @@
sg_rules_to_create = sg_rules_quota - sg_rules_amount
port_index += sg_rules_to_create
self._create_security_group_rules(sg_rules_to_create,
- port_index=port_index)
+ port_index=port_index)
def _create_security_group_rules(self, amount, port_index=1):
for i in range(amount):
@@ -239,7 +237,7 @@
new_sg_rules_quota = 2 * sg_rules_quota
self._set_sg_rules_quota(new_sg_rules_quota)
self.assertGreater(self._get_sg_rules_quota(), sg_rules_quota,
- "Security group rules quota wasn't changed correctly")
+ "Security group rule quota wasnt changed correctly")
return new_sg_rules_quota
def _decrease_sg_rules_quota(self):
diff --git a/neutron_tempest_plugin/scenario/test_qos.py b/neutron_tempest_plugin/scenario/test_qos.py
index b65e354..938d2b0 100644
--- a/neutron_tempest_plugin/scenario/test_qos.py
+++ b/neutron_tempest_plugin/scenario/test_qos.py
@@ -356,3 +356,39 @@
"""The expected rule ID is {0},
the actual value is {1}""".
format(rule['id'], retrieved_rule_id))
+
+ @decorators.idempotent_id('4eee64da-5646-11ea-82b4-0242ac130003')
+ def test_create_instance_using_network_with_existing_policy(self):
+ network = self.create_network()
+
+ qos_policy = self.os_admin.network_client.create_qos_policy(
+ name='network-policy',
+ shared=False)['policy']
+
+ rule = self.os_admin.network_client.create_bandwidth_limit_rule(
+ policy_id=qos_policy['id'],
+ max_kbps=constants.LIMIT_KILO_BITS_PER_SECOND,
+ max_burst_kbps=constants.LIMIT_KILO_BITS_PER_SECOND)
+
+ network = self.os_admin.network_client.update_network(
+ network['id'],
+ qos_policy_id=qos_policy['id'])['network']
+ self.setup_network_and_server(network=network)
+ retrieved_net = self.client.show_network(network['id'])
+ self.assertEqual(qos_policy['id'],
+ retrieved_net['network']['qos_policy_id'],
+ """The expected policy ID is {0},
+ the actual value is {1}""".
+ format(qos_policy['id'],
+ retrieved_net['network']['qos_policy_id']))
+
+ retrieved_policy = self.os_admin.network_client.show_qos_policy(
+ retrieved_net['network']['qos_policy_id'])
+ retrieved_rule_id = retrieved_policy['policy']['rules'][0]['id']
+
+ self.assertEqual(rule['bandwidth_limit_rule']['id'],
+ retrieved_rule_id,
+ """The expected rule ID is {0},
+ the actual value is {1}""".
+ format(rule['bandwidth_limit_rule']['id'],
+ retrieved_rule_id))
diff --git a/neutron_tempest_plugin/scenario/test_trunk.py b/neutron_tempest_plugin/scenario/test_trunk.py
index 7fd6c52..585af06 100644
--- a/neutron_tempest_plugin/scenario/test_trunk.py
+++ b/neutron_tempest_plugin/scenario/test_trunk.py
@@ -39,7 +39,7 @@
class TrunkTest(base.BaseTempestTestCase):
- credentials = ['primary']
+ credentials = ['primary', 'admin']
force_tenant_isolation = False
@classmethod
@@ -279,12 +279,73 @@
should_succeed=False)
# allow intra-security-group traffic
- self.create_pingable_secgroup_rule(self.security_group['id'])
+ sg_rule = self.create_pingable_secgroup_rule(self.security_group['id'])
+ self.addCleanup(
+ self.os_primary.network_client.delete_security_group_rule,
+ sg_rule['id'])
self.check_remote_connectivity(
vm1.ssh_client,
vm2.subport['fixed_ips'][0]['ip_address'],
servers=[vm1, vm2])
+ @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
+ 'Cold migration is not available.')
+ @testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
+ 'Less than 2 compute nodes, skipping multinode '
+ 'tests.')
+ @testtools.skipUnless(
+ (CONF.neutron_plugin_options.advanced_image_ref or
+ CONF.neutron_plugin_options.default_image_is_advanced),
+ "Advanced image is required to run this test.")
+ @decorators.attr(type='slow')
+ @decorators.idempotent_id('ecd7de30-1c90-4280-b97c-1bed776d5d07')
+ def test_trunk_vm_migration(self):
+ '''Test connectivity after migration of the server with trunk
+
+ A successfully migrated server shows a VERIFY_RESIZE status that
+ requires confirmation. Need to reconfigure VLAN interface on server
+ side after migration is finished as the configuration doesn't survive
+ the reboot.
+ '''
+ vlan_tag = 10
+ vlan_network = self.create_network()
+ vlan_subnet = self.create_subnet(vlan_network)
+ sg_rule = self.create_pingable_secgroup_rule(self.security_group['id'])
+ self.addCleanup(
+ self.os_primary.network_client.delete_security_group_rule,
+ sg_rule['id'])
+
+ use_advanced_image = (
+ not CONF.neutron_plugin_options.default_image_is_advanced)
+ servers = {}
+ for role in ['migrate', 'connection_test']:
+ servers[role] = self._create_server_with_trunk_port(
+ subport_network=vlan_network,
+ segmentation_id=vlan_tag,
+ use_advanced_image=use_advanced_image)
+ for role in ['migrate', 'connection_test']:
+ self.wait_for_server_active(servers[role].server)
+ self._configure_vlan_subport(vm=servers[role],
+ vlan_tag=vlan_tag,
+ vlan_subnet=vlan_subnet)
+
+ self.check_remote_connectivity(
+ servers['connection_test'].ssh_client,
+ servers['migrate'].subport['fixed_ips'][0]['ip_address'])
+
+ client = self.os_admin.compute.ServersClient()
+ client.migrate_server(servers['migrate'].server['id'])
+ self.wait_for_server_status(servers['migrate'].server,
+ 'VERIFY_RESIZE')
+ client.confirm_resize_server(servers['migrate'].server['id'])
+ self._configure_vlan_subport(vm=servers['migrate'],
+ vlan_tag=vlan_tag,
+ vlan_subnet=vlan_subnet)
+
+ self.check_remote_connectivity(
+ servers['connection_test'].ssh_client,
+ servers['migrate'].subport['fixed_ips'][0]['ip_address'])
+
@testtools.skipUnless(
(CONF.neutron_plugin_options.advanced_image_ref or
CONF.neutron_plugin_options.default_image_is_advanced),
@@ -318,7 +379,10 @@
self.wait_for_server_active(vm.server)
# allow ICMP traffic
- self.create_pingable_secgroup_rule(self.security_group['id'])
+ sg_rule = self.create_pingable_secgroup_rule(self.security_group['id'])
+ self.addCleanup(
+ self.os_primary.network_client.delete_security_group_rule,
+ sg_rule['id'])
# Ping from trunk_network_server to normal_network_server
# via parent port