Merge "Extend tests for external DNS integration"
This commit is contained in:
commit
e6f72ea389
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue