blob: e9c9484425b25d9cd439bcf62da28307b3f72eec [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 Treinish01472ff2015-02-20 17:26:52 -050017from tempest_lib.common.utils import data_utils
ChenZheng04ac6942013-12-09 16:42:52 +080018
rossellae02431e2013-11-15 17:58:29 +010019from tempest.api.network import base_routers as base
jun xie82fbc582014-02-19 23:07:59 +080020from tempest import clients
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')
Chris Hoge7579c1a2015-02-26 14:12:15 -080054 @test.idempotent_id('f64403e2-8483-4b34-8ccd-b09a87bcc68c')
nayna-patel197c0122013-07-11 10:18:00 +000055 def test_create_show_list_update_delete_router(self):
56 # Create a router
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -070057 # NOTE(salv-orlando): Do not invoke self.create_router
58 # as we need to check the response code
Masayuki Igawa259c1132013-10-31 17:48:44 +090059 name = data_utils.rand_name('router-')
David Kranz34e88122014-12-11 15:24:05 -050060 create_body = self.client.create_router(
nayna-patel197c0122013-07-11 10:18:00 +000061 name, external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +000062 "network_id": CONF.network.public_network_id},
nayna-patel197c0122013-07-11 10:18:00 +000063 admin_state_up=False)
nayna-patel197c0122013-07-11 10:18:00 +000064 self.addCleanup(self._delete_router, create_body['router']['id'])
65 self.assertEqual(create_body['router']['name'], name)
66 self.assertEqual(
67 create_body['router']['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000068 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000069 self.assertEqual(create_body['router']['admin_state_up'], False)
70 # Show details of the created router
David Kranz34e88122014-12-11 15:24:05 -050071 show_body = self.client.show_router(create_body['router']['id'])
nayna-patel197c0122013-07-11 10:18:00 +000072 self.assertEqual(show_body['router']['name'], name)
73 self.assertEqual(
74 show_body['router']['external_gateway_info']['network_id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +000075 CONF.network.public_network_id)
nayna-patel197c0122013-07-11 10:18:00 +000076 self.assertEqual(show_body['router']['admin_state_up'], False)
77 # List routers and verify if created router is there in response
David Kranz34e88122014-12-11 15:24:05 -050078 list_body = self.client.list_routers()
nayna-patel197c0122013-07-11 10:18:00 +000079 routers_list = list()
80 for router in list_body['routers']:
81 routers_list.append(router['id'])
82 self.assertIn(create_body['router']['id'], routers_list)
83 # Update the name of router and verify if it is updated
84 updated_name = 'updated ' + name
David Kranz34e88122014-12-11 15:24:05 -050085 update_body = self.client.update_router(create_body['router']['id'],
86 name=updated_name)
nayna-patel197c0122013-07-11 10:18:00 +000087 self.assertEqual(update_body['router']['name'], updated_name)
David Kranz34e88122014-12-11 15:24:05 -050088 show_body = self.client.show_router(
nayna-patel197c0122013-07-11 10:18:00 +000089 create_body['router']['id'])
90 self.assertEqual(show_body['router']['name'], updated_name)
91
armando-migliaccio89e5b962013-12-16 06:12:16 -080092 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080093 @test.idempotent_id('e54dd3a3-4352-4921-b09d-44369ae17397')
jun xie82fbc582014-02-19 23:07:59 +080094 def test_create_router_setting_tenant_id(self):
95 # Test creating router from admin user setting tenant_id.
96 test_tenant = data_utils.rand_name('test_tenant_')
97 test_description = data_utils.rand_name('desc_')
David Kranzb7afa922014-12-30 10:56:26 -050098 tenant = self.identity_admin_client.create_tenant(
Rohan Kanadeeeb21642014-08-14 12:00:26 +020099 name=test_tenant, description=test_description)
jun xie82fbc582014-02-19 23:07:59 +0800100 tenant_id = tenant['id']
101 self.addCleanup(self.identity_admin_client.delete_tenant, tenant_id)
102
103 name = data_utils.rand_name('router-')
David Kranz34e88122014-12-11 15:24:05 -0500104 create_body = self.admin_client.create_router(name,
105 tenant_id=tenant_id)
jun xie82fbc582014-02-19 23:07:59 +0800106 self.addCleanup(self.admin_client.delete_router,
107 create_body['router']['id'])
108 self.assertEqual(tenant_id, create_body['router']['tenant_id'])
109
Chris Hoge7579c1a2015-02-26 14:12:15 -0800110 @test.idempotent_id('847257cc-6afd-4154-b8fb-af49f5670ce8')
varun yadavfaa3c8d2014-07-18 05:44:03 -0700111 @test.requires_ext(extension='ext-gw-mode', service='network')
112 @test.attr(type='smoke')
113 def test_create_router_with_default_snat_value(self):
114 # Create a router with default snat rule
115 name = data_utils.rand_name('router')
Matthew Treinish1d14c542014-06-17 20:25:40 -0400116 router = self._create_router(
117 name, external_network_id=CONF.network.public_network_id)
118 self._verify_router_gateway(
119 router['id'], {'network_id': CONF.network.public_network_id,
120 'enable_snat': True})
varun yadavfaa3c8d2014-07-18 05:44:03 -0700121
Chris Hoge7579c1a2015-02-26 14:12:15 -0800122 @test.idempotent_id('ea74068d-09e9-4fd7-8995-9b6a1ace920f')
varun yadavfaa3c8d2014-07-18 05:44:03 -0700123 @test.requires_ext(extension='ext-gw-mode', service='network')
124 @test.attr(type='smoke')
125 def test_create_router_with_snat_explicit(self):
126 name = data_utils.rand_name('snat-router')
127 # Create a router enabling snat attributes
128 enable_snat_states = [False, True]
129 for enable_snat in enable_snat_states:
130 external_gateway_info = {
131 'network_id': CONF.network.public_network_id,
132 'enable_snat': enable_snat}
David Kranz34e88122014-12-11 15:24:05 -0500133 create_body = self.admin_client.create_router(
varun yadavfaa3c8d2014-07-18 05:44:03 -0700134 name, external_gateway_info=external_gateway_info)
varun yadavfaa3c8d2014-07-18 05:44:03 -0700135 self.addCleanup(self.admin_client.delete_router,
Matthew Treinish1d14c542014-06-17 20:25:40 -0400136 create_body['router']['id'])
varun yadavfaa3c8d2014-07-18 05:44:03 -0700137 # Verify snat attributes after router creation
138 self._verify_router_gateway(create_body['router']['id'],
Matthew Treinish1d14c542014-06-17 20:25:40 -0400139 exp_ext_gw_info=external_gateway_info)
varun yadavfaa3c8d2014-07-18 05:44:03 -0700140
jun xie82fbc582014-02-19 23:07:59 +0800141 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800142 @test.idempotent_id('b42e6e39-2e37-49cc-a6f4-8467e940900a')
nayna-patel197c0122013-07-11 10:18:00 +0000143 def test_add_remove_router_interface_with_subnet_id(self):
144 network = self.create_network()
145 subnet = self.create_subnet(network)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700146 router = self._create_router(data_utils.rand_name('router-'))
Chang Bo Guof099f802013-09-13 19:01:46 -0700147 # Add router interface with subnet id
David Kranz34e88122014-12-11 15:24:05 -0500148 interface = self.client.add_router_interface_with_subnet_id(
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700149 router['id'], subnet['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000150 self.addCleanup(self._remove_router_interface_with_subnet_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700151 router['id'], subnet['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200152 self.assertIn('subnet_id', interface.keys())
153 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000154 # Verify router id is equal to device id in port details
David Kranz34e88122014-12-11 15:24:05 -0500155 show_port_body = self.client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000156 interface['port_id'])
157 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700158 router['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000159
armando-migliaccio89e5b962013-12-16 06:12:16 -0800160 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800161 @test.idempotent_id('2b7d2f37-6748-4d78-92e5-1d590234f0d5')
nayna-patel197c0122013-07-11 10:18:00 +0000162 def test_add_remove_router_interface_with_port_id(self):
163 network = self.create_network()
164 self.create_subnet(network)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700165 router = self._create_router(data_utils.rand_name('router-'))
David Kranz34e88122014-12-11 15:24:05 -0500166 port_body = self.client.create_port(
Eugene Nikanorove9d255a2013-12-18 16:31:42 +0400167 network_id=network['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000168 # add router interface to port created above
David Kranz34e88122014-12-11 15:24:05 -0500169 interface = self.client.add_router_interface_with_port_id(
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700170 router['id'], port_body['port']['id'])
nayna-patel197c0122013-07-11 10:18:00 +0000171 self.addCleanup(self._remove_router_interface_with_port_id,
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700172 router['id'], port_body['port']['id'])
Attila Fazekas4b8b0082013-10-25 14:24:32 +0200173 self.assertIn('subnet_id', interface.keys())
174 self.assertIn('port_id', interface.keys())
nayna-patel197c0122013-07-11 10:18:00 +0000175 # Verify router id is equal to device id in port details
David Kranz34e88122014-12-11 15:24:05 -0500176 show_port_body = self.client.show_port(
nayna-patel197c0122013-07-11 10:18:00 +0000177 interface['port_id'])
178 self.assertEqual(show_port_body['port']['device_id'],
Salvatore Orlandoa85e8fe2013-09-20 03:48:02 -0700179 router['id'])
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700180
181 def _verify_router_gateway(self, router_id, exp_ext_gw_info=None):
David Kranz34e88122014-12-11 15:24:05 -0500182 show_body = self.admin_client.show_router(router_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700183 actual_ext_gw_info = show_body['router']['external_gateway_info']
184 if exp_ext_gw_info is None:
185 self.assertIsNone(actual_ext_gw_info)
186 return
187 # Verify only keys passed in exp_ext_gw_info
188 for k, v in exp_ext_gw_info.iteritems():
189 self.assertEqual(v, actual_ext_gw_info[k])
190
191 def _verify_gateway_port(self, router_id):
David Kranz34e88122014-12-11 15:24:05 -0500192 list_body = self.admin_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000193 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700194 device_id=router_id)
195 self.assertEqual(len(list_body['ports']), 1)
196 gw_port = list_body['ports'][0]
197 fixed_ips = gw_port['fixed_ips']
Sean M. Collins08803f62014-12-09 16:41:01 -0700198 self.assertGreaterEqual(len(fixed_ips), 1)
David Kranz34e88122014-12-11 15:24:05 -0500199 public_net_body = self.admin_client.show_network(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000200 CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700201 public_subnet_id = public_net_body['network']['subnets'][0]
Sean M. Collins2bc293e2014-12-10 10:37:57 -0700202 self.assertIn(public_subnet_id,
203 map(lambda x: x['subnet_id'], fixed_ips))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700204
armando-migliaccio89e5b962013-12-16 06:12:16 -0800205 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800206 @test.idempotent_id('6cc285d8-46bf-4f36-9b1a-783e3008ba79')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700207 def test_update_router_set_gateway(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700208 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700209 self.client.update_router(
210 router['id'],
211 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000212 'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700213 # Verify operation - router
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700214 self._verify_router_gateway(
215 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000216 {'network_id': CONF.network.public_network_id})
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700217 self._verify_gateway_port(router['id'])
218
Chris Hoge7579c1a2015-02-26 14:12:15 -0800219 @test.idempotent_id('b386c111-3b21-466d-880c-5e72b01e1a33')
ronak79f17932014-01-27 17:56:21 -0800220 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800221 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700222 def test_update_router_set_gateway_with_snat_explicit(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700223 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700224 self.admin_client.update_router_with_snat_gw_info(
225 router['id'],
226 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000227 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700228 'enable_snat': True})
229 self._verify_router_gateway(
230 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000231 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700232 'enable_snat': True})
233 self._verify_gateway_port(router['id'])
234
Chris Hoge7579c1a2015-02-26 14:12:15 -0800235 @test.idempotent_id('96536bc7-8262-4fb2-9967-5c46940fa279')
ronak79f17932014-01-27 17:56:21 -0800236 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800237 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700238 def test_update_router_set_gateway_without_snat(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700239 router = self._create_router(data_utils.rand_name('router-'))
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700240 self.admin_client.update_router_with_snat_gw_info(
241 router['id'],
242 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000243 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700244 'enable_snat': False})
245 self._verify_router_gateway(
246 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000247 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700248 'enable_snat': False})
249 self._verify_gateway_port(router['id'])
250
armando-migliaccio89e5b962013-12-16 06:12:16 -0800251 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800252 @test.idempotent_id('ad81b7ee-4f81-407b-a19c-17e623f763e8')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700253 def test_update_router_unset_gateway(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700254 router = self._create_router(
Masayuki Igawa259c1132013-10-31 17:48:44 +0900255 data_utils.rand_name('router-'),
Matthew Treinish03b48df2014-01-29 16:59:49 +0000256 external_network_id=CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700257 self.client.update_router(router['id'], external_gateway_info={})
258 self._verify_router_gateway(router['id'])
259 # No gateway port expected
David Kranz34e88122014-12-11 15:24:05 -0500260 list_body = self.admin_client.list_ports(
Matthew Treinish03b48df2014-01-29 16:59:49 +0000261 network_id=CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700262 device_id=router['id'])
263 self.assertFalse(list_body['ports'])
264
Chris Hoge7579c1a2015-02-26 14:12:15 -0800265 @test.idempotent_id('f2faf994-97f4-410b-a831-9bc977b64374')
ronak79f17932014-01-27 17:56:21 -0800266 @test.requires_ext(extension='ext-gw-mode', service='network')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800267 @test.attr(type='smoke')
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700268 def test_update_router_reset_gateway_without_snat(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700269 router = self._create_router(
Masayuki Igawa259c1132013-10-31 17:48:44 +0900270 data_utils.rand_name('router-'),
Matthew Treinish03b48df2014-01-29 16:59:49 +0000271 external_network_id=CONF.network.public_network_id)
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700272 self.admin_client.update_router_with_snat_gw_info(
273 router['id'],
274 external_gateway_info={
Matthew Treinish03b48df2014-01-29 16:59:49 +0000275 'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700276 'enable_snat': False})
277 self._verify_router_gateway(
278 router['id'],
Matthew Treinish03b48df2014-01-29 16:59:49 +0000279 {'network_id': CONF.network.public_network_id,
Salvatore Orlandoce22b492013-09-20 04:04:11 -0700280 'enable_snat': False})
281 self._verify_gateway_port(router['id'])
ChenZheng04ac6942013-12-09 16:42:52 +0800282
Chris Hoge7579c1a2015-02-26 14:12:15 -0800283 @test.idempotent_id('c86ac3a8-50bd-4b00-a6b8-62af84a0765c')
armando-migliaccio89e5b962013-12-16 06:12:16 -0800284 @test.requires_ext(extension='extraroute', service='network')
285 @test.attr(type='smoke')
ChenZheng04ac6942013-12-09 16:42:52 +0800286 def test_update_extra_route(self):
287 self.network = self.create_network()
288 self.name = self.network['name']
289 self.subnet = self.create_subnet(self.network)
290 # Add router interface with subnet id
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700291 self.router = self._create_router(
292 data_utils.rand_name('router-'), True)
ChenZheng04ac6942013-12-09 16:42:52 +0800293 self.create_router_interface(self.router['id'], self.subnet['id'])
294 self.addCleanup(
295 self._delete_extra_routes,
296 self.router['id'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100297 # Update router extra route, second ip of the range is
298 # used as next hop
ChenZheng04ac6942013-12-09 16:42:52 +0800299 cidr = netaddr.IPNetwork(self.subnet['cidr'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100300 next_hop = str(cidr[2])
301 destination = str(self.subnet['cidr'])
David Kranz34e88122014-12-11 15:24:05 -0500302 extra_route = self.client.update_extra_routes(self.router['id'],
303 next_hop, destination)
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100304 self.assertEqual(1, len(extra_route['router']['routes']))
305 self.assertEqual(destination,
306 extra_route['router']['routes'][0]['destination'])
307 self.assertEqual(next_hop,
308 extra_route['router']['routes'][0]['nexthop'])
David Kranz34e88122014-12-11 15:24:05 -0500309 show_body = self.client.show_router(self.router['id'])
Sylvain Afchain85c1e542014-01-11 08:23:16 +0100310 self.assertEqual(destination,
311 show_body['router']['routes'][0]['destination'])
312 self.assertEqual(next_hop,
313 show_body['router']['routes'][0]['nexthop'])
ChenZheng04ac6942013-12-09 16:42:52 +0800314
315 def _delete_extra_routes(self, router_id):
David Kranz34e88122014-12-11 15:24:05 -0500316 self.client.delete_extra_routes(router_id)
liudongfbdfc7e2014-02-15 10:52:17 +0800317
318 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800319 @test.idempotent_id('a8902683-c788-4246-95c7-ad9c6d63a4d9')
liudongfbdfc7e2014-02-15 10:52:17 +0800320 def test_update_router_admin_state(self):
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700321 self.router = self._create_router(data_utils.rand_name('router-'))
liudongfbdfc7e2014-02-15 10:52:17 +0800322 self.assertFalse(self.router['admin_state_up'])
323 # Update router admin state
David Kranz34e88122014-12-11 15:24:05 -0500324 update_body = self.client.update_router(self.router['id'],
325 admin_state_up=True)
liudongfbdfc7e2014-02-15 10:52:17 +0800326 self.assertTrue(update_body['router']['admin_state_up'])
David Kranz34e88122014-12-11 15:24:05 -0500327 show_body = self.client.show_router(self.router['id'])
liudongfbdfc7e2014-02-15 10:52:17 +0800328 self.assertTrue(show_body['router']['admin_state_up'])
329
330 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800331 @test.idempotent_id('802c73c9-c937-4cef-824b-2191e24a6aab')
liudongfbdfc7e2014-02-15 10:52:17 +0800332 def test_add_multiple_router_interfaces(self):
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700333 network01 = self.create_network(
334 network_name=data_utils.rand_name('router-network01-'))
335 network02 = self.create_network(
336 network_name=data_utils.rand_name('router-network02-'))
337 subnet01 = self.create_subnet(network01)
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300338 sub02_cidr = netaddr.IPNetwork(self.tenant_cidr).next()
armando-migliaccioee90a4d2014-05-06 11:54:07 -0700339 subnet02 = self.create_subnet(network02, cidr=sub02_cidr)
Adam Gandelman3e9d12b2014-04-02 17:04:19 -0700340 router = self._create_router(data_utils.rand_name('router-'))
liudongfbdfc7e2014-02-15 10:52:17 +0800341 interface01 = self._add_router_interface_with_subnet_id(router['id'],
342 subnet01['id'])
343 self._verify_router_interface(router['id'], subnet01['id'],
344 interface01['port_id'])
345 interface02 = self._add_router_interface_with_subnet_id(router['id'],
346 subnet02['id'])
347 self._verify_router_interface(router['id'], subnet02['id'],
348 interface02['port_id'])
349
liudongfbdfc7e2014-02-15 10:52:17 +0800350 def _verify_router_interface(self, router_id, subnet_id, port_id):
David Kranz34e88122014-12-11 15:24:05 -0500351 show_port_body = self.client.show_port(port_id)
liudongfbdfc7e2014-02-15 10:52:17 +0800352 interface_port = show_port_body['port']
353 self.assertEqual(router_id, interface_port['device_id'])
354 self.assertEqual(subnet_id,
355 interface_port['fixed_ips'][0]['subnet_id'])
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300356
357
358class RoutersIpV6Test(RoutersTest):
359 _ip_version = 6