diff --git a/tobiko/openstack/stacks/_neutron.py b/tobiko/openstack/stacks/_neutron.py index e9d1ee5f8..3742e88de 100644 --- a/tobiko/openstack/stacks/_neutron.py +++ b/tobiko/openstack/stacks/_neutron.py @@ -137,18 +137,42 @@ class NetworkStackFixture(heat.HeatStackFixture): for fixed_ip in fixed_ips) @property - def ipv4_gateway_port_details(self): - return neutron.find_port( - fixed_ips='subnet_id=' + self.ipv4_subnet_id, - device_id=self.gateway_id, - network_id=self.network_id) + def ipv4_gateway_ports(self): + return neutron.list_ports(fixed_ips='subnet_id=' + self.ipv4_subnet_id, + device_id=self.gateway_id, + network_id=self.network_id) @property - def ipv6_gateway_port_details(self): - return neutron.find_port( - fixed_ips='subnet_id=' + self.ipv6_subnet_id, - device_id=self.gateway_id, - network_id=self.network_id) + def ipv6_gateway_ports(self): + return neutron.list_ports(fixed_ips='subnet_id=' + self.ipv6_subnet_id, + device_id=self.gateway_id, + network_id=self.network_id) + + @property + def external_geteway_ports(self): + return neutron.list_ports(device_id=self.gateway_id, + network_id=self.gateway_network_id) + + @property + def ipv4_gateway_addresses(self): + ips = tobiko.Selection() + for port in self.ipv4_gateway_ports: + ips.extend(neutron.list_port_ip_addresses(port)) + return ips + + @property + def ipv6_gateway_addresses(self): + ips = tobiko.Selection() + for port in self.ipv6_gateway_ports: + ips.extend(neutron.list_port_ip_addresses(port)) + return ips + + @property + def external_gateway_addresses(self): + ips = tobiko.Selection() + for port in self.external_geteway_ports: + ips.extend(neutron.list_port_ip_addresses(port)) + return ips @property def gateway_network_details(self): diff --git a/tobiko/tests/functional/openstack/stacks/test_neutron.py b/tobiko/tests/functional/openstack/stacks/test_neutron.py index e02071fc1..53865adec 100644 --- a/tobiko/tests/functional/openstack/stacks/test_neutron.py +++ b/tobiko/tests/functional/openstack/stacks/test_neutron.py @@ -61,21 +61,21 @@ class NetworkTestCase(testtools.TestCase): self.stack.gateway_network_id, self.stack.gateway_details['external_gateway_info']['network_id']) - def test_ipv4_gateway_ip(self): + def test_ipv4_subnet_gateway_ip(self): if not self.stack.has_ipv4 or not self.stack.has_gateway: tobiko.skip('Stack {!s} has no IPv4 gateway', self.stack.stack_name) - self.assertEqual( - self.stack.ipv4_gateway_port_details['fixed_ips'][0]['ip_address'], - self.stack.ipv4_subnet_details['gateway_ip']) + self.assertIn( + self.stack.ipv4_subnet_gateway_ip, + self.stack.ipv4_gateway_addresses) - def test_ipv6_gateway_ip(self): + def test_ipv6_subnet_gateway_ip(self): if not self.stack.has_ipv6 or not self.stack.has_gateway: tobiko.skip('Stack {!s} has no IPv6 gateway', self.stack.stack_name) - self.assertEqual( - self.stack.ipv6_gateway_port_details['fixed_ips'][0]['ip_address'], - self.stack.ipv6_subnet_details['gateway_ip']) + self.assertIn( + self.stack.ipv6_subnet_gateway_ip, + self.stack.ipv6_gateway_addresses) @neutron.skip_if_missing_networking_extensions('net-mtu-write') @@ -87,3 +87,10 @@ class NetworkWithNetMtuWriteTestCase(NetworkTestCase): def test_net_mtu_write(self): self.assertEqual(self.stack.mtu, self.stack.outputs.mtu) + + +@neutron.skip_if_missing_networking_extensions('l3-ha') +class L3HaNetworkTestCase(NetworkTestCase): + + #: Stack of resources with a network with a gateway router + stack = tobiko.required_setup_fixture(stacks.L3haNetworkStackFixture) diff --git a/tobiko/tests/scenario/neutron/test_router.py b/tobiko/tests/scenario/neutron/test_router.py index c0e37a14f..991aaef0c 100644 --- a/tobiko/tests/scenario/neutron/test_router.py +++ b/tobiko/tests/scenario/neutron/test_router.py @@ -41,11 +41,11 @@ class LegacyRouterTest(testtools.TestCase): tobiko.skip('Stack {!s} has no gateway', self.stack.network_stack.stack_name) - network_stack = self.stack.network_stack - self.router = network_stack.gateway_details - self.router_ipv4_address = network_stack.ipv4_subnet_gateway_ip - self.router_ipv6_address = network_stack.ipv6_subnet_gateway_ip - self.router_gateway_ip = network_stack.external_gateway_ips.first + self.network_stack = self.stack.network_stack + self.router = self.network_stack.gateway_details + self.router_ipv4_address = self.network_stack.ipv4_subnet_gateway_ip + self.router_ipv6_address = self.network_stack.ipv6_subnet_gateway_ip + self.router_gateway_ip = self.network_stack.external_gateway_ips.first tripleo_topology.setup_tripleo_topology() self.topology = topology.get_openstack_topology() @@ -80,21 +80,13 @@ class LegacyRouterTest(testtools.TestCase): def test_router_ipv4_address(self): self.assertEqual(4, self.router_ipv4_address.version) - ips = neutron.list_port_ip_addresses( - port=self.stack.network_stack.ipv4_gateway_port_details, - ip_version=4) - self.assertIn(self.router_ipv4_address, ips) + self.assertIn(self.router_ipv4_address, + self.network_stack.ipv4_gateway_addresses) def test_router_ipv6_address(self): self.assertEqual(6, self.router_ipv6_address.version) - ips = neutron.list_port_ip_addresses( - port=self.stack.network_stack.ipv6_gateway_port_details, - ip_version=6) - self.assertIn(self.router_ipv6_address, ips) - - neutron.find_port_ip_address( - port=self.stack.network_stack.ipv6_gateway_port_details, - ip_version=6) + self.assertIn(self.router_ipv6_address, + self.network_stack.ipv6_gateway_addresses) def _get_l3_agent_nodes(self, hostname): hostname = hostname.split(".")