From 3c66e7c8dcd164eec3f53873c5c5c04d7337e46a Mon Sep 17 00:00:00 2001 From: Arkady Shtempler Date: Tue, 15 Jun 2021 16:24:40 +0300 Subject: [PATCH] Add "cleanup" for created recordsets + NEW delete zone test Test: "test_delete_zone_with_existing_recordset" 1) Create a Zone 2) Create a Recordset 3) Delete a Zone 4) Ensure successful deletion of Zone 5) Ensure successful deletion of Recordset Change-Id: I933a0cfd51554dfe25f43f4b5c52da97db4b8452 --- designate_tempest_plugin/common/constants.py | 1 + .../services/dns/v2/json/recordset_client.py | 3 +- .../tests/api/v2/test_recordset.py | 87 +++++++++++++------ 3 files changed, 62 insertions(+), 29 deletions(-) diff --git a/designate_tempest_plugin/common/constants.py b/designate_tempest_plugin/common/constants.py index 4f6c72bd..5ae7c3f8 100644 --- a/designate_tempest_plugin/common/constants.py +++ b/designate_tempest_plugin/common/constants.py @@ -17,6 +17,7 @@ PENDING = 'PENDING' COMPLETE = 'COMPLETE' ERROR = 'ERROR' DELETED = 'DELETED' +DELETE = 'DELETE' ACTIVE = 'ACTIVE' UP = 'UP' CREATE = 'CREATE' diff --git a/designate_tempest_plugin/services/dns/v2/json/recordset_client.py b/designate_tempest_plugin/services/dns/v2/json/recordset_client.py index 33e9ee26..6dea20d2 100644 --- a/designate_tempest_plugin/services/dns/v2/json/recordset_client.py +++ b/designate_tempest_plugin/services/dns/v2/json/recordset_client.py @@ -53,7 +53,8 @@ class RecordsetClient(base.DnsClientV2Base): self.expected_success(202, resp.status) if wait_until: - waiters.wait_for_recordset_status(self, body['id'], wait_until) + waiters.wait_for_recordset_status( + self, zone_uuid, body['id'], wait_until) return resp, body diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py index 38a2dfdf..71bf455c 100644 --- a/designate_tempest_plugin/tests/api/v2/test_recordset.py +++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py @@ -38,7 +38,7 @@ class BaseRecordsetsTest(base.BaseDnsV2Test): # All the recordset tests need a zone, create one to share LOG.info('Create a zone') - _, cls.zone = cls.zone_client.create_zone() + cls.zone = cls.zone_client.create_zone()[1] @classmethod def resource_cleanup(cls): @@ -201,7 +201,7 @@ class RecordsetsTest(BaseRecordsetsTest): self.zone['id'], body['id']) LOG.info('List zone recordsets') - _, body = self.client.list_recordset(self.zone['id']) + body = self.client.list_recordset(self.zone['id'])[1] self.assertGreater(len(body), 0) @@ -218,7 +218,7 @@ class RecordsetsTest(BaseRecordsetsTest): self.zone['id'], body['id']) LOG.info('Re-Fetch the Recordset') - _, record = self.client.show_recordset(self.zone['id'], body['id']) + record = self.client.show_recordset(self.zone['id'], body['id'])[1] LOG.info('Ensure the fetched response matches the expected one') self.assertExpected(body, record, self.excluded_keys) @@ -229,14 +229,14 @@ class RecordsetsTest(BaseRecordsetsTest): record_type='A', zone_name=self.zone['name']) LOG.info('Create a Recordset') - _, record = self.client.create_recordset( - self.zone['id'], recordset_data) + record = self.client.create_recordset( + self.zone['id'], recordset_data)[1] self.addCleanup( self.wait_recordset_delete, self.client, self.zone['id'], record['id']) LOG.info('Delete a Recordset') - _, body = self.client.delete_recordset(self.zone['id'], record['id']) + self.client.delete_recordset(self.zone['id'], record['id']) LOG.info('Ensure successful deletion of Recordset') self.assertRaises(lib_exc.NotFound, @@ -248,8 +248,8 @@ class RecordsetsTest(BaseRecordsetsTest): record_type='A', zone_name=self.zone['name']) LOG.info('Create a recordset') - _, record = self.client.create_recordset( - self.zone['id'], recordset_data) + record = self.client.create_recordset( + self.zone['id'], recordset_data)[1] self.addCleanup( self.wait_recordset_delete, self.client, self.zone['id'], record['id']) @@ -258,8 +258,8 @@ class RecordsetsTest(BaseRecordsetsTest): record_type='A', zone_name=self.zone['name'], name=record['name']) LOG.info('Update the recordset') - _, update = self.client.update_recordset(self.zone['id'], - record['id'], recordset_data) + update = self.client.update_recordset(self.zone['id'], + record['id'], recordset_data)[1] self.assertEqual(record['name'], update['name']) self.assertNotEqual(record['records'], update['records']) @@ -270,8 +270,8 @@ class RecordsetsTest(BaseRecordsetsTest): record_type='A', zone_name=self.zone['name']) LOG.info('Create a recordset') - _, record = self.client.create_recordset( - self.zone['id'], recordset_data) + record = self.client.create_recordset( + self.zone['id'], recordset_data)[1] self.addCleanup( self.wait_recordset_delete, self.client, self.zone['id'], record['id']) @@ -281,8 +281,8 @@ class RecordsetsTest(BaseRecordsetsTest): } LOG.info('Update the recordset') - _, update = self.client.update_recordset(self.zone['id'], - record['id'], recordset_data) + update = self.client.update_recordset(self.zone['id'], + record['id'], recordset_data)[1] self.assertEqual(record['name'], update['name']) self.assertEqual(record['records'], update['records']) @@ -400,6 +400,32 @@ class RecordsetsTest(BaseRecordsetsTest): self.client, self.zone['id'], body['id'], const.ACTIVE) + @decorators.idempotent_id('f15e583e-e479-11eb-8e5a-74e5f9e2a801') + def test_delete_zone_with_existing_recordset(self): + + LOG.info('Create a Zone') + zone = self.zone_client.create_zone(wait_until=const.ACTIVE)[1] + self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) + + LOG.info('Create a Recordset') + recordset_data = data_utils.rand_recordset_data( + record_type='A', zone_name=zone['name']) + record = self.client.create_recordset( + zone['id'], recordset_data, wait_until=const.ACTIVE)[1] + + LOG.info("Delete a Zone and wait till it's done") + body = self.zone_client.delete_zone(zone['id'])[1] + LOG.info('Ensure we respond with DELETE+PENDING') + self.assertEqual(const.DELETE, body['action']) + self.assertEqual(const.PENDING, body['status']) + + LOG.info('Ensure successful deletion of Zone') + waiters.wait_for_zone_404(self.zone_client, zone['id']) + + LOG.info('Ensure successful deletion of Recordset') + self.assertRaises(lib_exc.NotFound, + lambda: self.client.show_recordset(zone['id'], record['id'])) + @ddt.ddt class RecordsetsNegativeTest(BaseRecordsetsTest): @@ -442,7 +468,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('b6dad57e-5ce9-4fa5-8d66-aebbcd23b4ad') def test_get_nonexistent_recordset(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) LOG.info('Attempt to get an invalid Recordset') @@ -453,7 +479,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('93d744a8-0dfd-4650-bcef-1e6ad632ad72') def test_get_nonexistent_recordset_invalid_id(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) LOG.info('Attempt to get an invalid Recordset') @@ -463,7 +489,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('da08f19a-7f10-47cc-8b41-994507190812') def test_update_nonexistent_recordset(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) recordset_data = data_utils.rand_recordset_data('A', zone['name']) @@ -477,7 +503,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('158340a1-3f69-4aaa-9968-956190563768') def test_update_nonexistent_recordset_invalid_id(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) recordset_data = data_utils.rand_recordset_data('A', zone['name']) @@ -490,7 +516,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('64bd94d4-54bd-4bee-b6fd-92ede063234e') def test_delete_nonexistent_recordset(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) LOG.info('Attempt to delete an invalid Recordset') @@ -502,7 +528,7 @@ class RecordsetsNegativeTest(BaseRecordsetsTest): @decorators.idempotent_id('5948b599-a332-4dcb-840b-afc825075ba3') def test_delete_nonexistent_recordset_invalid_id(self): LOG.info('Create a zone') - _, zone = self.zone_client.create_zone() + zone = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) LOG.info('Attempt to get an invalid Recordset') @@ -578,7 +604,7 @@ class RootRecordsetsTests(BaseRecordsetsTest): @decorators.idempotent_id('48a081b9-4474-4da0-9b1a-6359a80456ce') def test_list_zones_recordsets(self): LOG.info('List recordsets') - _, body = self.client.list_zones_recordsets() + body = self.client.list_zones_recordsets()[1] self.assertGreater(len(body['recordsets']), 0) @@ -609,7 +635,7 @@ class RootRecordsetsTests(BaseRecordsetsTest): self.zone['id'], zone_recordset['id']) LOG.info('Create another zone') - _, zone2 = self.zone_client.create_zone() + zone2 = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id']) LOG.info('Create another Recordset') @@ -623,7 +649,7 @@ class RootRecordsetsTests(BaseRecordsetsTest): self.zone['id'], zone_recordset2['id']) LOG.info('List recordsets') - _, body = self.client.list_zones_recordsets(params={"data": "10.0.*"}) + body = self.client.list_zones_recordsets(params={"data": "10.0.*"})[1] recordsets = body['recordsets'] @@ -641,11 +667,11 @@ class RootRecordsetsTests(BaseRecordsetsTest): @decorators.idempotent_id('7f4970bf-9aeb-4a3c-9afd-02f5a7178d35') def test_list_zones_recordsets_zone_names(self): LOG.info('Create another zone') - _, zone2 = self.zone_client.create_zone() + zone2 = self.zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id']) LOG.info('List recordsets') - _, body = self.client.list_zones_recordsets() + body = self.client.list_zones_recordsets()[1] recordsets = body['recordsets'] zone_names = set() @@ -698,11 +724,13 @@ class RecordsetOwnershipTest(BaseRecordsetsTest): record_type='A', zone_name=zone['name']) resp, body = self.client.create_recordset( zone['id'], recordset_data) + self.addCleanup( self.wait_recordset_delete, self.client, self.zone['id'], body['id']) self.assertEqual(const.PENDING, body['status'], 'Failed, expected status is PENDING') + LOG.info('Wait until the recordset is active') waiters.wait_for_recordset_status( self.client, zone['id'], @@ -726,11 +754,13 @@ class RecordsetOwnershipTest(BaseRecordsetsTest): record_type='A', zone_name=alt_zone['name']) resp, body = self.alt_client.create_recordset( alt_zone['id'], recordset_data) + self.addCleanup( self.wait_recordset_delete, self.client, self.zone['id'], body['id']) self.assertEqual(const.PENDING, body['status'], 'Failed, expected status is PENDING') + LOG.info('Wait until the recordset is active') waiters.wait_for_recordset_status( self.alt_client, alt_zone['id'], @@ -740,6 +770,7 @@ class RecordsetOwnershipTest(BaseRecordsetsTest): recordset_data['project_id'] = alt_zone['project_id'] recordsets_created['alt'] = recordset_data + LOG.info('Created resordsets are {}:'.format(recordsets_created)) return recordsets_created @decorators.idempotent_id('9c0f58ad-1b31-4899-b184-5380720604e5') @@ -763,7 +794,7 @@ class RecordsetOwnershipTest(BaseRecordsetsTest): zone_name = data_utils.rand_zone_name() LOG.info('Create a zone as a default user') - _, zone = self.zone_client.create_zone(name='a.b.' + zone_name) + zone = self.zone_client.create_zone(name='a.b.' + zone_name)[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id']) rrset_data = data_utils.rand_recordset_data( @@ -777,8 +808,8 @@ class RecordsetOwnershipTest(BaseRecordsetsTest): @decorators.idempotent_id('3dbe244d-fa85-4afc-869b-0306388d8746') def test_no_create_recordset_via_alt_domain(self): - _, zone = self.zone_client.create_zone() - _, alt_zone = self.alt_zone_client.create_zone() + zone = self.zone_client.create_zone()[1] + alt_zone = self.alt_zone_client.create_zone()[1] self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])