blob: 299e0e9baad0f24dce2bb54da7fcfdc25b7be0a2 [file] [log] [blame]
rossellae02431e2013-11-15 17:58:29 +01001# 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
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070016from tempest.api.network import base
Andrea Frittolicd368412017-08-14 21:37:56 +010017from tempest.common import utils
Martin Kopec213d0a42023-11-30 10:28:14 +010018from tempest import config
Ken'ichi Ohmichif50e4df2017-03-10 10:52:53 -080019from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080020from tempest.lib import decorators
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050021from tempest.lib import exceptions as lib_exc
rossellae02431e2013-11-15 17:58:29 +010022
Martin Kopec213d0a42023-11-30 10:28:14 +010023CONF = config.CONF
24
rossellae02431e2013-11-15 17:58:29 +010025
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070026class RoutersNegativeTest(base.BaseNetworkTest):
zhufl05fc4f72020-04-26 09:13:54 +080027 """Negative tests of routers"""
rossellae02431e2013-11-15 17:58:29 +010028
29 @classmethod
Rohan Kanadea565e452015-01-27 14:00:13 +053030 def skip_checks(cls):
31 super(RoutersNegativeTest, cls).skip_checks()
Andrea Frittolicd368412017-08-14 21:37:56 +010032 if not utils.is_extension_enabled('router', 'network'):
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090033 msg = "router extension not enabled."
34 raise cls.skipException(msg)
Rohan Kanadea565e452015-01-27 14:00:13 +053035
36 @classmethod
37 def resource_setup(cls):
38 super(RoutersNegativeTest, cls).resource_setup()
zhufld2c40ca2016-10-18 17:03:07 +080039 cls.router = cls.create_router()
rossellae02431e2013-11-15 17:58:29 +010040 cls.network = cls.create_network()
41 cls.subnet = cls.create_subnet(cls.network)
42
Jordan Pittier3b46d272017-04-12 16:17:28 +020043 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080044 @decorators.idempotent_id('37a94fc0-a834-45b9-bd23-9a81d2fd1e22')
rossellae02431e2013-11-15 17:58:29 +010045 def test_router_add_gateway_invalid_network_returns_404(self):
zhufl05fc4f72020-04-26 09:13:54 +080046 """Test adding gateway with invalid network for router"""
Masayuki Igawabfa07602015-01-20 18:47:17 +090047 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000048 self.routers_client.update_router,
rossellae02431e2013-11-15 17:58:29 +010049 self.router['id'],
50 external_gateway_info={
51 'network_id': self.router['id']})
52
Jordan Pittier3b46d272017-04-12 16:17:28 +020053 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080054 @decorators.idempotent_id('11836a18-0b15-4327-a50b-f0d9dc66bddd')
rossellae02431e2013-11-15 17:58:29 +010055 def test_router_add_gateway_net_not_external_returns_400(self):
zhufl05fc4f72020-04-26 09:13:54 +080056 """Test adding gateway with not external network for router"""
zhufld2c40ca2016-10-18 17:03:07 +080057 alt_network = self.create_network()
zhuflb0dbe4b2017-09-11 16:45:17 +080058 sub_cidr = self.cidr.next()
armando-migliaccioee90a4d2014-05-06 11:54:07 -070059 self.create_subnet(alt_network, cidr=sub_cidr)
Masayuki Igawa4b29e472015-02-16 10:41:54 +090060 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000061 self.routers_client.update_router,
rossellae02431e2013-11-15 17:58:29 +010062 self.router['id'],
63 external_gateway_info={
armando-migliaccioee90a4d2014-05-06 11:54:07 -070064 'network_id': alt_network['id']})
65
Jordan Pittier3b46d272017-04-12 16:17:28 +020066 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080067 @decorators.idempotent_id('957751a3-3c68-4fa2-93b6-eb52ea10db6e')
armando-migliaccioee90a4d2014-05-06 11:54:07 -070068 def test_add_router_interfaces_on_overlapping_subnets_returns_400(self):
zhufl05fc4f72020-04-26 09:13:54 +080069 """Test adding router interface which is on overlapping subnets"""
armando-migliaccioee90a4d2014-05-06 11:54:07 -070070 network01 = self.create_network(
Martin Kopec213d0a42023-11-30 10:28:14 +010071 network_name=data_utils.rand_name(
72 name='router-network01-', prefix=CONF.resource_name_prefix))
armando-migliaccioee90a4d2014-05-06 11:54:07 -070073 network02 = self.create_network(
Martin Kopec213d0a42023-11-30 10:28:14 +010074 network_name=data_utils.rand_name(
75 name='router-network02-', prefix=CONF.resource_name_prefix))
armando-migliaccioee90a4d2014-05-06 11:54:07 -070076 subnet01 = self.create_subnet(network01)
77 subnet02 = self.create_subnet(network02)
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070078 interface = self.routers_client.add_router_interface(
79 self.router['id'], subnet_id=subnet01['id'])
Rodolfo Alonso Hernandezf2aa1582024-11-27 09:56:05 +000080 self.addCleanup(self.remove_router_interface,
81 self.router['id'], interface['port_id'],
82 subnet_id=subnet01['id'])
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070083 self.assertEqual(subnet01['id'], interface['subnet_id'])
Masayuki Igawa4b29e472015-02-16 10:41:54 +090084 self.assertRaises(lib_exc.BadRequest,
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070085 self.routers_client.add_router_interface,
armando-migliaccioee90a4d2014-05-06 11:54:07 -070086 self.router['id'],
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -070087 subnet_id=subnet02['id'])
lianghaof37da962017-03-10 20:16:21 +080088
Jordan Pittier3b46d272017-04-12 16:17:28 +020089 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -080090 @decorators.idempotent_id('04df80f9-224d-47f5-837a-bf23e33d1c20')
rossellae02431e2013-11-15 17:58:29 +010091 def test_router_remove_interface_in_use_returns_409(self):
zhufl05fc4f72020-04-26 09:13:54 +080092 """Test removing in-use interface from router"""
Rodolfo Alonso Hernandezf2aa1582024-11-27 09:56:05 +000093 interface = self.routers_client.add_router_interface(
94 self.router['id'], subnet_id=self.subnet['id'])
95 self.addCleanup(self.remove_router_interface,
96 self.router['id'], interface['port_id'],
97 subnet_id=self.subnet['id'])
Masayuki Igawad9388762015-01-20 14:56:42 +090098 self.assertRaises(lib_exc.Conflict,
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000099 self.routers_client.delete_router,
rossellae02431e2013-11-15 17:58:29 +0100100 self.router['id'])
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300101
Jordan Pittier3b46d272017-04-12 16:17:28 +0200102 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800103 @decorators.idempotent_id('c2a70d72-8826-43a7-8208-0209e6360c47')
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700104 def test_show_non_existent_router_returns_404(self):
zhufl05fc4f72020-04-26 09:13:54 +0800105 """Test showing non existent router"""
Martin Kopec213d0a42023-11-30 10:28:14 +0100106 router = data_utils.rand_name(
107 name='non_exist_router', prefix=CONF.resource_name_prefix)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000108 self.assertRaises(lib_exc.NotFound, self.routers_client.show_router,
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700109 router)
110
Jordan Pittier3b46d272017-04-12 16:17:28 +0200111 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800112 @decorators.idempotent_id('b23d1569-8b0c-4169-8d4b-6abd34fad5c7')
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700113 def test_update_non_existent_router_returns_404(self):
zhufl05fc4f72020-04-26 09:13:54 +0800114 """Test updating non existent router"""
Martin Kopec213d0a42023-11-30 10:28:14 +0100115 router = data_utils.rand_name(
116 name='non_exist_router', prefix=CONF.resource_name_prefix)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000117 self.assertRaises(lib_exc.NotFound, self.routers_client.update_router,
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700118 router, name="new_name")
119
Jordan Pittier3b46d272017-04-12 16:17:28 +0200120 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800121 @decorators.idempotent_id('c7edc5ad-d09d-41e6-a344-5c0c31e2e3e4')
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700122 def test_delete_non_existent_router_returns_404(self):
zhufl05fc4f72020-04-26 09:13:54 +0800123 """Test deleting non existent router"""
Martin Kopec213d0a42023-11-30 10:28:14 +0100124 router = data_utils.rand_name(
125 name='non_exist_router', prefix=CONF.resource_name_prefix)
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000126 self.assertRaises(lib_exc.NotFound, self.routers_client.delete_router,
Rajkumar Thiyagarajan18fd41c2014-07-28 03:05:11 -0700127 router)
128
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300129
130class RoutersNegativeIpV6Test(RoutersNegativeTest):
131 _ip_version = 6
armando-migliaccio88f7b702014-06-05 12:59:09 -0700132
133
Ken'ichi Ohmichi66278272017-05-04 16:04:29 -0700134class DvrRoutersNegativeTest(base.BaseNetworkTest):
zhufl05fc4f72020-04-26 09:13:54 +0800135 """Negative tests of DVR router"""
armando-migliaccio88f7b702014-06-05 12:59:09 -0700136
137 @classmethod
138 def skip_checks(cls):
139 super(DvrRoutersNegativeTest, cls).skip_checks()
Andrea Frittolicd368412017-08-14 21:37:56 +0100140 if not utils.is_extension_enabled('dvr', 'network'):
armando-migliaccio88f7b702014-06-05 12:59:09 -0700141 msg = "DVR extension not enabled."
142 raise cls.skipException(msg)
143
Jordan Pittier3b46d272017-04-12 16:17:28 +0200144 @decorators.attr(type=['negative'])
Ken'ichi Ohmichi53b9a632017-01-27 18:04:39 -0800145 @decorators.idempotent_id('4990b055-8fc7-48ab-bba7-aa28beaad0b9')
armando-migliaccio88f7b702014-06-05 12:59:09 -0700146 def test_router_create_tenant_distributed_returns_forbidden(self):
zhufl05fc4f72020-04-26 09:13:54 +0800147 """Non admin user is not allowed to create distributed router"""
zhufl39ac5682016-10-24 17:11:34 +0800148 self.assertRaises(lib_exc.Forbidden, self.create_router,
armando-migliaccio88f7b702014-06-05 12:59:09 -0700149 distributed=True)