blob: e989b69e72808e3d8add164dca208154ad0ec668 [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
Matthew Treinish71426682015-04-23 11:19:38 -040017import six
ChenZheng04ac6942013-12-09 16:42:52 +080018
rossellae02431e2013-11-15 17:58:29 +010019from tempest.api.network import base_routers as base
Fei Long Wangd39431f2015-05-14 11:30:48 +120020from 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
Rohan Kanadea565e452015-01-27 14:00:13 +053030 def skip_checks(cls):
31 super(RoutersTest, cls).skip_checks()
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)
Rohan Kanadea565e452015-01-27 14:00:13 +053035
36 @classmethod
37 def setup_clients(cls):
38 super(RoutersTest, cls).setup_clients()
39 cls.identity_admin_client = cls.os_adm.identity_client
40
41 @classmethod
42 def resource_setup(cls):
43 super(RoutersTest, cls).resource_setup()
Sean Dagueed6e5862016-04-04 10:49:13 -040044 cls.tenant_cidr = (CONF.network.project_network_cidr
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +030045 if cls._ip_version == 4 else
Sean Dagueed6e5862016-04-04 10:49:13 -040046 CONF.network.project_network_v6_cidr)
nayna-patel197c0122013-07-11 10:18:00 +000047
armando-migliaccio89e5b962013-12-16 06:12:16 -080048 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080049 @test.idempotent_id('f64403e2-8483-4b34-8ccd-b09a87bcc68c')
nayna-patel197c0122013-07-11 10:18:00 +000050 def test_create_show_list_update_delete_router(self):
51 # Create a router
Tianbiao Qi83158912016-11-03 10:37:30 +080052 router = self._create_router(
53 admin_state_up=False,
54 external_network_id=CONF.network.public_network_id)
55 self.assertEqual(router['admin_state_up'], False)
nayna-patel197c0122013-07-11 10:18:00 +000056 self.assertEqual(
Tianbiao Qi83158912016-11-03 10:37:30 +080057 router['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000058 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000059 # Show details of the created router
Tianbiao Qi83158912016-11-03 10:37:30 +080060 router_show = self.routers_client.show_router(
61 router['id'])['router']
62 self.assertEqual(router_show['name'], router['name'])
nayna-patel197c0122013-07-11 10:18:00 +000063 self.assertEqual(
Tianbiao Qi83158912016-11-03 10:37:30 +080064 router_show['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000065 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000066 # List routers and verify if created router is there in response
Tianbiao Qi83158912016-11-03 10:37:30 +080067 routers = self.routers_client.list_routers()['routers']
68 self.assertIn(router['id'], map(lambda x: x['id'], routers))
nayna-patel197c0122013-07-11 10:18:00 +000069 # Update the name of router and verify if it is updated
Tianbiao Qi83158912016-11-03 10:37:30 +080070 updated_name = 'updated' + router['name']
71 router_update = self.routers_client.update_router(
72 router['id'], name=updated_name)['router']
73 self.assertEqual(router_update['name'], updated_name)
74 router_show = self.routers_client.show_router(
75 router['id'])['router']
76 self.assertEqual(router_show['name'], updated_name)
nayna-patel197c0122013-07-11 10:18:00 +000077
Chris Hoge7579c1a2015-02-26 14:12:15 -080078 @test.idempotent_id('e54dd3a3-4352-4921-b09d-44369ae17397')
Jamie Lennox15350172015-08-17 10:54:25 +100079 def test_create_router_setting_project_id(self):
80 # Test creating router from admin user setting project_id.
81 project = data_utils.rand_name('test_tenant_')
82 description = data_utils.rand_name('desc_')
83 project = self.identity_utils.create_project(name=project,
84 description=description)
85 project_id = project['id']
86 self.addCleanup(self.identity_utils.delete_project, project_id)
jun xie82fbc582014-02-19 23:07:59 +080087
88 name = data_utils.rand_name('router-')
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000089 create_body = self.admin_routers_client.create_router(
Ken'ichi Ohmichi6665c972016-02-24 13:09:09 -080090 name=name, tenant_id=project_id)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000091 self.addCleanup(self.admin_routers_client.delete_router,
jun xie82fbc582014-02-19 23:07:59 +080092 create_body['router']['id'])
Jamie Lennox15350172015-08-17 10:54:25 +100093 self.assertEqual(project_id, create_body['router']['tenant_id'])
jun xie82fbc582014-02-19 23:07:59 +080094
Chris Hoge7579c1a2015-02-26 14:12:15 -080095 @test.idempotent_id('847257cc-6afd-4154-b8fb-af49f5670ce8')
varun yadavfaa3c8d2014-07-18 05:44:03 -070096 @test.requires_ext(extension='ext-gw-mode', service='network')
varun yadavfaa3c8d2014-07-18 05:44:03 -070097 def test_create_router_with_default_snat_value(self):
98 # Create a router with default snat rule
Matthew Treinish1d14c542014-06-17 20:25:40 -040099 router = self._create_router(
zhufld2c40ca2016-10-18 17:03:07 +0800100 external_network_id=CONF.network.public_network_id)
Matthew Treinish1d14c542014-06-17 20:25:40 -0400101 self._verify_router_gateway(
102 router['id'], {'network_id': CONF.network.public_network_id,
103 'enable_snat': True})
varun yadavfaa3c8d2014-07-18 05:44:03 -0700104
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('ea74068d-09e9-4fd7-8995-9b6a1ace920f')
varun yadavfaa3c8d2014-07-18 05:44:03 -0700106 @test.requires_ext(extension='ext-gw-mode', service='network')
varun yadavfaa3c8d2014-07-18 05:44:03 -0700107 def test_create_router_with_snat_explicit(self):
108 name = data_utils.rand_name('snat-router')
109 # Create a router enabling snat attributes
110 enable_snat_states = [False, True]
111 for enable_snat in enable_snat_states:
112 external_gateway_info = {
113 'network_id': CONF.network.public_network_id,
114 'enable_snat': enable_snat}
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000115 create_body = self.admin_routers_client.create_router(
Ken'ichi Ohmichi6665c972016-02-24 13:09:09 -0800116 name=name, external_gateway_info=external_gateway_info)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000117 self.addCleanup(self.admin_routers_client.delete_router,
Matthew Treinish1d14c542014-06-17 20:25:40 -0400118 create_body['router']['id'])
varun yadavfaa3c8d2014-07-18 05:44:03 -0700119 # Verify snat attributes after router creation
120 self._verify_router_gateway(create_body['router']['id'],
Matthew Treinish1d14c542014-06-17 20:25:40 -0400121 exp_ext_gw_info=external_gateway_info)
varun yadavfaa3c8d2014-07-18 05:44:03 -0700122
jun xie82fbc582014-02-19 23:07:59 +0800123 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800124 @test.idempotent_id('b42e6e39-2e37-49cc-a6f4-8467e940900a')
nayna-patel197c0122013-07-11 10:18:00 +0000125 def test_add_remove_router_interface_with_subnet_id(self):
126 network = self.create_network()
127 subnet = self.create_subnet(network)
zhufld2c40ca2016-10-18 17:03:07 +0800128 router = self._create_router()
Chang Bo Guof099f802013-09-13 19:01:46 -0700129 # Add router interface with subnet id
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000130 interface = self.routers_client.add_router_interface(
131 router['id'], subnet_id=subnet['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000132 self.addCleanup(self._remove_router_interface_with_subnet_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700133 router['id'], subnet['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200134 self.assertIn('subnet_id', interface.keys())
135 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000136 # Verify router id is equal to device id in port details
John Warren49c0fe52015-10-22 12:35:54 -0400137 show_port_body = self.ports_client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000138 interface['port_id'])
139 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700140 router['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000141
armando-migliaccio89e5b962013-12-16 06:12:16 -0800142 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800143 @test.idempotent_id('2b7d2f37-6748-4d78-92e5-1d590234f0d5')
nayna-patel197c0122013-07-11 10:18:00 +0000144 def test_add_remove_router_interface_with_port_id(self):
145 network = self.create_network()
146 self.create_subnet(network)
zhufld2c40ca2016-10-18 17:03:07 +0800147 router = self._create_router()
John Warren49c0fe52015-10-22 12:35:54 -0400148 port_body = self.ports_client.create_port(
Eugene Nikanorove9d255a2013-12-18 16:31:42 +0400149 network_id=network['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000150 # add router interface to port created above
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000151 interface = self.routers_client.add_router_interface(
piyush11078694aca952015-12-17 12:54:44 +0530152 router['id'],
153 port_id=port_body['port']['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000154 self.addCleanup(self._remove_router_interface_with_port_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700155 router['id'], port_body['port']['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200156 self.assertIn('subnet_id', interface.keys())
157 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000158 # Verify router id is equal to device id in port details
John Warren49c0fe52015-10-22 12:35:54 -0400159 show_port_body = self.ports_client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000160 interface['port_id'])
161 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700162 router['id'])
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700163
164 def _verify_router_gateway(self, router_id, exp_ext_gw_info=None):
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000165 show_body = self.admin_routers_client.show_router(router_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700166 actual_ext_gw_info = show_body['router']['external_gateway_info']
167 if exp_ext_gw_info is None:
168 self.assertIsNone(actual_ext_gw_info)
169 return
170 # Verify only keys passed in exp_ext_gw_info
Matthew Treinish71426682015-04-23 11:19:38 -0400171 for k, v in six.iteritems(exp_ext_gw_info):
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700172 self.assertEqual(v, actual_ext_gw_info[k])
173
174 def _verify_gateway_port(self, router_id):
John Warren49c0fe52015-10-22 12:35:54 -0400175 list_body = self.admin_ports_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000176 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700177 device_id=router_id)
178 self.assertEqual(len(list_body['ports']), 1)
179 gw_port = list_body['ports'][0]
180 fixed_ips = gw_port['fixed_ips']
Sean M. Collins08803f62014-12-09 16:41:01 -0700181 self.assertGreaterEqual(len(fixed_ips), 1)
Kieran Spearc6cb1ec2016-09-15 19:49:35 +0200182 # Assert that all of the IPs from the router gateway port
183 # are allocated from a valid public subnet.
John Warren94d8faf2015-09-15 12:22:24 -0400184 public_net_body = self.admin_networks_client.show_network(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000185 CONF.network.public_network_id)
Kieran Spearc6cb1ec2016-09-15 19:49:35 +0200186 public_subnet_ids = public_net_body['network']['subnets']
187 for fixed_ip in fixed_ips:
188 subnet_id = fixed_ip['subnet_id']
189 self.assertIn(subnet_id, public_subnet_ids)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700190
Chris Hoge7579c1a2015-02-26 14:12:15 -0800191 @test.idempotent_id('6cc285d8-46bf-4f36-9b1a-783e3008ba79')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700192 def test_update_router_set_gateway(self):
zhufld2c40ca2016-10-18 17:03:07 +0800193 router = self._create_router()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000194 self.routers_client.update_router(
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700195 router['id'],
196 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000197 'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700198 # Verify operation - router
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700199 self._verify_router_gateway(
200 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000201 {'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700202 self._verify_gateway_port(router['id'])
203
Chris Hoge7579c1a2015-02-26 14:12:15 -0800204 @test.idempotent_id('b386c111-3b21-466d-880c-5e72b01e1a33')
ronak79f17932014-01-27 17:56:21 -0800205 @test.requires_ext(extension='ext-gw-mode', service='network')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700206 def test_update_router_set_gateway_with_snat_explicit(self):
zhufld2c40ca2016-10-18 17:03:07 +0800207 router = self._create_router()
Ken'ichi Ohmichib7cdaae2016-05-04 15:41:07 -0700208 self.admin_routers_client.update_router(
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700209 router['id'],
210 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000211 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700212 'enable_snat': True})
213 self._verify_router_gateway(
214 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000215 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700216 'enable_snat': True})
217 self._verify_gateway_port(router['id'])
218
Chris Hoge7579c1a2015-02-26 14:12:15 -0800219 @test.idempotent_id('96536bc7-8262-4fb2-9967-5c46940fa279')
ronak79f17932014-01-27 17:56:21 -0800220 @test.requires_ext(extension='ext-gw-mode', service='network')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700221 def test_update_router_set_gateway_without_snat(self):
zhufld2c40ca2016-10-18 17:03:07 +0800222 router = self._create_router()
Ken'ichi Ohmichib7cdaae2016-05-04 15:41:07 -0700223 self.admin_routers_client.update_router(
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700224 router['id'],
225 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000226 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700227 'enable_snat': False})
228 self._verify_router_gateway(
229 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000230 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700231 'enable_snat': False})
232 self._verify_gateway_port(router['id'])
233
Chris Hoge7579c1a2015-02-26 14:12:15 -0800234 @test.idempotent_id('ad81b7ee-4f81-407b-a19c-17e623f763e8')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700235 def test_update_router_unset_gateway(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700236 router = self._create_router(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000237 external_network_id=CONF.network.public_network_id)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000238 self.routers_client.update_router(router['id'],
239 external_gateway_info={})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700240 self._verify_router_gateway(router['id'])
241 # No gateway port expected
John Warren49c0fe52015-10-22 12:35:54 -0400242 list_body = self.admin_ports_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000243 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700244 device_id=router['id'])
245 self.assertFalse(list_body['ports'])
246
Chris Hoge7579c1a2015-02-26 14:12:15 -0800247 @test.idempotent_id('f2faf994-97f4-410b-a831-9bc977b64374')
ronak79f17932014-01-27 17:56:21 -0800248 @test.requires_ext(extension='ext-gw-mode', service='network')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700249 def test_update_router_reset_gateway_without_snat(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700250 router = self._create_router(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000251 external_network_id=CONF.network.public_network_id)
Ken'ichi Ohmichib7cdaae2016-05-04 15:41:07 -0700252 self.admin_routers_client.update_router(
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700253 router['id'],
254 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000255 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700256 'enable_snat': False})
257 self._verify_router_gateway(
258 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000259 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700260 'enable_snat': False})
261 self._verify_gateway_port(router['id'])
ChenZheng04ac6942013-12-09 16:42:52 +0800262
Chris Hoge7579c1a2015-02-26 14:12:15 -0800263 @test.idempotent_id('c86ac3a8-50bd-4b00-a6b8-62af84a0765c')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800264 @test.requires_ext(extension='extraroute', service='network')
Abhishek6707b5e2016-01-14 15:49:11 +0530265 def test_update_delete_extra_route(self):
Shuquan Huangde79d262015-06-26 02:48:22 +0000266 # Create different cidr for each subnet to avoid cidr duplicate
Sean Dagueed6e5862016-04-04 10:49:13 -0400267 # The cidr starts from project_cidr
Shuquan Huangde79d262015-06-26 02:48:22 +0000268 next_cidr = netaddr.IPNetwork(self.tenant_cidr)
269 # Prepare to build several routes
270 test_routes = []
David Kranz4d06ebb2015-07-31 15:18:08 -0400271 routes_num = 4
Shuquan Huangde79d262015-06-26 02:48:22 +0000272 # Create a router
zhufld2c40ca2016-10-18 17:03:07 +0800273 router = self._create_router(admin_state_up=True)
ChenZheng04ac6942013-12-09 16:42:52 +0800274 self.addCleanup(
275 self._delete_extra_routes,
Brandon Palmf35aa8b2015-08-07 14:56:59 -0500276 router['id'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100277 # Update router extra route, second ip of the range is
278 # used as next hop
Shuquan Huangde79d262015-06-26 02:48:22 +0000279 for i in range(routes_num):
280 network = self.create_network()
281 subnet = self.create_subnet(network, cidr=next_cidr)
282 next_cidr = next_cidr.next()
283
284 # Add router interface with subnet id
Brandon Palmf35aa8b2015-08-07 14:56:59 -0500285 self.create_router_interface(router['id'], subnet['id'])
Shuquan Huangde79d262015-06-26 02:48:22 +0000286
287 cidr = netaddr.IPNetwork(subnet['cidr'])
288 next_hop = str(cidr[2])
289 destination = str(subnet['cidr'])
290 test_routes.append(
291 {'nexthop': next_hop, 'destination': destination}
292 )
293
294 test_routes.sort(key=lambda x: x['destination'])
Ken'ichi Ohmichi50fc7842016-05-30 11:21:08 -0700295 extra_route = self.routers_client.update_router(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000296 router['id'], routes=test_routes)
297 show_body = self.routers_client.show_router(router['id'])
Shuquan Huangde79d262015-06-26 02:48:22 +0000298 # Assert the number of routes
299 self.assertEqual(routes_num, len(extra_route['router']['routes']))
300 self.assertEqual(routes_num, len(show_body['router']['routes']))
301
302 routes = extra_route['router']['routes']
303 routes.sort(key=lambda x: x['destination'])
304 # Assert the nexthops & destination
305 for i in range(routes_num):
306 self.assertEqual(test_routes[i]['destination'],
307 routes[i]['destination'])
308 self.assertEqual(test_routes[i]['nexthop'], routes[i]['nexthop'])
309
310 routes = show_body['router']['routes']
311 routes.sort(key=lambda x: x['destination'])
312 for i in range(routes_num):
313 self.assertEqual(test_routes[i]['destination'],
314 routes[i]['destination'])
315 self.assertEqual(test_routes[i]['nexthop'], routes[i]['nexthop'])
ChenZheng04ac6942013-12-09 16:42:52 +0800316
Ken'ichi Ohmichi1f387612016-05-30 11:28:06 -0700317 self._delete_extra_routes(router['id'])
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000318 show_body_after_deletion = self.routers_client.show_router(
319 router['id'])
Abhishek6707b5e2016-01-14 15:49:11 +0530320 self.assertEmpty(show_body_after_deletion['router']['routes'])
321
ChenZheng04ac6942013-12-09 16:42:52 +0800322 def _delete_extra_routes(self, router_id):
Ken'ichi Ohmichi1f387612016-05-30 11:28:06 -0700323 self.routers_client.update_router(router_id, routes=None)
liudongfbdfc7e2014-02-15 10:52:17 +0800324
Chris Hoge7579c1a2015-02-26 14:12:15 -0800325 @test.idempotent_id('a8902683-c788-4246-95c7-ad9c6d63a4d9')
liudongfbdfc7e2014-02-15 10:52:17 +0800326 def test_update_router_admin_state(self):
zhufld2c40ca2016-10-18 17:03:07 +0800327 router = self._create_router()
Brandon Palmf35aa8b2015-08-07 14:56:59 -0500328 self.assertFalse(router['admin_state_up'])
liudongfbdfc7e2014-02-15 10:52:17 +0800329 # Update router admin state
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000330 update_body = self.routers_client.update_router(router['id'],
331 admin_state_up=True)
liudongfbdfc7e2014-02-15 10:52:17 +0800332 self.assertTrue(update_body['router']['admin_state_up'])
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000333 show_body = self.routers_client.show_router(router['id'])
liudongfbdfc7e2014-02-15 10:52:17 +0800334 self.assertTrue(show_body['router']['admin_state_up'])
335
336 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800337 @test.idempotent_id('802c73c9-c937-4cef-824b-2191e24a6aab')
liudongfbdfc7e2014-02-15 10:52:17 +0800338 def test_add_multiple_router_interfaces(self):
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700339 network01 = self.create_network(
340 network_name=data_utils.rand_name('router-network01-'))
341 network02 = self.create_network(
342 network_name=data_utils.rand_name('router-network02-'))
343 subnet01 = self.create_subnet(network01)
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300344 sub02_cidr = netaddr.IPNetwork(self.tenant_cidr).next()
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700345 subnet02 = self.create_subnet(network02, cidr=sub02_cidr)
zhufld2c40ca2016-10-18 17:03:07 +0800346 router = self._create_router()
liudongfbdfc7e2014-02-15 10:52:17 +0800347 interface01 = self._add_router_interface_with_subnet_id(router['id'],
348 subnet01['id'])
349 self._verify_router_interface(router['id'], subnet01['id'],
350 interface01['port_id'])
351 interface02 = self._add_router_interface_with_subnet_id(router['id'],
352 subnet02['id'])
353 self._verify_router_interface(router['id'], subnet02['id'],
354 interface02['port_id'])
355
Hardik Italiae1a17072015-07-15 17:58:24 -0700356 @test.idempotent_id('96522edf-b4b5-45d9-8443-fa11c26e6eff')
357 def test_router_interface_port_update_with_fixed_ip(self):
358 network = self.create_network()
359 subnet = self.create_subnet(network)
zhufld2c40ca2016-10-18 17:03:07 +0800360 router = self._create_router()
Hardik Italiae1a17072015-07-15 17:58:24 -0700361 fixed_ip = [{'subnet_id': subnet['id']}]
362 interface = self._add_router_interface_with_subnet_id(router['id'],
363 subnet['id'])
364 self.assertIn('port_id', interface)
365 self.assertIn('subnet_id', interface)
366 port = self.ports_client.show_port(interface['port_id'])
367 self.assertEqual(port['port']['id'], interface['port_id'])
368 router_port = self.ports_client.update_port(port['port']['id'],
369 fixed_ips=fixed_ip)
370 self.assertEqual(subnet['id'],
371 router_port['port']['fixed_ips'][0]['subnet_id'])
372
liudongfbdfc7e2014-02-15 10:52:17 +0800373 def _verify_router_interface(self, router_id, subnet_id, port_id):
John Warren49c0fe52015-10-22 12:35:54 -0400374 show_port_body = self.ports_client.show_port(port_id)
liudongfbdfc7e2014-02-15 10:52:17 +0800375 interface_port = show_port_body['port']
376 self.assertEqual(router_id, interface_port['device_id'])
377 self.assertEqual(subnet_id,
378 interface_port['fixed_ips'][0]['subnet_id'])
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300379
380
381class RoutersIpV6Test(RoutersTest):
382 _ip_version = 6