blob: b0ee00da913cb5100ea93a3fc5d6fdcafbc3728e [file] [log] [blame]
nayna-patel197c0122013-07-11 10:18:00 +00001# Copyright 2013 OpenStack Foundation
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
ChenZheng04ac6942013-12-09 16:42:52 +080016import netaddr
17
rossellae02431e2013-11-15 17:58:29 +010018from tempest.api.network import base_routers as base
jun xie82fbc582014-02-19 23:07:59 +080019from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090020from tempest.common.utils import data_utils
Matthew Treinish03b48df2014-01-29 16:59:49 +000021from tempest import config
armando-migliaccio89e5b962013-12-16 06:12:16 -080022from tempest import test
nayna-patel197c0122013-07-11 10:18:00 +000023
Matthew Treinish03b48df2014-01-29 16:59:49 +000024CONF = config.CONF
25
nayna-patel197c0122013-07-11 10:18:00 +000026
rossellae02431e2013-11-15 17:58:29 +010027class RoutersTest(base.BaseRouterTest):
nayna-patel197c0122013-07-11 10:18:00 +000028
29 @classmethod
Andrea Frittolida4a2452014-09-15 13:12:08 +010030 def resource_setup(cls):
31 super(RoutersTest, cls).resource_setup()
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090032 if not test.is_extension_enabled('router', 'network'):
33 msg = "router extension not enabled."
34 raise cls.skipException(msg)
jun xie82fbc582014-02-19 23:07:59 +080035 admin_manager = clients.AdminManager()
36 cls.identity_admin_client = admin_manager.identity_client
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +030037 cls.tenant_cidr = (CONF.network.tenant_network_cidr
38 if cls._ip_version == 4 else
39 CONF.network.tenant_network_v6_cidr)
nayna-patel197c0122013-07-11 10:18:00 +000040
Adam Gandelman3e9d12b2014-04-02 17:04:19 -070041 def _cleanup_router(self, router):
42 self.delete_router(router)
43 self.routers.remove(router)
44
45 def _create_router(self, name, admin_state_up=False,
46 external_network_id=None, enable_snat=None):
47 # associate a cleanup with created routers to avoid quota limits
48 router = self.create_router(name, admin_state_up,
49 external_network_id, enable_snat)
50 self.addCleanup(self._cleanup_router, router)
51 return router
52
armando-migliaccio89e5b962013-12-16 06:12:16 -080053 @test.attr(type='smoke')
nayna-patel197c0122013-07-11 10:18:00 +000054 def test_create_show_list_update_delete_router(self):
55 # Create a router
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -070056 # NOTE(salv-orlando): Do not invoke self.create_router
57 # as we need to check the response code
Masayuki Igawa259c1132013-10-31 17:48:44 +090058 name = data_utils.rand_name('router-')
David Kranz34e88122014-12-11 15:24:05 -050059 create_body = self.client.create_router(
nayna-patel197c0122013-07-11 10:18:00 +000060 name, external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +000061 "network_id": CONF.network.public_network_id},
nayna-patel197c0122013-07-11 10:18:00 +000062 admin_state_up=False)
nayna-patel197c0122013-07-11 10:18:00 +000063 self.addCleanup(self._delete_router, create_body['router']['id'])
64 self.assertEqual(create_body['router']['name'], name)
65 self.assertEqual(
66 create_body['router']['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000067 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000068 self.assertEqual(create_body['router']['admin_state_up'], False)
69 # Show details of the created router
David Kranz34e88122014-12-11 15:24:05 -050070 show_body = self.client.show_router(create_body['router']['id'])
nayna-patel197c0122013-07-11 10:18:00 +000071 self.assertEqual(show_body['router']['name'], name)
72 self.assertEqual(
73 show_body['router']['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000074 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000075 self.assertEqual(show_body['router']['admin_state_up'], False)
76 # List routers and verify if created router is there in response
David Kranz34e88122014-12-11 15:24:05 -050077 list_body = self.client.list_routers()
nayna-patel197c0122013-07-11 10:18:00 +000078 routers_list = list()
79 for router in list_body['routers']:
80 routers_list.append(router['id'])
81 self.assertIn(create_body['router']['id'], routers_list)
82 # Update the name of router and verify if it is updated
83 updated_name = 'updated ' + name
David Kranz34e88122014-12-11 15:24:05 -050084 update_body = self.client.update_router(create_body['router']['id'],
85 name=updated_name)
nayna-patel197c0122013-07-11 10:18:00 +000086 self.assertEqual(update_body['router']['name'], updated_name)
David Kranz34e88122014-12-11 15:24:05 -050087 show_body = self.client.show_router(
nayna-patel197c0122013-07-11 10:18:00 +000088 create_body['router']['id'])
89 self.assertEqual(show_body['router']['name'], updated_name)
90
armando-migliaccio89e5b962013-12-16 06:12:16 -080091 @test.attr(type='smoke')
jun xie82fbc582014-02-19 23:07:59 +080092 def test_create_router_setting_tenant_id(self):
93 # Test creating router from admin user setting tenant_id.
94 test_tenant = data_utils.rand_name('test_tenant_')
95 test_description = data_utils.rand_name('desc_')
David Kranzb7afa922014-12-30 10:56:26 -050096 tenant = self.identity_admin_client.create_tenant(
Rohan Kanadeeeb21642014-08-14 12:00:26 +020097 name=test_tenant, description=test_description)
jun xie82fbc582014-02-19 23:07:59 +080098 tenant_id = tenant['id']
99 self.addCleanup(self.identity_admin_client.delete_tenant, tenant_id)
100
101 name = data_utils.rand_name('router-')
David Kranz34e88122014-12-11 15:24:05 -0500102 create_body = self.admin_client.create_router(name,
103 tenant_id=tenant_id)
jun xie82fbc582014-02-19 23:07:59 +0800104 self.addCleanup(self.admin_client.delete_router,
105 create_body['router']['id'])
106 self.assertEqual(tenant_id, create_body['router']['tenant_id'])
107
varun yadavfaa3c8d2014-07-18 05:44:03 -0700108 @test.requires_ext(extension='ext-gw-mode', service='network')
109 @test.attr(type='smoke')
110 def test_create_router_with_default_snat_value(self):
111 # Create a router with default snat rule
112 name = data_utils.rand_name('router')
Matthew Treinish1d14c542014-06-17 20:25:40 -0400113 router = self._create_router(
114 name, external_network_id=CONF.network.public_network_id)
115 self._verify_router_gateway(
116 router['id'], {'network_id': CONF.network.public_network_id,
117 'enable_snat': True})
varun yadavfaa3c8d2014-07-18 05:44:03 -0700118
119 @test.requires_ext(extension='ext-gw-mode', service='network')
120 @test.attr(type='smoke')
121 def test_create_router_with_snat_explicit(self):
122 name = data_utils.rand_name('snat-router')
123 # Create a router enabling snat attributes
124 enable_snat_states = [False, True]
125 for enable_snat in enable_snat_states:
126 external_gateway_info = {
127 'network_id': CONF.network.public_network_id,
128 'enable_snat': enable_snat}
David Kranz34e88122014-12-11 15:24:05 -0500129 create_body = self.admin_client.create_router(
varun yadavfaa3c8d2014-07-18 05:44:03 -0700130 name, external_gateway_info=external_gateway_info)
varun yadavfaa3c8d2014-07-18 05:44:03 -0700131 self.addCleanup(self.admin_client.delete_router,
Matthew Treinish1d14c542014-06-17 20:25:40 -0400132 create_body['router']['id'])
varun yadavfaa3c8d2014-07-18 05:44:03 -0700133 # Verify snat attributes after router creation
134 self._verify_router_gateway(create_body['router']['id'],
Matthew Treinish1d14c542014-06-17 20:25:40 -0400135 exp_ext_gw_info=external_gateway_info)
varun yadavfaa3c8d2014-07-18 05:44:03 -0700136
jun xie82fbc582014-02-19 23:07:59 +0800137 @test.attr(type='smoke')
nayna-patel197c0122013-07-11 10:18:00 +0000138 def test_add_remove_router_interface_with_subnet_id(self):
139 network = self.create_network()
140 subnet = self.create_subnet(network)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700141 router = self._create_router(data_utils.rand_name('router-'))
Chang Bo Guof099f802013-09-13 19:01:46 -0700142 # Add router interface with subnet id
David Kranz34e88122014-12-11 15:24:05 -0500143 interface = self.client.add_router_interface_with_subnet_id(
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700144 router['id'], subnet['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000145 self.addCleanup(self._remove_router_interface_with_subnet_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700146 router['id'], subnet['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200147 self.assertIn('subnet_id', interface.keys())
148 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000149 # Verify router id is equal to device id in port details
David Kranz34e88122014-12-11 15:24:05 -0500150 show_port_body = self.client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000151 interface['port_id'])
152 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700153 router['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000154
armando-migliaccio89e5b962013-12-16 06:12:16 -0800155 @test.attr(type='smoke')
nayna-patel197c0122013-07-11 10:18:00 +0000156 def test_add_remove_router_interface_with_port_id(self):
157 network = self.create_network()
158 self.create_subnet(network)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700159 router = self._create_router(data_utils.rand_name('router-'))
David Kranz34e88122014-12-11 15:24:05 -0500160 port_body = self.client.create_port(
Eugene Nikanorove9d255a2013-12-18 16:31:42 +0400161 network_id=network['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000162 # add router interface to port created above
David Kranz34e88122014-12-11 15:24:05 -0500163 interface = self.client.add_router_interface_with_port_id(
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700164 router['id'], port_body['port']['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000165 self.addCleanup(self._remove_router_interface_with_port_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700166 router['id'], port_body['port']['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200167 self.assertIn('subnet_id', interface.keys())
168 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000169 # Verify router id is equal to device id in port details
David Kranz34e88122014-12-11 15:24:05 -0500170 show_port_body = self.client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000171 interface['port_id'])
172 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700173 router['id'])
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700174
175 def _verify_router_gateway(self, router_id, exp_ext_gw_info=None):
David Kranz34e88122014-12-11 15:24:05 -0500176 show_body = self.admin_client.show_router(router_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700177 actual_ext_gw_info = show_body['router']['external_gateway_info']
178 if exp_ext_gw_info is None:
179 self.assertIsNone(actual_ext_gw_info)
180 return
181 # Verify only keys passed in exp_ext_gw_info
182 for k, v in exp_ext_gw_info.iteritems():
183 self.assertEqual(v, actual_ext_gw_info[k])
184
185 def _verify_gateway_port(self, router_id):
David Kranz34e88122014-12-11 15:24:05 -0500186 list_body = self.admin_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000187 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700188 device_id=router_id)
189 self.assertEqual(len(list_body['ports']), 1)
190 gw_port = list_body['ports'][0]
191 fixed_ips = gw_port['fixed_ips']
Sean M. Collins08803f62014-12-09 16:41:01 -0700192 self.assertGreaterEqual(len(fixed_ips), 1)
David Kranz34e88122014-12-11 15:24:05 -0500193 public_net_body = self.admin_client.show_network(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000194 CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700195 public_subnet_id = public_net_body['network']['subnets'][0]
Sean M. Collins2bc293e2014-12-10 10:37:57 -0700196 self.assertIn(public_subnet_id,
197 map(lambda x: x['subnet_id'], fixed_ips))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700198
armando-migliaccio89e5b962013-12-16 06:12:16 -0800199 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700200 def test_update_router_set_gateway(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700201 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700202 self.client.update_router(
203 router['id'],
204 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000205 'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700206 # Verify operation - router
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700207 self._verify_router_gateway(
208 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000209 {'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700210 self._verify_gateway_port(router['id'])
211
ronak79f17932014-01-27 17:56:21 -0800212 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800213 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700214 def test_update_router_set_gateway_with_snat_explicit(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700215 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700216 self.admin_client.update_router_with_snat_gw_info(
217 router['id'],
218 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000219 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700220 'enable_snat': True})
221 self._verify_router_gateway(
222 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000223 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700224 'enable_snat': True})
225 self._verify_gateway_port(router['id'])
226
ronak79f17932014-01-27 17:56:21 -0800227 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800228 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700229 def test_update_router_set_gateway_without_snat(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700230 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700231 self.admin_client.update_router_with_snat_gw_info(
232 router['id'],
233 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000234 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700235 'enable_snat': False})
236 self._verify_router_gateway(
237 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000238 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700239 'enable_snat': False})
240 self._verify_gateway_port(router['id'])
241
armando-migliaccio89e5b962013-12-16 06:12:16 -0800242 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700243 def test_update_router_unset_gateway(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700244 router = self._create_router(
Masayuki Igawa259c1132013-10-31 17:48:44 +0900245 data_utils.rand_name('router-'),
Matthew Treinish03b48df2014-01-29 16:59:49 +0000246 external_network_id=CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700247 self.client.update_router(router['id'], external_gateway_info={})
248 self._verify_router_gateway(router['id'])
249 # No gateway port expected
David Kranz34e88122014-12-11 15:24:05 -0500250 list_body = self.admin_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000251 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700252 device_id=router['id'])
253 self.assertFalse(list_body['ports'])
254
ronak79f17932014-01-27 17:56:21 -0800255 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800256 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700257 def test_update_router_reset_gateway_without_snat(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700258 router = self._create_router(
Masayuki Igawa259c1132013-10-31 17:48:44 +0900259 data_utils.rand_name('router-'),
Matthew Treinish03b48df2014-01-29 16:59:49 +0000260 external_network_id=CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700261 self.admin_client.update_router_with_snat_gw_info(
262 router['id'],
263 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000264 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700265 'enable_snat': False})
266 self._verify_router_gateway(
267 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000268 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700269 'enable_snat': False})
270 self._verify_gateway_port(router['id'])
ChenZheng04ac6942013-12-09 16:42:52 +0800271
armando-migliaccio89e5b962013-12-16 06:12:16 -0800272 @test.requires_ext(extension='extraroute', service='network')
273 @test.attr(type='smoke')
ChenZheng04ac6942013-12-09 16:42:52 +0800274 def test_update_extra_route(self):
275 self.network = self.create_network()
276 self.name = self.network['name']
277 self.subnet = self.create_subnet(self.network)
278 # Add router interface with subnet id
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700279 self.router = self._create_router(
280 data_utils.rand_name('router-'), True)
ChenZheng04ac6942013-12-09 16:42:52 +0800281 self.create_router_interface(self.router['id'], self.subnet['id'])
282 self.addCleanup(
283 self._delete_extra_routes,
284 self.router['id'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100285 # Update router extra route, second ip of the range is
286 # used as next hop
ChenZheng04ac6942013-12-09 16:42:52 +0800287 cidr = netaddr.IPNetwork(self.subnet['cidr'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100288 next_hop = str(cidr[2])
289 destination = str(self.subnet['cidr'])
David Kranz34e88122014-12-11 15:24:05 -0500290 extra_route = self.client.update_extra_routes(self.router['id'],
291 next_hop, destination)
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100292 self.assertEqual(1, len(extra_route['router']['routes']))
293 self.assertEqual(destination,
294 extra_route['router']['routes'][0]['destination'])
295 self.assertEqual(next_hop,
296 extra_route['router']['routes'][0]['nexthop'])
David Kranz34e88122014-12-11 15:24:05 -0500297 show_body = self.client.show_router(self.router['id'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100298 self.assertEqual(destination,
299 show_body['router']['routes'][0]['destination'])
300 self.assertEqual(next_hop,
301 show_body['router']['routes'][0]['nexthop'])
ChenZheng04ac6942013-12-09 16:42:52 +0800302
303 def _delete_extra_routes(self, router_id):
David Kranz34e88122014-12-11 15:24:05 -0500304 self.client.delete_extra_routes(router_id)
liudongfbdfc7e2014-02-15 10:52:17 +0800305
306 @test.attr(type='smoke')
307 def test_update_router_admin_state(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700308 self.router = self._create_router(data_utils.rand_name('router-'))
liudongfbdfc7e2014-02-15 10:52:17 +0800309 self.assertFalse(self.router['admin_state_up'])
310 # Update router admin state
David Kranz34e88122014-12-11 15:24:05 -0500311 update_body = self.client.update_router(self.router['id'],
312 admin_state_up=True)
liudongfbdfc7e2014-02-15 10:52:17 +0800313 self.assertTrue(update_body['router']['admin_state_up'])
David Kranz34e88122014-12-11 15:24:05 -0500314 show_body = self.client.show_router(self.router['id'])
liudongfbdfc7e2014-02-15 10:52:17 +0800315 self.assertTrue(show_body['router']['admin_state_up'])
316
317 @test.attr(type='smoke')
318 def test_add_multiple_router_interfaces(self):
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700319 network01 = self.create_network(
320 network_name=data_utils.rand_name('router-network01-'))
321 network02 = self.create_network(
322 network_name=data_utils.rand_name('router-network02-'))
323 subnet01 = self.create_subnet(network01)
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300324 sub02_cidr = netaddr.IPNetwork(self.tenant_cidr).next()
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700325 subnet02 = self.create_subnet(network02, cidr=sub02_cidr)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700326 router = self._create_router(data_utils.rand_name('router-'))
liudongfbdfc7e2014-02-15 10:52:17 +0800327 interface01 = self._add_router_interface_with_subnet_id(router['id'],
328 subnet01['id'])
329 self._verify_router_interface(router['id'], subnet01['id'],
330 interface01['port_id'])
331 interface02 = self._add_router_interface_with_subnet_id(router['id'],
332 subnet02['id'])
333 self._verify_router_interface(router['id'], subnet02['id'],
334 interface02['port_id'])
335
liudongfbdfc7e2014-02-15 10:52:17 +0800336 def _verify_router_interface(self, router_id, subnet_id, port_id):
David Kranz34e88122014-12-11 15:24:05 -0500337 show_port_body = self.client.show_port(port_id)
liudongfbdfc7e2014-02-15 10:52:17 +0800338 interface_port = show_port_body['port']
339 self.assertEqual(router_id, interface_port['device_id'])
340 self.assertEqual(subnet_id,
341 interface_port['fixed_ips'][0]['subnet_id'])
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300342
343
344class RoutersIpV6Test(RoutersTest):
345 _ip_version = 6