# Copyright 2016 VMware Inc # All Rights Reserved # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from tempest import config from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import test_utils from tempest.lib import decorators from vmware_nsx_tempest_plugin.tests.nsxv.api import base_provider as base CONF = config.CONF class DnsSearchDomainTest(base.BaseAdminNetworkTest): @classmethod def resource_setup(cls): super(DnsSearchDomainTest, cls).resource_setup() cls.dns_search_domain = CONF.network.dns_search_domain network_name = data_utils.rand_name('dns-search') resp = cls.create_network(client=cls.networks_client, name=network_name) cls.project_network = resp.get('network', resp) # addCleanup() only available at instance, not at class resp = cls.create_subnet(cls.project_network, name=network_name, client=cls.subnets_client, dns_search_domain=cls.dns_search_domain) cls.tenant_subnet = resp.get('subnet', resp) @classmethod def resource_cleanup(cls): # we need to cleanup resouces created at class methods test_utils.call_and_ignore_notfound_exc( cls.networks_client.delete_network, cls.project_network['id']) super(DnsSearchDomainTest, cls).resource_cleanup() def create_networks(self, network_name): resp = self.create_network(client=self.networks_client, name=network_name) network = resp.get('network', resp) self.addCleanup(test_utils.call_and_ignore_notfound_exc, self.networks_client.delete_network, network['id']) resp = self.create_subnet(network, name=network_name, client=self.subnets_client, dns_search_domain=self.dns_search_domain) subnet = resp.get('subnet', resp) return (network, subnet) @decorators.idempotent_id('879d620c-535c-467f-9e62-f2bf3178b5b7') def test_dns_search_domain_crud_operations(self): """perform CRUD operation on subnet with dns_search_domain.""" network_name = data_utils.rand_name('crud-search-domain') network, subnet = self.create_networks(network_name) self.assertEqual('ACTIVE', network['status']) new_name = network_name + "-update" resp = self.update_subnet( subnet['id'], name=new_name, client=self.subnets_client, dns_search_domain=self.dns_search_domain) subnet = resp.get('subnet', resp) self.assertEqual(subnet['name'], new_name) self.assertEqual(subnet['dns_search_domain'], self.dns_search_domain) subnet_list = self.list_subnets(client=self.subnets_client, name=new_name)['subnets'] self.assertEqual(1, len(subnet_list)) self.delete_subnet(subnet['id']) subnet_list = self.list_subnets(client=self.subnets_client, name=new_name)['subnets'] self.assertEqual(0, len(subnet_list)) @decorators.idempotent_id('40facdd9-40c0-48a1-bff1-57ba0ed0dc49') def test_list_search_domain(self): subnet_list = self.list_subnets(client=self.subnets_client, subnet_id=self.tenant_subnet['id']) self.assertEqual(1, len(subnet_list)) @decorators.idempotent_id('8d023934-b0c8-4588-b48b-17db047a4d8b') def test_show_search_domain(self): resp = self.show_subnet(self.tenant_subnet['id'], client=self.subnets_client) subnet = resp.get('subnet', resp) self.assertEqual(self.dns_search_domain, subnet['dns_search_domain']) @decorators.idempotent_id('2b5990bf-d904-4e18-b197-93f3c061c260') def test_update_subnet_search_domain_field(self): """attach 2nd subnet to network and update its dns_search_domain.""" subnet_name = data_utils.rand_name('upd-search-domain') # 2nd subnet attached to a network, make sure to use different cidr resp = self.create_subnet(self.project_network, name=subnet_name, cidr_offset=1, client=self.subnets_client) subnet = resp.get('subnet', resp) self.assertNotIn('dns_search_domain', subnet) resp = self.update_subnet( subnet['id'], client=self.subnets_client, dns_search_domain=self.dns_search_domain) subnet = resp.get('subnet', resp) self.assertEqual(subnet['dns_search_domain'], self.dns_search_domain) # no method to remove dns_search_domain attribute # set to '' to clear search domain resp = self.update_subnet( subnet['id'], client=self.subnets_client, dns_search_domain='') subnet = resp.get('subnet', resp) self.assertEqual(subnet['dns_search_domain'], '') self.delete_subnet(subnet['id'], client=self.subnets_client)