How to use _create_network_and_qos_policies method in tempest

Best Python code snippet using tempest_python

test_network_qos_placement.py

Source:test_network_qos_placement.py Github

copy

Full Screen

...127 self.qos_policy_2 = self._create_policy_and_min_bw_rule(128 name_prefix='test_policy_2',129 min_kbps=self.BANDWIDTH_2130 )131 def _create_network_and_qos_policies(self, policy_method):132 physnet_name = CONF.network_feature_enabled.qos_placement_physnet133 base_segm = \134 CONF.network_feature_enabled.provider_net_base_segmentation_id135 self.prov_network, _, _ = self.setup_network_subnet_with_router(136 networks_client=self.networks_client,137 routers_client=self.routers_client,138 subnets_client=self.subnets_client,139 **{140 'shared': True,141 'provider:network_type': 'vlan',142 'provider:physical_network': physnet_name,143 'provider:segmentation_id': base_segm144 })145 policy_method()146 def _check_if_allocation_is_possible(self):147 alloc_candidates = self.placement_client.list_allocation_candidates(148 resources1='%s:%s' % (self.INGRESS_RESOURCE_CLASS,149 self.SMALLEST_POSSIBLE_BW))150 if len(alloc_candidates['provider_summaries']) == 0:151 self.fail('No allocation candidates are available for %s:%s' %152 (self.INGRESS_RESOURCE_CLASS, self.SMALLEST_POSSIBLE_BW))153 # Just to be sure check with impossible high (placement max_int),154 # allocation155 alloc_candidates = self.placement_client.list_allocation_candidates(156 resources1='%s:%s' % (self.INGRESS_RESOURCE_CLASS,157 self.PLACEMENT_MAX_INT))158 if len(alloc_candidates['provider_summaries']) != 0:159 self.fail('For %s:%s there should be no available candidate!' %160 (self.INGRESS_RESOURCE_CLASS, self.PLACEMENT_MAX_INT))161 def _boot_vm_with_min_bw(self, qos_policy_id, status='ACTIVE'):162 wait_until = (None if status == 'ERROR' else status)163 port = self.create_port(164 self.prov_network['id'], qos_policy_id=qos_policy_id)165 server = self.create_server(networks=[{'port': port['id']}],166 wait_until=wait_until)167 waiters.wait_for_server_status(168 client=self.servers_client, server_id=server['id'],169 status=status, ready_wait=False, raise_on_error=False)170 return server, port171 def _assert_allocation_is_as_expected(172 self, consumer, port_ids, min_kbps=SMALLEST_POSSIBLE_BW,173 expected_rc=NetworkQoSPlacementTestBase.INGRESS_RESOURCE_CLASS,174 ):175 allocations = self.placement_client.list_allocations(176 consumer)['allocations']177 self.assertGreater(len(allocations), 0)178 bw_resource_in_alloc = False179 allocation_rp = None180 for rp, resources in allocations.items():181 if expected_rc in resources['resources']:182 self.assertEqual(183 min_kbps,184 resources['resources'][expected_rc])185 bw_resource_in_alloc = True186 allocation_rp = rp187 if min_kbps:188 self.assertTrue(189 bw_resource_in_alloc,190 f"expected {min_kbps} bandwidth allocation from {expected_rc} "191 f"but instance has allocation {allocations} instead."192 )193 # Check binding_profile of the port is not empty and equals with194 # the rp uuid195 for port_id in port_ids:196 port = self.os_admin.ports_client.show_port(port_id)197 port_binding_alloc = port['port']['binding:profile'][198 'allocation']199 # NOTE(gibi): the format of the allocation key depends on the200 # existence of port-resource-request-groups API extension.201 # TODO(gibi): drop the else branch once tempest does not need202 # to support Xena release any more.203 if utils.is_extension_enabled(204 'port-resource-request-groups', 'network'):205 self.assertEqual(206 {allocation_rp},207 set(port_binding_alloc.values()))208 else:209 self.assertEqual(allocation_rp, port_binding_alloc)210 @decorators.idempotent_id('78625d92-212c-400e-8695-dd51706858b8')211 @utils.services('compute', 'network')212 def test_qos_min_bw_allocation_basic(self):213 """"Basic scenario with QoS min bw allocation in placement.214 Steps:215 * Create prerequisites:216 ** VLAN type provider network with subnet.217 ** valid QoS policy with minimum bandwidth rule with min_kbps=1218 (This is a simplification to skip the checks in placement for219 detecting the resource provider tree and inventories, as if220 bandwidth resource is available 1 kbs will be available).221 ** invalid QoS policy with minimum bandwidth rule with222 min_kbs=max integer from placement (this is a simplification again223 to avoid detection of RP tress and inventories, as placement will224 reject such big allocation).225 * Create port with valid QoS policy, and boot VM with that, it should226 pass.227 * Create port with invalid QoS policy, and try to boot VM with that,228 it should fail.229 """230 self._create_network_and_qos_policies(self._create_qos_basic_policies)231 server1, valid_port = self._boot_vm_with_min_bw(232 qos_policy_id=self.qos_policy_valid['id'])233 self._assert_allocation_is_as_expected(server1['id'],234 [valid_port['id']])235 server2, not_valid_port = self._boot_vm_with_min_bw(236 self.qos_policy_not_valid['id'], status='ERROR')237 allocations = self.placement_client.list_allocations(server2['id'])238 self.assertEqual(0, len(allocations['allocations']))239 server2 = self.servers_client.show_server(server2['id'])240 self.assertIn('fault', server2['server'])241 self.assertIn('No valid host', server2['server']['fault']['message'])242 # Check that binding_profile of the port is empty243 port = self.os_admin.ports_client.show_port(not_valid_port['id'])244 self.assertEqual(0, len(port['port']['binding:profile']))245 @decorators.idempotent_id('8a98150c-a506-49a5-96c6-73a5e7b04ada')246 @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,247 'Cold migration is not available.')248 @testtools.skipUnless(CONF.compute.min_compute_nodes > 1,249 'Less than 2 compute nodes, skipping multinode '250 'tests.')251 @utils.services('compute', 'network')252 def test_migrate_with_qos_min_bw_allocation(self):253 """Scenario to migrate VM with QoS min bw allocation in placement254 Boot a VM like in test_qos_min_bw_allocation_basic, do the same255 checks, and256 * migrate the server257 * confirm the resize, if the VM state is VERIFY_RESIZE258 * If the VM goes to ACTIVE state check that allocations are as259 expected.260 """261 self._create_network_and_qos_policies(self._create_qos_basic_policies)262 server, valid_port = self._boot_vm_with_min_bw(263 qos_policy_id=self.qos_policy_valid['id'])264 self._assert_allocation_is_as_expected(server['id'],265 [valid_port['id']])266 self.os_adm.servers_client.migrate_server(server_id=server['id'])267 waiters.wait_for_server_status(268 client=self.servers_client, server_id=server['id'],269 status='VERIFY_RESIZE', ready_wait=False, raise_on_error=False)270 # TODO(lajoskatona): Check that the allocations are ok for the271 # migration?272 self._assert_allocation_is_as_expected(server['id'],273 [valid_port['id']])274 self.os_adm.servers_client.confirm_resize_server(275 server_id=server['id'])276 waiters.wait_for_server_status(277 client=self.servers_client, server_id=server['id'],278 status='ACTIVE', ready_wait=False, raise_on_error=True)279 self._assert_allocation_is_as_expected(server['id'],280 [valid_port['id']])281 @decorators.idempotent_id('c29e7fd3-035d-4993-880f-70819847683f')282 @testtools.skipUnless(CONF.compute_feature_enabled.resize,283 'Resize not available.')284 @utils.services('compute', 'network')285 def test_resize_with_qos_min_bw_allocation(self):286 """Scenario to resize VM with QoS min bw allocation in placement.287 Boot a VM like in test_qos_min_bw_allocation_basic, do the same288 checks, and289 * resize the server with new flavor290 * confirm the resize, if the VM state is VERIFY_RESIZE291 * If the VM goes to ACTIVE state check that allocations are as292 expected.293 """294 self._create_network_and_qos_policies(self._create_qos_basic_policies)295 server, valid_port = self._boot_vm_with_min_bw(296 qos_policy_id=self.qos_policy_valid['id'])297 self._assert_allocation_is_as_expected(server['id'],298 [valid_port['id']])299 new_flavor = self._create_flavor_to_resize_to()300 self.servers_client.resize_server(301 server_id=server['id'], flavor_ref=new_flavor['id'])302 waiters.wait_for_server_status(303 client=self.servers_client, server_id=server['id'],304 status='VERIFY_RESIZE', ready_wait=False, raise_on_error=False)305 # TODO(lajoskatona): Check that the allocations are ok for the306 # migration?307 self._assert_allocation_is_as_expected(server['id'],308 [valid_port['id']])309 self.servers_client.confirm_resize_server(server_id=server['id'])310 waiters.wait_for_server_status(311 client=self.servers_client, server_id=server['id'],312 status='ACTIVE', ready_wait=False, raise_on_error=True)313 self._assert_allocation_is_as_expected(server['id'],314 [valid_port['id']])315 @decorators.idempotent_id('79fdaa1c-df62-4738-a0f0-1cff9dc415f6')316 @utils.services('compute', 'network')317 def test_qos_min_bw_allocation_update_policy(self):318 """Test the update of QoS policy on bound port319 Related RFE in neutron: #1882804320 The scenario is the following:321 * Have a port with QoS policy and minimum bandwidth rule.322 * Boot a VM with the port.323 * Update the port with a new policy with different minimum bandwidth324 values.325 * The allocation on placement side should be according to the new326 rules.327 """328 if not utils.is_network_feature_enabled('update_port_qos'):329 raise self.skipException("update_port_qos feature is not enabled")330 self._create_network_and_qos_policies(331 self._create_qos_policies_from_life)332 port = self.create_port(333 self.prov_network['id'], qos_policy_id=self.qos_policy_1['id'])334 server1 = self.create_server(335 networks=[{'port': port['id']}])336 self._assert_allocation_is_as_expected(server1['id'], [port['id']],337 self.BANDWIDTH_1)338 self.ports_client.update_port(339 port['id'],340 **{'qos_policy_id': self.qos_policy_2['id']})341 self._assert_allocation_is_as_expected(server1['id'], [port['id']],342 self.BANDWIDTH_2)343 # I changed my mind344 self.ports_client.update_port(345 port['id'],346 **{'qos_policy_id': self.qos_policy_1['id']})347 self._assert_allocation_is_as_expected(server1['id'], [port['id']],348 self.BANDWIDTH_1)349 # bad request....350 self.qos_policy_not_valid = self._create_policy_and_min_bw_rule(351 name_prefix='test_policy_not_valid',352 min_kbps=self.PLACEMENT_MAX_INT)353 port_orig = self.ports_client.show_port(port['id'])['port']354 self.assertRaises(355 lib_exc.Conflict,356 self.ports_client.update_port,357 port['id'], **{'qos_policy_id': self.qos_policy_not_valid['id']})358 self._assert_allocation_is_as_expected(server1['id'], [port['id']],359 self.BANDWIDTH_1)360 port_upd = self.ports_client.show_port(port['id'])['port']361 self.assertEqual(port_orig['qos_policy_id'],362 port_upd['qos_policy_id'])363 self.assertEqual(self.qos_policy_1['id'], port_upd['qos_policy_id'])364 @decorators.idempotent_id('9cfc3bb8-f433-4c91-87b6-747cadc8958a')365 @utils.services('compute', 'network')366 def test_qos_min_bw_allocation_update_policy_from_zero(self):367 """Test port without QoS policy to have QoS policy368 This scenario checks if updating a port without QoS policy to369 have QoS policy with minimum_bandwidth rule succeeds only on370 controlplane, but placement allocation remains 0.371 """372 if not utils.is_network_feature_enabled('update_port_qos'):373 raise self.skipException("update_port_qos feature is not enabled")374 self._create_network_and_qos_policies(375 self._create_qos_policies_from_life)376 port = self.create_port(self.prov_network['id'])377 server1 = self.create_server(378 networks=[{'port': port['id']}])379 self._assert_allocation_is_as_expected(server1['id'], [port['id']], 0)380 self.ports_client.update_port(381 port['id'], **{'qos_policy_id': self.qos_policy_2['id']})382 self._assert_allocation_is_as_expected(server1['id'], [port['id']], 0)383 @decorators.idempotent_id('a9725a70-1d28-4e3b-ae0e-450abc235962')384 @utils.services('compute', 'network')385 def test_qos_min_bw_allocation_update_policy_to_zero(self):386 """Test port with QoS policy to remove QoS policy387 In this scenario port with QoS minimum_bandwidth rule update to388 remove QoS policy results in 0 placement allocation.389 """390 if not utils.is_network_feature_enabled('update_port_qos'):391 raise self.skipException("update_port_qos feature is not enabled")392 self._create_network_and_qos_policies(393 self._create_qos_policies_from_life)394 port = self.create_port(395 self.prov_network['id'], qos_policy_id=self.qos_policy_1['id'])396 server1 = self.create_server(397 networks=[{'port': port['id']}])398 self._assert_allocation_is_as_expected(server1['id'], [port['id']],399 self.BANDWIDTH_1)400 self.ports_client.update_port(401 port['id'],402 **{'qos_policy_id': None})403 self._assert_allocation_is_as_expected(server1['id'], [port['id']], 0)404 @decorators.idempotent_id('756ced7f-6f1a-43e7-a851-2fcfc16f3dd7')405 @utils.services('compute', 'network')406 def test_qos_min_bw_allocation_update_with_multiple_ports(self):407 if not utils.is_network_feature_enabled('update_port_qos'):408 raise self.skipException("update_port_qos feature is not enabled")409 self._create_network_and_qos_policies(410 self._create_qos_policies_from_life)411 port1 = self.create_port(412 self.prov_network['id'], qos_policy_id=self.qos_policy_1['id'])413 port2 = self.create_port(414 self.prov_network['id'], qos_policy_id=self.qos_policy_2['id'])415 server1 = self.create_server(416 networks=[{'port': port1['id']}, {'port': port2['id']}])417 self._assert_allocation_is_as_expected(418 server1['id'], [port1['id'], port2['id']],419 self.BANDWIDTH_1 + self.BANDWIDTH_2)420 self.ports_client.update_port(421 port1['id'],422 **{'qos_policy_id': self.qos_policy_2['id']})423 self._assert_allocation_is_as_expected(424 server1['id'], [port1['id'], port2['id']],425 2 * self.BANDWIDTH_2)426 @decorators.idempotent_id('0805779e-e03c-44fb-900f-ce97a790653b')427 @utils.services('compute', 'network')428 def test_empty_update(self):429 if not utils.is_network_feature_enabled('update_port_qos'):430 raise self.skipException("update_port_qos feature is not enabled")431 self._create_network_and_qos_policies(432 self._create_qos_policies_from_life)433 port = self.create_port(434 self.prov_network['id'], qos_policy_id=self.qos_policy_1['id'])435 server1 = self.create_server(436 networks=[{'port': port['id']}])437 self._assert_allocation_is_as_expected(server1['id'], [port['id']],438 self.BANDWIDTH_1)439 self.ports_client.update_port(440 port['id'],441 **{'description': 'foo'})442 self._assert_allocation_is_as_expected(server1['id'], [port['id']],443 self.BANDWIDTH_1)444 @decorators.idempotent_id('372b2728-cfed-469a-b5f6-b75779e1ccbe')445 @utils.services('compute', 'network')446 def test_qos_min_bw_allocation_update_policy_direction_change(self):447 """Test QoS min bw direction change on a bound port448 Related RFE in neutron: #1882804449 The scenario is the following:450 * Have a port with QoS policy and minimum bandwidth rule with ingress451 direction452 * Boot a VM with the port.453 * Update the port with a new policy to egress direction in454 minimum bandwidth rule.455 * The allocation on placement side should be according to the new456 rules.457 """458 if not utils.is_network_feature_enabled('update_port_qos'):459 raise self.skipException("update_port_qos feature is not enabled")460 def create_policies():461 self.qos_policy_ingress = self._create_policy_and_min_bw_rule(462 name_prefix='test_policy_ingress',463 min_kbps=self.BANDWIDTH_1,464 direction=self.INGRESS_DIRECTION,465 )466 self.qos_policy_egress = self._create_policy_and_min_bw_rule(467 name_prefix='test_policy_egress',468 min_kbps=self.BANDWIDTH_1,469 direction=self.EGRESS_DIRECTION,470 )471 self._create_network_and_qos_policies(create_policies)472 port = self.create_port(473 self.prov_network['id'],474 qos_policy_id=self.qos_policy_ingress['id'])475 server1 = self.create_server(476 networks=[{'port': port['id']}])477 self._assert_allocation_is_as_expected(478 server1['id'], [port['id']], self.BANDWIDTH_1,479 expected_rc=self.INGRESS_RESOURCE_CLASS)480 self.ports_client.update_port(481 port['id'],482 qos_policy_id=self.qos_policy_egress['id'])483 self._assert_allocation_is_as_expected(484 server1['id'], [port['id']], self.BANDWIDTH_1,485 expected_rc=self.EGRESS_RESOURCE_CLASS)...

