summaryrefslogtreecommitdiff
path: root/tempest/scenario/manager.py
diff options
context:
space:
mode:
authorKirill Shileev <kshileev@cisco.com>2014-11-21 16:58:02 +0300
committerKirill Shileev <kshileev@cisco.com>2014-12-01 18:15:53 +0300
commit14113579e8d78a49cbe576959d25b49c199bafb6 (patch)
treed43aa943990938659d96deff04b82d7943636232 /tempest/scenario/manager.py
parent8fa6c03bf248dcd6d0dc8107f2b4c0fe7079ca29 (diff)
downloadtempest-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.py35
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