diff options
author | Kirill Shileev <kshileev@cisco.com> | 2014-11-21 16:58:02 +0300 |
---|---|---|
committer | Kirill Shileev <kshileev@cisco.com> | 2014-12-01 18:15:53 +0300 |
commit | 14113579e8d78a49cbe576959d25b49c199bafb6 (patch) | |
tree | d43aa943990938659d96deff04b82d7943636232 /tempest/scenario/manager.py | |
parent | 8fa6c03bf248dcd6d0dc8107f2b4c0fe7079ca29 (diff) | |
download | tempest-14113579e8d78a49cbe576959d25b49c199bafb6.tar.gz |
Adds scenario for IPv6 addresses
* Checks the way how IPv6 addresses assigned to vNIC
* Eliminates hardcoded IPv4 subnet creation.
* Fixes problem with creating FIP for port with few addresses.
* Adds ping6 to remote_client
Partially implements: blueprint ipv6-api-testing-parity
Change-Id: I728edf0165ba47b6f8930f2fb3d08bd29cfbb317
Diffstat (limited to 'tempest/scenario/manager.py')
-rw-r--r-- | tempest/scenario/manager.py | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py index 522aa4333..8911ff0ee 100644 --- a/tempest/scenario/manager.py +++ b/tempest/scenario/manager.py @@ -596,22 +596,31 @@ class NetworkScenarioTest(ScenarioTest): cidr_in_use = self._list_subnets(tenant_id=tenant_id, cidr=cidr) return len(cidr_in_use) != 0 - tenant_cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr) + ip_version = kwargs.pop('ip_version', 4) + + if ip_version == 6: + tenant_cidr = netaddr.IPNetwork( + CONF.network.tenant_network_v6_cidr) + num_bits = CONF.network.tenant_network_v6_mask_bits + else: + tenant_cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr) + num_bits = CONF.network.tenant_network_mask_bits + result = None + str_cidr = None # Repeatedly attempt subnet creation with sequential cidr # blocks until an unallocated block is found. - for subnet_cidr in tenant_cidr.subnet( - CONF.network.tenant_network_mask_bits): + for subnet_cidr in tenant_cidr.subnet(num_bits): str_cidr = str(subnet_cidr) if cidr_in_use(str_cidr, tenant_id=network.tenant_id): continue subnet = dict( name=data_utils.rand_name(namestart), - ip_version=4, network_id=network.id, tenant_id=network.tenant_id, cidr=str_cidr, + ip_version=ip_version, **kwargs ) try: @@ -642,12 +651,17 @@ class NetworkScenarioTest(ScenarioTest): self.addCleanup(self.delete_wrapper, port.delete) return port - def _get_server_port_id(self, server, ip_addr=None): + def _get_server_port_id_and_ip4(self, server, ip_addr=None): ports = self._list_ports(device_id=server['id'], fixed_ip=ip_addr) self.assertEqual(len(ports), 1, "Unable to determine which port to target.") - return ports[0]['id'] + # it might happen here that this port has more then one ip address + # as in case of dual stack- when this port is created on 2 subnets + for ip46 in ports[0]['fixed_ips']: + ip = ip46['ip_address'] + if netaddr.valid_ipv4(ip): + return ports[0]['id'], ip def _get_network_by_name(self, network_name): net = self._list_networks(name=network_name) @@ -663,11 +677,14 @@ class NetworkScenarioTest(ScenarioTest): if not client: client = self.network_client if not port_id: - port_id = self._get_server_port_id(thing) + port_id, ip4 = self._get_server_port_id_and_ip4(thing) + else: + ip4 = None _, result = client.create_floatingip( floating_network_id=external_network_id, port_id=port_id, - tenant_id=thing['tenant_id'] + tenant_id=thing['tenant_id'], + fixed_ip_address=ip4 ) floating_ip = net_resources.DeletableFloatingIp( client=client, @@ -676,7 +693,7 @@ class NetworkScenarioTest(ScenarioTest): return floating_ip def _associate_floating_ip(self, floating_ip, server): - port_id = self._get_server_port_id(server) + port_id, _ = self._get_server_port_id_and_ip4(server) floating_ip.update(port_id=port_id) self.assertEqual(port_id, floating_ip.port_id) return floating_ip |