Zone Export - some refactoring and new test case to scenario test suite
1) test_all_recordset_types_exist_in_show_zonefile
Verifies: "All zone's recordsets (vary of types
and number of records) presents in
the zonefile export"
2) Refactoring the existing tests by adding "wait_until"
that wasn't in use.
Change-Id: I6b657ef83f04a84526ca7ba29a5b7d0d756402f0
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
index 5d0de56..f094498 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
+import os
from oslo_log import log as logging
from tempest import config
from tempest.lib import decorators
@@ -42,6 +44,7 @@
cls.admin_client = cls.os_admin.dns_v2.ZoneExportsClient()
cls.client = cls.os_primary.dns_v2.ZoneExportsClient()
cls.zones_client = cls.os_primary.dns_v2.ZonesClient()
+ cls.recordset_client = cls.os_primary.dns_v2.RecordsetClient()
def _create_zone_export(self):
LOG.info('Create a zone')
@@ -49,10 +52,10 @@
self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'])
LOG.info('Create a zone export')
- zone_export = self.client.create_zone_export(zone['id'])[1]
+ zone_export = self.client.create_zone_export(
+ zone['id'], wait_until=const.COMPLETE)[1]
self.addCleanup(self.client.delete_zone_export, zone_export['id'])
- waiters.wait_for_zone_export_status(
- self.client, zone_export['id'], const.COMPLETE)
+
return zone, zone_export
@decorators.idempotent_id('0484c3c4-df57-458e-a6e5-6eb63e0475e0')
@@ -127,3 +130,58 @@
LOG.info('Ensure exported data ia as expected')
self.assertEqual(zone['name'], resp_data.origin)
self.assertEqual(zone['ttl'], resp_data.ttl)
+
+ @decorators.attr(type='slow')
+ @decorators.idempotent_id('d8f444aa-a645-4a03-b366-46836f57dc69')
+ def test_all_recordset_types_exist_in_show_zonefile(self):
+ recorsets_data_file = os.path.join(
+ os.path.dirname(__file__), 'recordset_data.json')
+
+ if not os.path.exists(recorsets_data_file):
+ raise self.skipException(
+ f"Could not find {recorsets_data_file}")
+
+ file = open(recorsets_data_file, "r")
+ load_file = json.loads(file.read())
+ file.close()
+
+ LOG.info('Create a zone')
+ zone = self.zones_client.create_zone(wait_until=const.ACTIVE)[1]
+ self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'])
+
+ created_records = []
+ for record_data in load_file.values():
+ recordset_data = {
+ 'name': f"{record_data['name']}.{zone['name']}",
+ 'type': record_data['type'],
+ 'records': record_data['records'],
+ }
+ try:
+ LOG.info('Create a Recordset')
+ recordset = self.recordset_client.create_recordset(
+ zone['id'], recordset_data)[1]
+ self.addCleanup(self.wait_recordset_delete,
+ self.recordset_client, zone['id'],
+ recordset['id'])
+ created_records.append(recordset['records'])
+ waiters.wait_for_recordset_status(self.recordset_client,
+ zone['id'], recordset['id'],
+ const.ACTIVE)
+ except Exception as err:
+ LOG.warning(f"Record of type {recordset['type']} could not be"
+ f" created and failed with error: {err}")
+
+ LOG.info('Create a zone export')
+ zone_export = self.client.create_zone_export(
+ zone['id'], wait_until=const.COMPLETE)[1]
+ self.addCleanup(self.client.delete_zone_export, zone_export['id'])
+
+ LOG.info('Show exported zonefile')
+ created_zonefile = self.client.show_exported_zonefile(
+ zone_export['id'])[1]
+
+ file_records = [item.data for item in created_zonefile.records]
+ for record in created_records:
+ for r in record:
+ self.assertIn(r, file_records,
+ f"Failed, missing record: {r} in zone file")