Merge "Extend tests for external DNS integration"

This commit is contained in:
Zuul 2020-01-08 13:01:10 +00:00 committed by Gerrit Code Review
commit e6f72ea389
2 changed files with 83 additions and 11 deletions

View File

@ -78,6 +78,7 @@
- standard-attr-tag
- standard-attr-timestamp
- subnet_allocation
- subnet-dns-publish-fixed-ip
- subnetpool-prefix-ops
- trunk
- trunk-details
@ -1006,8 +1007,8 @@
parent: neutron-tempest-plugin-designate-scenario
override-checkout: stable/stein
vars:
network_api_extensions_common: *api_extensions_stein
branch_override: stable/stein
network_api_extensions_common: *api_extensions_stein
- job:
name: neutron-tempest-plugin-designate-scenario-train

View File

@ -23,6 +23,7 @@ from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from neutron_tempest_plugin.api import base as base_api
from neutron_tempest_plugin import config
from neutron_tempest_plugin.scenario import base
from neutron_tempest_plugin.scenario import constants
@ -40,19 +41,19 @@ else:
DNSMixin = object
class DNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
class BaseDNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
credentials = ['primary']
@classmethod
def setup_clients(cls):
super(DNSIntegrationTests, cls).setup_clients()
super(BaseDNSIntegrationTests, cls).setup_clients()
cls.dns_client = cls.os_tempest.zones_client
cls.query_client = cls.os_tempest.query_client
cls.query_client.build_timeout = 30
@classmethod
def skip_checks(cls):
super(DNSIntegrationTests, cls).skip_checks()
super(BaseDNSIntegrationTests, cls).skip_checks()
if not ('designate' in CONF.service_available and
CONF.service_available.designate):
raise cls.skipException("Designate support is required")
@ -62,7 +63,7 @@ class DNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
@classmethod
@utils.requires_ext(extension="dns-integration", service="network")
def resource_setup(cls):
super(DNSIntegrationTests, cls).resource_setup()
super(BaseDNSIntegrationTests, cls).resource_setup()
_, cls.zone = cls.dns_client.create_zone()
cls.addClassResourceCleanup(cls.dns_client.delete_zone,
cls.zone['id'], ignore_errors=lib_exc.NotFound)
@ -71,6 +72,7 @@ class DNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
cls.network = cls.create_network(dns_domain=cls.zone['name'])
cls.subnet = cls.create_subnet(cls.network)
cls.subnet_v6 = cls.create_subnet(cls.network, ip_version=6)
cls.router = cls.create_router_by_client()
cls.create_router_interface(cls.router['id'], cls.subnet['id'])
cls.keypair = cls.create_keypair()
@ -93,13 +95,16 @@ class DNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
fip = self.create_floatingip(port=port)
return {'port': port, 'fip': fip, 'server': server}
def _verify_dns_records(self, address, name):
def _verify_dns_records(self, address, name, found=True, record_type='A'):
client = self.query_client
forward = name + '.' + self.zone['name']
reverse = ipaddress.ip_address(address).reverse_pointer
dns_waiters.wait_for_query(self.query_client, forward, 'A')
dns_waiters.wait_for_query(self.query_client, reverse, 'PTR')
fwd_response = self.query_client.query(forward, 'A')
rev_response = self.query_client.query(reverse, 'PTR')
dns_waiters.wait_for_query(client, forward, record_type, found)
dns_waiters.wait_for_query(client, reverse, 'PTR', found)
if not found:
return
fwd_response = client.query(forward, record_type)
rev_response = client.query(reverse, 'PTR')
for r in fwd_response:
for rr in r.answer:
self.assertIn(address, rr.to_text())
@ -107,15 +112,81 @@ class DNSIntegrationTests(base.BaseTempestTestCase, DNSMixin):
for rr in r.answer:
self.assertIn(forward, rr.to_text())
class DNSIntegrationTests(BaseDNSIntegrationTests):
@decorators.idempotent_id('850ee378-4b5a-4f71-960e-0e7b12e03a34')
def test_server_with_fip(self):
name = data_utils.rand_name('server-test')
server = self._create_server(name=name)
server_ip = server['fip']['floating_ip_address']
self._verify_dns_records(server_ip, name)
self.delete_floatingip(server['fip'])
self._verify_dns_records(server_ip, name, found=False)
@decorators.idempotent_id('a8f2fade-8d5c-40f9-80f0-3de4b8d91985')
def test_fip(self):
name = data_utils.rand_name('fip-test')
fip = self._create_floatingip_with_dns(name)
self._verify_dns_records(fip['floating_ip_address'], name)
addr = fip['floating_ip_address']
self._verify_dns_records(addr, name)
self.delete_floatingip(fip)
self._verify_dns_records(addr, name, found=False)
class DNSIntegrationAdminTests(BaseDNSIntegrationTests,
base_api.BaseAdminNetworkTest):
credentials = ['primary', 'admin']
@classmethod
def resource_setup(cls):
super(DNSIntegrationAdminTests, cls).resource_setup()
# TODO(jh): We should add the segmentation_id as tempest option
# so that it can be changed to match the deployment if needed
cls.network2 = cls.create_network(dns_domain=cls.zone['name'],
provider_network_type='vxlan',
provider_segmentation_id=12345)
cls.subnet2 = cls.create_subnet(cls.network2)
@decorators.idempotent_id('fa6477ce-a12b-41da-b671-5a3bbdafab07')
def test_port_on_special_network(self):
name = data_utils.rand_name('port-test')
port = self.create_port(self.network2,
dns_name=name)
addr = port['fixed_ips'][0]['ip_address']
self._verify_dns_records(addr, name)
self.client.delete_port(port['id'])
self._verify_dns_records(addr, name, found=False)
class DNSIntegrationExtraTests(BaseDNSIntegrationTests):
required_extensions = ["subnet-dns-publish-fixed-ip"]
@classmethod
def resource_setup(cls):
super(DNSIntegrationExtraTests, cls).resource_setup()
cls.network2 = cls.create_network()
cls.subnet2 = cls.create_subnet(cls.network2)
cls.subnet2_v6 = cls.create_subnet(cls.network2,
ip_version=6,
dns_publish_fixed_ip=True)
@decorators.idempotent_id('e10e0e5d-69ac-4172-b39f-27ab344b7f99')
def test_port_with_publishing_subnet(self):
name = data_utils.rand_name('port-test')
port = self.create_port(self.network2,
dns_domain=self.zone['name'],
dns_name=name)
fixed_ips = port['fixed_ips']
if fixed_ips[1]['subnet_id'] == self.subnet2_v6['id']:
v6_index = 1
else:
v6_index = 0
addr_v4 = port['fixed_ips'][1 - v6_index]['ip_address']
addr_v6 = port['fixed_ips'][v6_index]['ip_address']
self._verify_dns_records(addr_v6, name, record_type='AAAA')
self._verify_dns_records(addr_v4, name, found=False)
self.client.delete_port(port['id'])
self._verify_dns_records(addr_v6, name, record_type='AAAA',
found=False)