Add multipool scenario tests

Change-Id: Ica5005cd98cc76656ccdbe1681a5c9a5a611e29e
This commit is contained in:
Omer
2024-08-28 16:47:01 +00:00
parent c1f894bbff
commit f36fcee44a
3 changed files with 132 additions and 3 deletions

View File

@ -17,16 +17,22 @@
override-checkout: stable/2023.2
- job:
name: designate-multipool
name: designate-bind9-multipool
parent: designate-base
nodeset: openstack-single-node-jammy
vars:
devstack_localrc:
DESIGNATE_BACKEND_DRIVER: multipool-bind9
devstack_local_conf:
post-config:
"$DESIGNATE_CONF":
service:central:
scheduler_filters: "pool_id_attribute, in_doubt_default_pool"
test-config:
"$TEMPEST_CONFIG":
dns_feature_enabled:
test_multipool_with_delete_opt: True
tempest_test_regex: ^designate_tempest_plugin.tests.scenario.v2.test_designate_multipool
tempest_test_regex: ^designate_tempest_plugin.tests.scenario.v2.test_designate_multipool.DesignateMultiPoolTest
- project:
templates:
@ -40,5 +46,5 @@
- designate-bind9-stable-2024-2
- designate-bind9-stable-2024-1
- designate-bind9-stable-2023-2
- designate-multipool
- designate-bind9-multipool
- neutron-tempest-plugin-designate-scenario

View File

@ -29,6 +29,7 @@
tsigkey_name: multiple-pools-pool-2
- name: default
id: 794ccc2c-d751-44fe-b57f-8894c9f5c842
description: Default BIND9 Pool
attributes: {}

View File

@ -21,9 +21,15 @@ from tempest import config
import subprocess
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
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 as dns_data_utils
from designate_tempest_plugin.tests import resources
from designate_tempest_plugin.services.dns.query.query_client import (
SingleQueryClient)
CONF = config.CONF
LOG = logging.getLogger(__name__)
@ -244,3 +250,119 @@ class DesignateManagePoolTest(DesignateManageTest):
)
if os.path.exists(temp_pools_yaml_conf_path):
os.remove(temp_pools_yaml_conf_path)
@testtools.skipUnless(CONF.dns_feature_enabled.test_multipool_with_delete_opt,
'Multipools feature is being tested with --delete '
'option. It might delete pools that were created in '
'other tests.')
class DesignateMultiPoolTest(DesignateManagePoolTest):
_pool1_id = None
_pool2_id = None
@property
def pool1_id(self):
if not self._pool1_id:
self._set_pool_ids()
return self._pool1_id
@property
def pool2_id(self):
if not self._pool2_id:
self._set_pool_ids()
return self._pool2_id
def _set_pool_ids(self):
pool_config = self._run_designate_manage_pool_command(
'show_config', '--all').split('\n\n')[0]
pool_config_list = pool_config.split('\n')
pool_ids = list()
for item in pool_config_list:
if 'id:' in item:
id = item.split()[1]
pool_ids.append(id)
if len(pool_ids) < 2:
self.skipException('Multipool tests require at least 2 pools.')
self._pool1_id = pool_ids[0]
self._pool2_id = pool_ids[1]
@classmethod
def setup_clients(cls):
super(DesignateMultiPoolTest, cls).setup_clients()
cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
cls.rec_client = cls.os_admin.dns_v2.RecordsetClient()
cls.admin_zones_client = cls.os_admin.dns_v2.ZonesClient()
@classmethod
def resource_setup(cls):
super().resource_setup()
super()._update_pools_file(cls.MULTIPOOLS_FILE_PATH)
# Make sure we have an allowed TLD available
tld_name = dns_data_utils.rand_zone_name(name="ZonesTest")
cls.tld_name = f".{tld_name}"
cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
def tearDown(self):
super().tearDown()
super()._update_pools_file(self.MULTIPOOLS_FILE_PATH)
@classmethod
def resource_cleanup(cls):
super().resource_cleanup()
cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
@decorators.attr(type='smoke')
@decorators.attr(type='slow')
@decorators.idempotent_id('c0648f53-4114-45bd-8792-462a82f69d32')
def test_create_zones(self):
LOG.info('Create 2 zones, one per pool')
zone1_name = dns_data_utils.rand_zone_name(
name="create_zones_multipool-",
suffix=self.tld_name)
zone1 = self.admin_zones_client.create_zone(
name=f"{zone1_name}",
attributes={'pool_id': f'{self.pool1_id}'})[1]
self.addCleanup(self.wait_zone_delete,
self.admin_zones_client, zone1['id'],
ignore_errors=lib_exc.NotFound)
zone2_name = dns_data_utils.rand_zone_name(
name="create_zones_multipool-",
suffix=self.tld_name)
zone2 = self.admin_zones_client.create_zone(
name=f"{zone2_name}",
attributes={'pool_id': f'{self.pool2_id}'})[1]
self.addCleanup(self.wait_zone_delete,
self.admin_zones_client,
zone2['id'],
ignore_errors=lib_exc.NotFound)
self.assertNotEqual(zone1['pool_id'], zone2['pool_id'])
# wait for both of them to be active
for zone in [zone1, zone2]:
waiters.wait_for_zone_status(
self.admin_zones_client, zone['id'], const.ACTIVE)
# Create a type A recordset for each zone
recordset_data = dns_data_utils.rand_recordset_data(
record_type='A', zone_name=zone['name'])
body = self.rec_client.create_recordset(zone['id'],
recordset_data)[1]
self.addCleanup(
self.wait_recordset_delete, self.rec_client,
zone['id'], body['id'])
self.assertEqual(const.PENDING, body['status'],
'Failed, expected status is PENDING')
waiters.wait_for_recordset_status(
self.rec_client, zone['id'],
body['id'], const.ACTIVE)
for ns in config.CONF.dns.nameservers:
ns_obj = SingleQueryClient(ns, config.CONF.dns.query_timeout)
a_record = str(ns_obj.query(zone['name'], rdatatype='A'))
self.assertNotEmpty(a_record)