Full Screen

Full Screen

test_minbw_allocation_placement.py

Source:test_minbw_allocation_placement.py Github

copy

Full Screen

...85 min_kbps=self.SMALLEST_POSSIBLE_BW)86 self.qos_policy_not_valid = self._create_policy_and_min_bw_rule(87 name_prefix='test_policy_not_valid',88 min_kbps=self.PLACEMENT_MAX_INT)89 def _create_network_and_qos_policies(self):90 physnet_name = CONF.network_feature_enabled.qos_placement_physnet91 base_segm = \92 CONF.network_feature_enabled.provider_net_base_segmentation_id93 self.prov_network, _, _ = self.create_networks(94 networks_client=self.networks_client,95 routers_client=self.routers_client,96 subnets_client=self.subnets_client,97 **{98 'shared': True,99 'provider:network_type': 'vlan',100 'provider:physical_network': physnet_name,101 'provider:segmentation_id': base_segm102 })103 self._create_qos_policies()104 def _check_if_allocation_is_possible(self):105 alloc_candidates = self.placement_client.list_allocation_candidates(106 resources1='%s:%s' % (self.INGRESS_RESOURCE_CLASS,107 self.SMALLEST_POSSIBLE_BW))108 if len(alloc_candidates['provider_summaries']) == 0:109 self.fail('No allocation candidates are available for %s:%s' %110 (self.INGRESS_RESOURCE_CLASS, self.SMALLEST_POSSIBLE_BW))111 # Just to be sure check with impossible high (placement max_int),112 # allocation113 alloc_candidates = self.placement_client.list_allocation_candidates(114 resources1='%s:%s' % (self.INGRESS_RESOURCE_CLASS,115 self.PLACEMENT_MAX_INT))116 if len(alloc_candidates['provider_summaries']) != 0:117 self.fail('For %s:%s there should be no available candidate!' %118 (self.INGRESS_RESOURCE_CLASS, self.PLACEMENT_MAX_INT))119 @decorators.idempotent_id('78625d92-212c-400e-8695-dd51706858b8')120 @decorators.attr(type='slow')121 @utils.services('compute', 'network')122 def test_qos_min_bw_allocation_basic(self):123 """"Basic scenario with QoS min bw allocation in placement.124 Steps:125 * Create prerequisites:126 ** VLAN type provider network with subnet.127 ** valid QoS policy with minimum bandwidth rule with min_kbps=1128 (This is a simplification to skip the checks in placement for129 detecting the resource provider tree and inventories, as if130 bandwidth resource is available 1 kbs will be available).131 ** invalid QoS policy with minimum bandwidth rule with132 min_kbs=max integer from placement (this is a simplification again133 to avoid detection of RP tress and inventories, as placement will134 reject such big allocation).135 * Create port with valid QoS policy, and boot VM with that, it should136 pass.137 * Create port with invalid QoS policy, and try to boot VM with that,138 it should fail.139 """140 self._check_if_allocation_is_possible()141 self._create_network_and_qos_policies()142 valid_port = self.create_port(143 self.prov_network['id'], qos_policy_id=self.qos_policy_valid['id'])144 server1 = self.create_server(145 networks=[{'port': valid_port['id']}])146 allocations = self.placement_client.list_allocations(server1['id'])147 self.assertGreater(len(allocations['allocations']), 0)148 bw_resource_in_alloc = False149 for rp, resources in allocations['allocations'].items():150 if self.INGRESS_RESOURCE_CLASS in resources['resources']:151 bw_resource_in_alloc = True152 self.assertTrue(bw_resource_in_alloc)153 # boot another vm with max int bandwidth154 not_valid_port = self.create_port(155 self.prov_network['id'],...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run tempest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful