From 09c4eb99cef86560629c8ee3a7690c24a047ddde Mon Sep 17 00:00:00 2001 From: Ghanshyam Mann Date: Tue, 4 Jun 2019 13:07:12 +0000 Subject: [PATCH] Add microversion support in scenario tests Scenario test call multiple service APIs within same test. Many service like compute, volume etc support microversion but scenario test does not support microversion yet. This commit adds the microversion support in scenario tests so that they will be able to set multiple service microversion at the same time. Change-Id: I446e082331c9d1b37c40c9eeb896eec222c3c045 --- ...ion-in-scenario-test-b4fbfdd3a977fc58.yaml | 14 ++++++ tempest/scenario/manager.py | 47 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 releasenotes/notes/support-microversion-in-scenario-test-b4fbfdd3a977fc58.yaml 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()