From f31b8d85b661a6b0f200511e915e3c1ada2a83e8 Mon Sep 17 00:00:00 2001 From: James Parker Date: Mon, 23 Jan 2023 10:49:11 -0500 Subject: [PATCH] Add vdpa base movement tests Add vdpa movement tests resize and cold migration to test_vdpa test sutie. Depends-on: https://review.opendev.org/c/openstack/whitebox-tempest-plugin/+/822354 Change-Id: Id24df279177b8575b68c830d9282bd8a00713aa8 --- .../api/compute/test_vdpa.py | 125 ++++++++++++++++++ .../api/compute/test_vgpu.py | 4 +- whitebox_tempest_plugin/config.py | 15 ++- 3 files changed, 136 insertions(+), 8 deletions(-) diff --git a/whitebox_tempest_plugin/api/compute/test_vdpa.py b/whitebox_tempest_plugin/api/compute/test_vdpa.py index 117d49b8..700dc6e7 100644 --- a/whitebox_tempest_plugin/api/compute/test_vdpa.py +++ b/whitebox_tempest_plugin/api/compute/test_vdpa.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +from tempest.common import waiters from tempest import config from whitebox_tempest_plugin.api.compute import base @@ -83,3 +84,127 @@ class VDPASmokeTests(base.BaseWhiteboxComputeTest): server['id'], port['port']['id'] ) + + +class VDPAColdMigration(VDPASmokeTests): + + @classmethod + def skip_checks(cls): + super(VDPAColdMigration, cls).skip_checks() + if CONF.compute.min_compute_nodes < 2: + msg = "Need two or more compute nodes to execute cold migration" + raise cls.skipException(msg) + if not CONF.compute_feature_enabled.vdpa_cold_migration_supported: + msg = "vDPA Cold Migration support needed in order to run tests" + raise cls.skipException(msg) + + def _test_vdpa_cold_migration(self, revert=False): + port = self._create_port_from_vnic_type( + net=self.network, + vnic_type='vdpa' + ) + server = self.create_test_server( + networks=[{'port': port['port']['id']}], + wait_until='ACTIVE' + ) + + # Determine a target host for cold migration target + dest_host = self.get_host_other_than(server['id']) + + # Cold migrate the the instance to the target host + src_host = self.get_host_for_server(server['id']) + self.admin_servers_client.migrate_server(server['id'], host=dest_host) + waiters.wait_for_server_status(self.servers_client, server['id'], + 'VERIFY_RESIZE') + + if revert: + self.admin_servers_client.revert_resize_server(server['id']) + else: + self.admin_servers_client.confirm_resize_server(server['id']) + + waiters.wait_for_server_status(self.servers_client, + server['id'], 'ACTIVE') + dest_host = self.get_host_for_server(server['id']) + + # If the cold migration is reverted the guest should be back on + # it's original host. Otherwise the destination host should now be + # different from the source + if revert: + self.assertEqual(src_host, dest_host) + else: + self.assertNotEqual(src_host, dest_host) + + interface_xml_element = self._get_xml_interface_device( + server['id'], + port['port']['id'], + ) + if CONF.whitebox.rx_queue_size: + driver = interface_xml_element.find("./driver[@name='vhost']") + self.assertEqual( + str(CONF.whitebox.rx_queue_size), + driver.attrib['rx_queue_size'], + "VDPA rx_queue_size equaling %s not found" % + str(CONF.whitebox.rx_queue_size)) + + # Confirm dev_type, allocation status, and pci address information are + # correct in pci_devices table of openstack DB + self._verify_neutron_port_binding( + server['id'], + port['port']['id'] + ) + + def test_vdpa_cold_migration(self): + self._test_vdpa_cold_migration() + + def test_revert_vdpa_cold_migration(self): + self._test_vdpa_cold_migration(revert=True) + + +class VDPAResizeInstance(VDPASmokeTests): + + @classmethod + def skip_checks(cls): + super(VDPAResizeInstance, cls).skip_checks() + if not CONF.compute_feature_enabled.vdpa_cold_migration_supported: + msg = "vDPA Cold Migration support needed in order to run " \ + "resize tests" + raise cls.skipException(msg) + if not CONF.compute_feature_enabled.resize: + msg = 'Resize not available.' + raise cls.skipException(msg) + + def setUp(self): + super(VDPAResizeInstance, self).setUp() + self.new_flavor = self.create_flavor(vcpus=2, ram=256) + + def test_vdpa_to_standard_resize(self): + # Create an instance with a vDPA port and resize the server + port = self._create_port_from_vnic_type( + net=self.network, + vnic_type='vdpa' + ) + server = self.create_test_server( + networks=[{'port': port['port']['id']}], + wait_until='ACTIVE' + ) + + self.resize_server(server['id'], self.new_flavor['id']) + + interface_xml_element = self._get_xml_interface_device( + server['id'], + port['port']['id'], + ) + if CONF.whitebox.rx_queue_size: + driver = interface_xml_element.find("./driver[@name='vhost']") + self.assertEqual( + str(CONF.whitebox.rx_queue_size), + driver.attrib['rx_queue_size'], + "VDPA rx_queue_size equaling %s not found" % + str(CONF.whitebox.rx_queue_size)) + + # Confirm dev_type, allocation status, and pci address information are + # correct in pci_devices table of openstack DB + self._verify_neutron_port_binding( + server['id'], + port['port']['id'] + ) diff --git a/whitebox_tempest_plugin/api/compute/test_vgpu.py b/whitebox_tempest_plugin/api/compute/test_vgpu.py index 160afff9..ea5b0fff 100644 --- a/whitebox_tempest_plugin/api/compute/test_vgpu.py +++ b/whitebox_tempest_plugin/api/compute/test_vgpu.py @@ -322,7 +322,7 @@ class VGPUColdMigration(VGPUTest): if CONF.compute.min_compute_nodes < 2: msg = "Need two or more compute nodes to execute cold migration" raise cls.skipException(msg) - if not CONF.whitebox_hardware.vgpu_cold_migration_supported: + if not CONF.compute_feature_enabled.vgpu_cold_migration_supported: msg = "vGPU Cold Migration support needed in order to run tests" raise cls.skipException(msg) @@ -465,7 +465,7 @@ class VGPUResizeInstance(VGPUTest): @classmethod def skip_checks(cls): super(VGPUResizeInstance, cls).skip_checks() - if not CONF.whitebox_hardware.vgpu_cold_migration_supported: + if not CONF.compute_feature_enabled.vgpu_cold_migration_supported: msg = "vGPU Cold Migration support needed in order to run " \ "resize tests" raise cls.skipException(msg) diff --git a/whitebox_tempest_plugin/config.py b/whitebox_tempest_plugin/config.py index ae630031..61537ec8 100644 --- a/whitebox_tempest_plugin/config.py +++ b/whitebox_tempest_plugin/config.py @@ -286,11 +286,6 @@ hardware_opts = [ default=None, help="The NUMA Node ID that has affinity to the NIC connected to the " "physnet defined in 'sriov_physnet'"), - cfg.BoolOpt( - 'vgpu_cold_migration_supported', - default=False, - help='Cold migration and resize supported for guest instances ' - 'with vGPU devices'), cfg.DictOpt( 'vgpu_type_mapping', default=None, @@ -330,5 +325,13 @@ compute_features_group_opts = [ '[libvirt]/swtpm_enabled=True' '[libvirt]/swtpm_user=tss' '[libvirt]/swtpm_group=tss' - '[key_manager]/backend=barbican') + '[key_manager]/backend=barbican'), + cfg.BoolOpt('vdpa_cold_migration_supported', + default=False, + help='Cold migration and resize supported for guest instances ' + 'with vDPA ports'), + cfg.BoolOpt('vgpu_cold_migration_supported', + default=False, + help='Cold migration and resize supported for guest instances ' + 'with vGPU devices') ]