Merge "Create "A" type recordset using a list of IPs records"

This commit is contained in:
Zuul 2021-11-08 01:16:56 +00:00 committed by Gerrit Code Review
commit 7997b9fd79
3 changed files with 117 additions and 19 deletions

View File

@ -141,10 +141,12 @@ def rand_recordset_data(record_type, zone_name, name=None, records=None,
'ttl': ttl}
def rand_a_recordset(zone_name, ip=None, **kwargs):
if ip is None:
ip = rand_ip()
return rand_recordset_data('A', zone_name, records=[ip], **kwargs)
def rand_a_recordset(zone_name, ips=None, **kwargs):
if ips is None:
return rand_recordset_data(
'A', zone_name, records=[rand_ip()], **kwargs)
else:
return rand_recordset_data('A', zone_name, records=ips, **kwargs)
def rand_aaaa_recordset(zone_name, ip=None, **kwargs):

View File

@ -19,6 +19,8 @@ from tempest.lib.common.utils import data_utils as lib_data_utils
import ddt
from designate_tempest_plugin.tests import base
from designate_tempest_plugin.common import constants as const
from designate_tempest_plugin.common import waiters
from designate_tempest_plugin import data_utils
@ -80,9 +82,12 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('Ensure we respond with PENDING')
self.assertEqual('PENDING', body['status'])
self.assertEqual(const.PENDING, body['status'])
@decorators.idempotent_id('d03b69a5-5052-43bc-a38a-b511b6b34304')
@ddt.file_data("recordset_data.json")
@ -102,9 +107,12 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('Ensure we respond with PENDING')
self.assertEqual('PENDING', body['status'])
self.assertEqual(const.PENDING, body['status'])
@decorators.idempotent_id('69f002e5-6511-43d3-abae-7abdd45ae03e')
@ddt.file_data("recordset_wildcard_data.json")
@ -124,9 +132,12 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('Ensure we respond with PENDING')
self.assertEqual('PENDING', body['status'])
self.assertEqual(const.PENDING, body['status'])
@decorators.idempotent_id('5964f730-5546-46e6-9105-5030e9c492b2')
def test_list_recordsets(self):
@ -136,6 +147,9 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('List zone recordsets')
_, body = self.client.list_recordset(self.zone['id'])
@ -150,6 +164,9 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('Re-Fetch the Recordset')
_, record = self.client.show_recordset(self.zone['id'], body['id'])
@ -165,6 +182,9 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a Recordset')
_, record = self.client.create_recordset(
self.zone['id'], recordset_data)
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'])
@ -181,6 +201,9 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a recordset')
_, record = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], record['id'])
recordset_data = data_utils.rand_recordset_data(
record_type='A', zone_name=self.zone['name'], name=record['name'])
@ -200,6 +223,9 @@ class RecordsetsTest(BaseRecordsetsTest):
LOG.info('Create a recordset')
_, record = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], record['id'])
recordset_data = {
'ttl': data_utils.rand_ttl(start=record['ttl'] + 1)
@ -222,12 +248,15 @@ class RecordsetsTest(BaseRecordsetsTest):
record_type='A', zone_name=self.zone['name'])
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.assertEqual('PENDING', body['status'],
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, self.zone['id'],
body['id'], 'ACTIVE')
body['id'], const.ACTIVE)
LOG.info('Re-Fetch the Recordset as Alt tenant with '
'"x-auth-sudo-project-id" HTTP header included in request. '
@ -259,13 +288,19 @@ class RecordsetsTest(BaseRecordsetsTest):
record_type='A', zone_name=self.zone['name'])
body_pr_1 = self.client.create_recordset(
self.zone['id'], recordset_data_primary_1)[1]
self.assertEqual('PENDING', body_pr_1['status'],
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body_pr_1['id'])
self.assertEqual(const.PENDING, body_pr_1['status'],
'Failed, expected status is PENDING')
recordset_data_primary_2 = data_utils.rand_recordset_data(
record_type='A', zone_name=self.zone['name'])
body_pr_2 = self.client.create_recordset(
self.zone['id'], recordset_data_primary_2)[1]
self.assertEqual('PENDING', body_pr_2['status'],
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body_pr_2['id'])
self.assertEqual(const.PENDING, body_pr_2['status'],
'Failed, expected status is PENDING')
LOG.info('Re-Fetch Recordsets as Alt tenant for a Primary project. '
@ -298,6 +333,24 @@ class RecordsetsTest(BaseRecordsetsTest):
'Failed, recordset ID:{} was not found in listed '
'recordsets: {}'.format(recordset_id, primary_recordsets_ids))
@decorators.idempotent_id('48013b7c-f526-11eb-b04f-74e5f9e2a801')
def test_create_A_recordset_multiply_ips(self):
LOG.info('Create A type Recordset using a list of random IPs')
recordset_data = data_utils.rand_a_recordset(
zone_name=self.zone['name'],
ips=[data_utils.rand_ip() for _ in range(10)])
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], body['id'])
LOG.info('Ensure we respond with PENDING')
self.assertEqual(const.PENDING, body['status'])
LOG.info('Wait until the recordset is active')
waiters.wait_for_recordset_status(
self.client, self.zone['id'],
body['id'], const.ACTIVE)
@ddt.ddt
class RecordsetsNegativeTest(BaseRecordsetsTest):
@ -415,12 +468,15 @@ class RecordsetsNegativeTest(BaseRecordsetsTest):
record_type='A', zone_name=self.zone['name'])
resp, body = self.client.create_recordset(
self.zone['id'], recordset_data)
self.assertEqual('PENDING', body['status'],
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, self.zone['id'],
body['id'], 'ACTIVE')
body['id'], const.ACTIVE)
LOG.info('Ensure 404 NotFound status code is received if '
'recordset ID is invalid.')
@ -485,6 +541,9 @@ class RootRecordsetsTests(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, zone_recordset = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], zone_recordset['id'])
self.client.show_zones_recordset(zone_recordset['id'])
@ -496,6 +555,9 @@ class RootRecordsetsTests(BaseRecordsetsTest):
LOG.info('Create a Recordset')
resp, zone_recordset = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], zone_recordset['id'])
LOG.info('Create another zone')
_, zone2 = self.zone_client.create_zone()
@ -507,6 +569,9 @@ class RootRecordsetsTests(BaseRecordsetsTest):
records=['10.0.1.3'])
resp, zone_recordset2 = self.client.create_recordset(
zone2['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], zone_recordset2['id'])
LOG.info('List recordsets')
_, body = self.client.list_zones_recordsets(params={"data": "10.0.*"})
@ -577,19 +642,22 @@ class RecordsetOwnershipTest(BaseRecordsetsTest):
self.zone_client,
zone['id'])
waiters.wait_for_zone_status(
self.zone_client, zone['id'], 'ACTIVE')
self.zone_client, zone['id'], const.ACTIVE)
# Create a recordset and wait till it's ACTIVE
recordset_data = data_utils.rand_recordset_data(
record_type='A', zone_name=zone['name'])
resp, body = self.client.create_recordset(
zone['id'], recordset_data)
self.assertEqual('PENDING', body['status'],
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'],
body['id'], 'ACTIVE')
body['id'], const.ACTIVE)
# Add "project_id" into the recordset_data
recordset_data['project_id'] = zone['project_id']
@ -602,19 +670,22 @@ class RecordsetOwnershipTest(BaseRecordsetsTest):
self.alt_zone_client,
alt_zone['id'])
waiters.wait_for_zone_status(
self.alt_zone_client, alt_zone['id'], 'ACTIVE')
self.alt_zone_client, alt_zone['id'], const.ACTIVE)
# Create a recordset and wait till it's ACTIVE
recordset_data = data_utils.rand_recordset_data(
record_type='A', zone_name=alt_zone['name'])
resp, body = self.alt_client.create_recordset(
alt_zone['id'], recordset_data)
self.assertEqual('PENDING', body['status'],
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'],
body['id'], 'ACTIVE')
body['id'], const.ACTIVE)
# Add "project_id" into the recordset_data
recordset_data['project_id'] = alt_zone['project_id']
@ -629,6 +700,9 @@ class RecordsetOwnershipTest(BaseRecordsetsTest):
record_type='A', zone_name=self.zone['name'])
resp, rrset = self.client.create_recordset(
self.zone['id'], recordset_data)
self.addCleanup(
self.wait_recordset_delete, self.client,
self.zone['id'], rrset['id'])
self.assertRaises(
lib_exc.RestClientException,
lambda: self.alt_client.create_recordset(

View File

@ -124,6 +124,17 @@ class BaseDnsTest(test.BaseTestCase):
zone_client,
zone_id)
def wait_recordset_delete(self, recordset_client, zone_id,
recordset_id, **kwargs):
self._delete_recordset(
recordset_client, zone_id, recordset_id, **kwargs)
utils.call_until_true(self._check_recordset_deleted,
CONF.dns.build_timeout,
CONF.dns.build_interval,
recordset_client,
zone_id,
recordset_id)
def _delete_zone(self, zone_client, zone_id, **kwargs):
return utils.call_and_ignore_notfound_exc(zone_client.delete_zone,
zone_id, **kwargs)
@ -132,6 +143,17 @@ class BaseDnsTest(test.BaseTestCase):
return utils.call_and_ignore_notfound_exc(zone_client.show_zone,
zone_id) is None
def _delete_recordset(self, recordset_client, zone_id,
recordset_id, **kwargs):
return utils.call_and_ignore_notfound_exc(
recordset_client.delete_recordset,
zone_id, recordset_id, **kwargs)
def _check_recordset_deleted(
self, recordset_client, zone_id, recordset_id):
return utils.call_and_ignore_notfound_exc(
recordset_client.show_recordset, zone_id, recordset_id) is None
class BaseDnsV2Test(BaseDnsTest):
"""Base class for DNS V2 API tests."""