diff --git a/ranger_tempest_plugin/tests/api/base.py b/ranger_tempest_plugin/tests/api/base.py index 0f29917..8fa322f 100755 --- a/ranger_tempest_plugin/tests/api/base.py +++ b/ranger_tempest_plugin/tests/api/base.py @@ -15,7 +15,6 @@ from oslo_log import log as logging from ranger_tempest_plugin import clients -from ranger_tempest_plugin.services import base_client from tempest import config from tempest import test @@ -31,25 +30,10 @@ class BaseOrmTest(test.BaseTestCase): build_timeout = 120 build_interval = 10 - @classmethod - def setup_credentials(cls): - cls.set_network_resources(network=False, subnet=False, router=False) - super(BaseOrmTest, cls).setup_credentials() - @classmethod def setup_clients(cls): super(BaseOrmTest, cls).setup_clients() cls.identity_client = cls.os_admin.projects_client - try: - auth_agent = \ - base_client.RangerAuthProvider(cls.os_primary.credentials) - auth_agent.auth_request("GET", - CONF.ranger.ranger_rms_base_url, - headers=[]) - except Exception as auth_exception: - skip_msg = ("Ranger was unable to authenticate against keystone." - "due to exception: %s" % str(auth_exception)) - raise cls.skipException(skip_msg) @classmethod def skip_checks(cls): diff --git a/ranger_tempest_plugin/tests/api/test_customers.py b/ranger_tempest_plugin/tests/api/test_customers.py index 009ac05..55f6eeb 100755 --- a/ranger_tempest_plugin/tests/api/test_customers.py +++ b/ranger_tempest_plugin/tests/api/test_customers.py @@ -40,13 +40,14 @@ class TestTempestCms(cms_base.CmsBaseOrmTest): cls._create_cust_validate_creation_on_dcp_and_lcp( **cls.bare_customer) - super(TestTempestCms, cls).resource_setup() + cls.addClassResourceCleanup( + cls._del_cust_validate_deletion_on_dcp_and_lcp, + cls.setup_customer_id) + cls.addClassResourceCleanup( + cls._del_cust_validate_deletion_on_dcp_and_lcp, + cls.bare_customer_id) - @classmethod - def resource_cleanup(cls): - cls._del_cust_validate_deletion_on_dcp_and_lcp(cls.setup_customer_id) - cls._del_cust_validate_deletion_on_dcp_and_lcp(cls.bare_customer_id) - super(TestTempestCms, cls).resource_cleanup() + super(TestTempestCms, cls).resource_setup() def _delete_customer(self, id_, region): """Try to delete customer from dcp only""" diff --git a/ranger_tempest_plugin/tests/api/test_customers_negative.py b/ranger_tempest_plugin/tests/api/test_customers_negative.py index 96d467a..ec7f5d4 100755 --- a/ranger_tempest_plugin/tests/api/test_customers_negative.py +++ b/ranger_tempest_plugin/tests/api/test_customers_negative.py @@ -24,6 +24,7 @@ class TestTempestCmsNegative(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestCmsNegative, cls).setup_credentials() @classmethod diff --git a/ranger_tempest_plugin/tests/api/test_flavors.py b/ranger_tempest_plugin/tests/api/test_flavors.py index 5cc1d25..2bb2965 100755 --- a/ranger_tempest_plugin/tests/api/test_flavors.py +++ b/ranger_tempest_plugin/tests/api/test_flavors.py @@ -19,7 +19,6 @@ 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 -from tempest import test from tempest.lib import decorators from tempest.lib import exceptions @@ -33,6 +32,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestFms, cls).setup_credentials() @classmethod @@ -45,6 +45,9 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): # create flavor then save off flavor_id for use in test cases body = cls._get_flavor_params() + cls.addClassResourceCleanup( + cls._del_flv_and_validate_deletion_on_dcp_and_lcp, + body['id']) cls.flavor = cls._create_flv_and_validate_creation_on_dcp_and_lcp( **body) @@ -64,7 +67,6 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): cls.custom_es = {'os_extra_specs': {'g': 'guava', 'h': 'honeydew'}} cls.client.add_extra_specs(cls.flavor_id, cls.custom_es) cls._wait_for_flavor_status_on_dcp(cls.flavor_id, 'Success') - super(TestTempestFms, cls).resource_setup() def _get_flavor_details(self, flavor_id): @@ -76,7 +78,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): **orm_data_utils.rand_region_group([CONF.identity.region]) ) group_id = body['group']['id'] - test.addClassResourceCleanup( + self.addCleanup( self.rms_client.delete_region_group, group_id) return group_id @@ -84,7 +86,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): def _data_setup(self, post_body): flavor = self._create_flv_and_validate_creation_on_dcp_and_lcp( **post_body) - test.addClassResourceCleanup( + self.addCleanup( self._del_flv_and_validate_deletion_on_dcp_and_lcp, flavor["id"]) return flavor @@ -140,7 +142,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): self._wait_for_flavor_status_on_dcp(test_flvr_id, 'Success') # add flavor to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_flv_and_validate_deletion_on_dcp_and_lcp, test_flvr_id) @@ -150,14 +152,6 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): self.assertEqual(flavor["regions"][0]["name"], CONF.identity.region) self.assertEqual(flavor["status"], "Success") - @classmethod - def resource_cleanup(cls): - flavor_id = cls.flavor['id'] - test.addClassResourceCleanup( - cls._del_flv_and_validate_deletion_on_dcp_and_lcp, - flavor_id) - super(TestTempestFms, cls).resource_cleanup() - def _create_region(self, status='functional'): region_name = data_utils.rand_name() _, region = self.os_admin.rms_client.create_region( @@ -166,7 +160,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): 'status': status, } ) - test.addClassResourceCleanup( + self.addCleanup( self.os_admin.rms_client.delete_region, region_name) return region @@ -244,7 +238,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): replace_tag_body = {"tags": {"ee": "ff", "gg": "hh"}} self._exec_tags_function(self.flavor_id, replace_tag_body, 'update', None) - test.addClassResourceCleanup( + self.addCleanup( self._restore_default_tags, self.flavor_id) _, tag_body = self.client.get_tags(self.flavor_id) @@ -271,7 +265,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): # test delete_all_tags command - run get_tag again and confirm # that the tag dict is now empty self._exec_tags_function(self.flavor_id, None, 'delete', None) - test.addClassResourceCleanup( + self.addCleanup( self._restore_default_tags, self.flavor_id) _, tag_body = self.client.get_tags(self.flavor_id) @@ -327,7 +321,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): replace_es_body, 'update', None) - test.addClassResourceCleanup( + self.addCleanup( self._restore_custom_es, self.flavor_id) @@ -359,7 +353,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): # run delete ALL extra specs - note that this will only # delete custom extra specs, NOT the default extra specs self._exec_ex_spec_function(self.flavor_id, None, 'delete', None) - test.addClassResourceCleanup( + self.addCleanup( self._restore_custom_es, self.flavor_id) _, flvr_ex_specs = self.client.get_extra_specs(self.flavor_id) @@ -409,7 +403,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): test_flvr_id = flavor['id'] # delete the data and do get_flavor to ensure 404-NotFound response - test.addResourceCleanup( + self.addCleanup( self._del_flv_and_validate_deletion_on_dcp_and_lcp, test_flvr_id) self.assertRaises(exceptions.NotFound, self.client.get_flavor, @@ -476,7 +470,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): **orm_data_utils.rand_region_group([CONF.identity.region]) ) group_id = body['group']['id'] - test.addClassResourceCleanup( + self.addCleanup( self.rms_client.delete_region_group, group_id) @@ -564,7 +558,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): self.assertIn('id', body['flavor']) test_flvr_id = body['flavor']['id'] - test.addClassResourceCleanup( + self.addCleanup( self._delete_flavor, test_flvr_id) @@ -582,7 +576,7 @@ class TestTempestFms(fms_base.FmsBaseOrmTest): _, body = self.client.create_flavor(**post_body) self.assertIn('id', body['flavor']) test_flvr_id = body['flavor']['id'] - test.addClassResourceCleanup( + self.addCleanup( self._delete_flavor, test_flvr_id) diff --git a/ranger_tempest_plugin/tests/api/test_flavors_negative.py b/ranger_tempest_plugin/tests/api/test_flavors_negative.py index fba7905..4286d8f 100755 --- a/ranger_tempest_plugin/tests/api/test_flavors_negative.py +++ b/ranger_tempest_plugin/tests/api/test_flavors_negative.py @@ -24,6 +24,7 @@ class TestTempestFmsNegative(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestFmsNegative, cls).setup_credentials() @classmethod diff --git a/ranger_tempest_plugin/tests/api/test_images.py b/ranger_tempest_plugin/tests/api/test_images.py index e827569..05a8fa9 100755 --- a/ranger_tempest_plugin/tests/api/test_images.py +++ b/ranger_tempest_plugin/tests/api/test_images.py @@ -18,7 +18,6 @@ import uuid from ranger_tempest_plugin.data_utils import data_utils from ranger_tempest_plugin.tests.api import ims_base from tempest import config -from tempest import test from tempest.lib import decorators from tempest.lib import exceptions @@ -30,6 +29,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestIms, cls).setup_credentials() @classmethod @@ -39,32 +39,36 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): @classmethod def resource_setup(cls): # setup public image for tempest testing - cls.image_params = \ + cls.image_params_public = \ cls._get_image_params(set_private=False) + cls.image_params_private = \ + cls._get_image_params(set_enabled=False) + + cls.addClassResourceCleanup( + cls._del_img_validate_deletion_on_dcp_and_lcp, + cls.image_params_public['id']) + cls.addClassResourceCleanup( + cls._del_img_validate_deletion_on_dcp_and_lcp, + cls.image_params_private['id']) + + # setup public image for tempest testing cls.public_image = \ cls._create_img_and_validate_creation_on_dcp_and_lcp( - **cls.image_params) + **cls.image_params_public) # setup private image for tempest testing - cls.image_params = cls._get_image_params(set_enabled=False) cls.private_image = \ cls._create_img_and_validate_creation_on_dcp_and_lcp( - **cls.image_params) + **cls.image_params_private) super(TestTempestIms, cls).resource_setup() - @classmethod - def resource_cleanup(cls): - cls._del_img_validate_deletion_on_dcp_and_lcp(cls.public_image['id']) - cls._del_img_validate_deletion_on_dcp_and_lcp(cls.private_image['id']) - super(TestTempestIms, cls).resource_cleanup() - def _data_setup(self, post_body): + self.addCleanup( + self._del_img_validate_deletion_on_dcp_and_lcp, + post_body["id"]) image = self._create_img_and_validate_creation_on_dcp_and_lcp( **post_body) - test.addClassResourceCleanup( - self._del_img_validate_deletion_on_dcp_and_lcp, - image["id"]) # only check for Success image status if "regions" is not empty if image["regions"]: self._wait_for_image_status_on_dcp(image["id"], 'Success') @@ -79,15 +83,17 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): def _create_region(self, status='functional'): region_name = data_utils.rand_name() + self.addCleanup( + self.os_admin.rms_client.delete_region, + region_name) + _, region = self.os_admin.rms_client.create_region( **{ 'region_id': region_name, 'status': status, } ) - test.addClassResourceCleanup( - self.os_admin.rms_client.delete_region, - region_name) + return region @decorators.idempotent_id('2b1bb28b-4151-4e75-ae1b-d21089c3418c') @@ -234,7 +240,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): self._wait_for_image_status_on_dcp(test_image_id, 'Success') # do not forget to add this account to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) # verify image record created successfully @@ -248,7 +254,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): post_body = self._get_image_params(set_region=False) image = self._data_setup(post_body) test_image_id = image['id'] - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) @@ -315,18 +321,10 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): test_image_id = body['image']['id'] # add image to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) - # jh629g: changed out below code for above, - # on first glance seems to be stronger - # validation of deletion, which should be good - # for stopping resource leaks - - # do not forget to add this account to tempest cleanup - # test.addClassResourceCleanup(self._delete_image, test_image_id) - _, body = self.client.get_image(test_image_id) # since region is building it will give error # Notification to ORD failed @@ -347,7 +345,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): test_image_id = body['image']['id'] # add image to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) _, body = self.client.get_image(test_image_id) @@ -400,7 +398,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): self._wait_for_image_status_on_dcp(test_image_id, 'Success') # add image to temepst cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) # verify image record created successfully @@ -436,7 +434,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): self._wait_for_image_status_on_dcp(test_image_id, 'Success') # add image to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) # verify image record created successfully @@ -449,22 +447,23 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): def test_create_image_with_uuid(self): post_body = self._get_image_params() # set uuid - str_uuid = uuid.uuid4().hex - post_body['id'] = str_uuid + post_body['id'] = uuid.uuid4().hex + + # add image to tempest cleanup + self.addCleanup( + self._del_img_validate_deletion_on_dcp_and_lcp, + post_body['id']) + # call client create_IMAGE and wait till status equals 'Success' _, body = self.client.create_image(**post_body) image = body["image"] - test_image_id = image["id"] - self._wait_for_image_status_on_dcp(test_image_id, 'Success') - # add image to tempest cleanup - test.addClassResourceCleanup( - self._del_img_validate_deletion_on_dcp_and_lcp, - test_image_id) + self._wait_for_image_status_on_dcp(post_body['id'], 'Success') + # verify image record created successfully - _, body = self.client.get_image(test_image_id) + _, body = self.client.get_image(post_body['id']) image = body["image"] - self.assertEqual(image["regions"][0]["id"], str_uuid) + self.assertEqual(image["regions"][0]["id"], post_body['id']) @decorators.idempotent_id('ae1223b5-cb75-442b-82eb-488969acc978') def test_create_flavor_with_region_group(self): @@ -480,7 +479,7 @@ class TestTempestIms(ims_base.ImsBaseOrmTest): self._wait_for_image_status_on_dcp(test_image_id, 'Success') # add image to tempest cleanup - test.addClassResourceCleanup( + self.addCleanup( self._del_img_validate_deletion_on_dcp_and_lcp, test_image_id) # verify image record created successfully diff --git a/ranger_tempest_plugin/tests/api/test_images_negative.py b/ranger_tempest_plugin/tests/api/test_images_negative.py index 85f0624..c346576 100755 --- a/ranger_tempest_plugin/tests/api/test_images_negative.py +++ b/ranger_tempest_plugin/tests/api/test_images_negative.py @@ -24,6 +24,7 @@ class TestTempestImsNegative(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestImsNegative, cls).setup_credentials() @classmethod diff --git a/ranger_tempest_plugin/tests/api/test_region_groups.py b/ranger_tempest_plugin/tests/api/test_region_groups.py index efa32a2..302c793 100755 --- a/ranger_tempest_plugin/tests/api/test_region_groups.py +++ b/ranger_tempest_plugin/tests/api/test_region_groups.py @@ -30,6 +30,7 @@ class TestTempestRegionGroup(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestRegionGroup, cls).setup_credentials() @classmethod @@ -49,23 +50,20 @@ class TestTempestRegionGroup(base.BaseOrmTest): cls.setup_ids.append(cls.region_2['id']) _, cls.group_1 = cls.client.create_region_group( - **orm_data_utils.rand_region_group([cls.setup_ids[0]]) - ) + **orm_data_utils.rand_region_group(cls.setup_ids)) cls.group_ids.append(cls.group_1['group']['id']) + _, cls.group_2 = cls.client.create_region_group( - **orm_data_utils.rand_region_group(cls.setup_ids) - ) + **orm_data_utils.rand_region_group(cls.setup_ids)) cls.group_ids.append(cls.group_2['group']['id']) - super(TestTempestRegionGroup, cls).resource_setup() - - @classmethod - def resource_cleanup(cls): for region_id in cls.setup_ids: - cls.client.delete_region(region_id) + cls.addClassResourceCleanup(cls.client.delete_region, region_id) for group_id in cls.group_ids: - cls.client.delete_region_group(group_id) - super(TestTempestRegionGroup, cls).resource_cleanup() + cls.addClassResourceCleanup(cls.client.delete_region_group, + group_id) + + super(TestTempestRegionGroup, cls).resource_setup() @decorators.idempotent_id('0d377eb2-754d-49c1-9a4f-c7019dfe80ca') def test_update_group(self): @@ -95,12 +93,18 @@ class TestTempestRegionGroup(base.BaseOrmTest): _, region_group_details = self.client.get_region_group( region_group['group']['id'] ) - self.assertEqual( - region_group_details['regions'], - [self.region_1['id'], self.region_2['id']] + self.assertIn( + self.setup_ids[0], + region_group_details['regions'] ) - # add to cleanup - self.group_ids.append(region_group['group']['id']) + self.assertIn( + self.setup_ids[1], + region_group_details['regions'] + ) + + self.addCleanup( + self.client.delete_region_group, + region_group['group']['id']) @decorators.idempotent_id('504cc5cb-bc19-48ea-9456-16f5b24c9530') def test_delete_region_group(self): @@ -110,9 +114,14 @@ class TestTempestRegionGroup(base.BaseOrmTest): _, region_group_details = self.client.get_region_group( region_group['group']['id'] ) - self.assertEqual( - region_group_details['regions'], - [self.region_1['id'], self.region_2['id']] + + self.assertIn( + self.setup_ids[0], + region_group_details['regions'] + ) + self.assertIn( + self.setup_ids[1], + region_group_details['regions'] ) self.client.delete_region_group(region_group['group']['id']) diff --git a/ranger_tempest_plugin/tests/api/test_regiongroups_negative.py b/ranger_tempest_plugin/tests/api/test_regiongroups_negative.py index fdd3e3b..82cd3c8 100755 --- a/ranger_tempest_plugin/tests/api/test_regiongroups_negative.py +++ b/ranger_tempest_plugin/tests/api/test_regiongroups_negative.py @@ -24,6 +24,7 @@ class TestTempestRegGroupNegative(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestRegGroupNegative, cls).setup_credentials() @classmethod diff --git a/ranger_tempest_plugin/tests/api/test_regions.py b/ranger_tempest_plugin/tests/api/test_regions.py index a657f74..5036b27 100755 --- a/ranger_tempest_plugin/tests/api/test_regions.py +++ b/ranger_tempest_plugin/tests/api/test_regions.py @@ -51,13 +51,10 @@ class TestTempestRegion(rms_base.RmsBaseOrmTest): 'designType': 'large'}) cls.setup_ids.append(cls.region_3['id']) - super(TestTempestRegion, cls).resource_setup() - - @classmethod - def resource_cleanup(cls): for region_id in cls.setup_ids: - cls.client.delete_region(region_id) - super(TestTempestRegion, cls).resource_cleanup() + cls.addClassResourceCleanup(cls.client.delete_region, region_id) + + super(TestTempestRegion, cls).resource_setup() @decorators.idempotent_id('829c7da0-2332-4f80-ad35-24306b67ed0e') def test_create_and_delete_region(self): diff --git a/ranger_tempest_plugin/tests/api/test_regions_negative.py b/ranger_tempest_plugin/tests/api/test_regions_negative.py index cea97e8..880b918 100755 --- a/ranger_tempest_plugin/tests/api/test_regions_negative.py +++ b/ranger_tempest_plugin/tests/api/test_regions_negative.py @@ -24,6 +24,7 @@ class TestTempestRegionsNegative(base.BaseOrmTest): @classmethod def setup_credentials(cls): + cls.set_network_resources() super(TestTempestRegionsNegative, cls).setup_credentials() @classmethod