diff --git a/ranger_tempest_plugin/config.py b/ranger_tempest_plugin/config.py index 16a09f9..70f89c6 100755 --- a/ranger_tempest_plugin/config.py +++ b/ranger_tempest_plugin/config.py @@ -16,22 +16,22 @@ from oslo_config import cfg -service_available_group = cfg.OptGroup( +SERVICE_AVAILABLE_GROUP = cfg.OptGroup( name="service_available", title="Available OpenStack Services" ) -ServiceAvailableGroup = [ +ORM_SERVICE_AVAILABLE_GROUP = [ cfg.BoolOpt("ranger", default=False, help="Whether or not ranger is expected to be available") ] -orm_group = cfg.OptGroup( +ORM_GROUP = cfg.OptGroup( name="ranger", title="Ranger Service option" ) -OrmGroup = [ +ORM_GROUP_OPTIONS = [ cfg.StrOpt("uri", default="orm", help="Uri of the orm service."), @@ -71,5 +71,9 @@ OrmGroup = [ help="Supported flavor series"), cfg.StrOpt("domain", default='Default', - help="Domain used for Ranger tempest testing") + help="Domain used for Ranger tempest testing"), + cfg.StrOpt("region_alt", + default='', + help="Provide alternate region for creating" + "resources with multiple regions"), ] diff --git a/ranger_tempest_plugin/plugin.py b/ranger_tempest_plugin/plugin.py index 1983101..cc22c3f 100755 --- a/ranger_tempest_plugin/plugin.py +++ b/ranger_tempest_plugin/plugin.py @@ -25,8 +25,8 @@ from tempest.test_discover import plugins class RangerPlugin(plugins.TempestPlugin): def get_opt_lists(self): return [( - project_config.orm_group.name, - project_config.OrmGroup)] + project_config.ORM_GROUP.name, + project_config.ORM_GROUP_OPTIONS)] def load_tests(self): base_path = os.path.split(os.path.dirname( @@ -38,9 +38,9 @@ class RangerPlugin(plugins.TempestPlugin): def register_opts(self, conf): config.register_opt_group( conf, - project_config.service_available_group, - project_config.ServiceAvailableGroup) + project_config.SERVICE_AVAILABLE_GROUP, + project_config.ORM_SERVICE_AVAILABLE_GROUP) config.register_opt_group( conf, - project_config.orm_group, - project_config.OrmGroup) + project_config.ORM_GROUP, + project_config.ORM_GROUP_OPTIONS) diff --git a/ranger_tempest_plugin/tests/api/test_flavors.py b/ranger_tempest_plugin/tests/api/test_flavors.py index 12097e0..447f9c8 100755 --- a/ranger_tempest_plugin/tests/api/test_flavors.py +++ b/ranger_tempest_plugin/tests/api/test_flavors.py @@ -14,7 +14,9 @@ # under the License. import json +import uuid +from ranger_tempest_plugin import data_utils as orm_data_utils from ranger_tempest_plugin.tests.api import fms_base from tempest import config @@ -68,6 +70,14 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): _, body = self.client.get_flavor(flavor_id) return body["flavor"] + def _create_region_group(self): + _, body = self.rms_client.create_region_group( + **orm_data_utils.rand_region_group([CONF.identity.region]) + ) + group_id = body['group']['id'] + self.addCleanup(self.rms_client.delete_region_group, group_id) + return group_id + def _data_setup(self, post_body): flavor = self._create_flv_and_validate_creation_on_dcp_and_lcp( **post_body) @@ -359,3 +369,128 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): self._del_flv_and_validate_deletion_on_dcp_and_lcp(test_flvr_id) self.assertRaises(exceptions.NotFound, self.client.get_flavor, test_flvr_id) + + @decorators.idempotent_id('2a1240d8-ae30-4c37-b99f-af961a5e16cb') + def test_create_flavor_with_swap_and_ephemeral(self): + post_body = self._get_flavor_params() + + # set swap and ephemeral size + swap = ephemeral = '1024' + # update swap and ephemeral + post_body['ephemeral'] = ephemeral + post_body['swap'] = swap + flavor = self._data_setup(post_body) + test_flvr_id = flavor['id'] + # verify flavor record created successfully + flavor_details = self._get_flavor_details(test_flvr_id) + self.assertEqual(flavor_details['status'], 'Success') + self.assertEqual(flavor_details['swap'], swap) + self.assertEqual(flavor_details['ephemeral'], ephemeral) + + @decorators.idempotent_id('2178be75-c36b-4cfe-9df7-8a4bff6e7f83') + def test_list_flavor_with_additional_field(self): + _, body = self.client.list_flavors() + + fields = [ + 'id', + 'description', + 'series', + 'ram', + 'vcpus', + 'disk', + 'swap', + 'ephemeral', + 'extra-specs', + 'options', + 'tag', + 'regions', + 'visibility', + 'tenants', + ] + + if body['flavors']: + flavor = body['flavors'][0] + # check fields is present in response dict as keys + self.assertTrue(set(fields).issubset(set(flavor.keys()))) + + @decorators.idempotent_id('53275983-6999-42f2-8ce5-6a83ade3980f') + def test_create_flavor_with_zero_disk(self): + post_body = self._get_flavor_params() + disk = '0' + post_body['disk'] = disk + flavor = self._data_setup(post_body) + test_flvr_id = flavor['id'] + flavor_details = self._get_flavor_details(test_flvr_id) + self.assertEqual(flavor_details["status"], "Success") + self.assertEqual(flavor_details["disk"], disk) + + @decorators.idempotent_id('997ca03c-4176-4632-a0c9-7e943b03306c') + def test_create_flavor_with_region_group(self): + # create region group + _, body = self.rms_client.create_region_group( + **orm_data_utils.rand_region_group([CONF.identity.region]) + ) + group_id = body['group']['id'] + self.addCleanup(self.rms_client.delete_region_group, group_id) + + post_body = self._get_flavor_params() + region_group = {'name': group_id, 'type': 'group'} + post_body['regions'] = [region_group] + flavor = self._data_setup(post_body) + test_flvr_id = flavor['id'] + + flavor_details = self._get_flavor_details(test_flvr_id) + self.assertEqual(flavor_details['status'], 'Success') + self.assertEqual(flavor['regions'][0]['name'], CONF.identity.region) + + @decorators.idempotent_id('ea2a618e-bd53-460b-bde5-01ea20b417c9') + def test_create_flavor_with_two_regions(self): + region_alt = CONF.ranger.region_alt + if not region_alt: + raise exceptions.InvalidConfiguration( + 'Provide region_alt in ranger block in configuration file') + post_body = self._get_flavor_params() + post_body['regions'].append( + {'name': region_alt} + ) + flavor = self._data_setup(post_body) + test_flvr_id = flavor['id'] + flavor_details = self._get_flavor_details(test_flvr_id) + self.assertEqual(flavor_details['status'], 'Success') + self.assertEqual(flavor['regions'][0]['name'], CONF.identity.region) + self.assertEqual(flavor['regions'][1]['name'], region_alt) + + @decorators.idempotent_id('06c81b29-85b6-4edf-ab89-3877c49e23bc') + def test_create_flavor_with_single_and_group_region(self): + region_alt = CONF.ranger.region_alt + if not region_alt: + raise exceptions.InvalidConfiguration( + 'Provide region_alt in ranger block in configuration file') + group_id = self._create_region_group() + post_body = self._get_flavor_params() + post_body['regions'] = [ + { + 'name': group_id, + 'type': 'group', + }, + { + 'name': region_alt, + 'type': 'single', + } + ] + flavor = self._data_setup(post_body) + test_flvr_id = flavor['id'] + flavor_details = self._get_flavor_details(test_flvr_id) + self.assertEqual(flavor_details['status'], 'Success') + self.assertEqual(flavor['regions'][0]['name'], CONF.identity.region) + self.assertEqual(flavor['regions'][1]['name'], region_alt) + + @decorators.idempotent_id('997ca03c-4176-4632-a0c9-7e943b03306d') + def test_create_flavor_with_uuid(self): + post_body = self._get_flavor_params() + uuid_ = uuid.uuid4().hex + post_body['id'] = uuid_ + flavor = self._data_setup(post_body) + flavor_details = self._get_flavor_details(uuid_) + self.assertEqual(flavor_details['status'], 'Success') + self.assertEqual(flavor['id'], uuid_)