diff --git a/releasenotes/notes/support-microversion-in-scenario-test-b4fbfdd3a977fc58.yaml b/releasenotes/notes/support-microversion-in-scenario-test-b4fbfdd3a977fc58.yaml new file mode 100644 index 0000000000..4d0a3dd721 --- /dev/null +++ b/releasenotes/notes/support-microversion-in-scenario-test-b4fbfdd3a977fc58.yaml @@ -0,0 +1,14 @@ +--- +features: + - | + Add microversion support for scenario tests. Scenario test calls + multiple service API within same test and many services like compute, + volume and placement etc support API microversion. With microversion + support in scenario test, we can call different service API with + different microvesion. Which means we can implement scenario tests + for microversion also. + Currently Scenario manager support below services microversion: + + * Compute + * Volume + * Placement diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py index aa06fd0c03..87d7e765cc 100644 --- a/tempest/scenario/manager.py +++ b/tempest/scenario/manager.py @@ -28,6 +28,8 @@ from tempest.common.utils import net_utils from tempest.common import waiters from tempest import config from tempest import exceptions +from tempest.lib.common import api_microversion_fixture +from tempest.lib.common import api_version_utils from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import test_utils from tempest.lib import exceptions as lib_exc @@ -37,12 +39,57 @@ CONF = config.CONF LOG = log.getLogger(__name__) +LATEST_MICROVERSION = 'latest' + class ScenarioTest(tempest.test.BaseTestCase): """Base class for scenario tests. Uses tempest own clients. """ credentials = ['primary'] + compute_min_microversion = None + compute_max_microversion = LATEST_MICROVERSION + volume_min_microversion = None + volume_max_microversion = LATEST_MICROVERSION + placement_min_microversion = None + placement_max_microversion = LATEST_MICROVERSION + + @classmethod + def skip_checks(cls): + super(ScenarioTest, cls).skip_checks() + api_version_utils.check_skip_with_microversion( + cls.compute_min_microversion, cls.compute_max_microversion, + CONF.compute.min_microversion, CONF.compute.max_microversion) + api_version_utils.check_skip_with_microversion( + cls.volume_min_microversion, cls.volume_max_microversion, + CONF.volume.min_microversion, CONF.volume.max_microversion) + api_version_utils.check_skip_with_microversion( + cls.placement_min_microversion, cls.placement_max_microversion, + CONF.placement.min_microversion, CONF.placement.max_microversion) + + @classmethod + def resource_setup(cls): + super(ScenarioTest, cls).resource_setup() + cls.compute_request_microversion = ( + api_version_utils.select_request_microversion( + cls.compute_min_microversion, + CONF.compute.min_microversion)) + cls.volume_request_microversion = ( + api_version_utils.select_request_microversion( + cls.volume_min_microversion, + CONF.volume.min_microversion)) + cls.placement_request_microversion = ( + api_version_utils.select_request_microversion( + cls.placement_min_microversion, + CONF.placement.min_microversion)) + + def setUp(self): + super(ScenarioTest, self).setUp() + self.useFixture(api_microversion_fixture.APIMicroversionFixture( + compute_microversion=self.compute_request_microversion, + volume_microversion=self.volume_request_microversion, + placement_microversion=self.placement_request_microversion)) + @classmethod def setup_clients(cls): super(ScenarioTest, cls).setup_clients()