blob: feee51bfd4a20e1d3c9aa0f5cfca4265752312f8 [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
armando-migliaccioee90a4d2014-05-06 11:54:07 -070016import netaddr
17
rossellae02431e2013-11-15 17:58:29 +010018from tempest.api.network import base_routers as base
19from tempest.common.utils import data_utils
armando-migliaccioee90a4d2014-05-06 11:54:07 -070020from tempest import config
rossellae02431e2013-11-15 17:58:29 +010021from tempest import exceptions
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090022from tempest import test
rossellae02431e2013-11-15 17:58:29 +010023
armando-migliaccioee90a4d2014-05-06 11:54:07 -070024CONF = config.CONF
25
rossellae02431e2013-11-15 17:58:29 +010026
27class RoutersNegativeTest(base.BaseRouterTest):
28 _interface = 'json'
29
30 @classmethod
Masayuki Igawa6d495d62014-03-19 16:38:57 +090031 @test.safe_setup
rossellae02431e2013-11-15 17:58:29 +010032 def setUpClass(cls):
33 super(RoutersNegativeTest, cls).setUpClass()
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090034 if not test.is_extension_enabled('router', 'network'):
35 msg = "router extension not enabled."
36 raise cls.skipException(msg)
rossellae02431e2013-11-15 17:58:29 +010037 cls.router = cls.create_router(data_utils.rand_name('router-'))
38 cls.network = cls.create_network()
39 cls.subnet = cls.create_subnet(cls.network)
40
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090041 @test.attr(type=['negative', 'smoke'])
rossellae02431e2013-11-15 17:58:29 +010042 def test_router_add_gateway_invalid_network_returns_404(self):
43 self.assertRaises(exceptions.NotFound,
44 self.client.update_router,
45 self.router['id'],
46 external_gateway_info={
47 'network_id': self.router['id']})
48
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090049 @test.attr(type=['negative', 'smoke'])
rossellae02431e2013-11-15 17:58:29 +010050 def test_router_add_gateway_net_not_external_returns_400(self):
armando-migliaccioee90a4d2014-05-06 11:54:07 -070051 alt_network = self.create_network(
52 network_name=data_utils.rand_name('router-negative-'))
53 sub_cidr = netaddr.IPNetwork(CONF.network.tenant_network_cidr).next()
54 self.create_subnet(alt_network, cidr=sub_cidr)
rossellae02431e2013-11-15 17:58:29 +010055 self.assertRaises(exceptions.BadRequest,
56 self.client.update_router,
57 self.router['id'],
58 external_gateway_info={
armando-migliaccioee90a4d2014-05-06 11:54:07 -070059 'network_id': alt_network['id']})
60
61 @test.attr(type=['negative', 'smoke'])
62 def test_add_router_interfaces_on_overlapping_subnets_returns_400(self):
63 network01 = self.create_network(
64 network_name=data_utils.rand_name('router-network01-'))
65 network02 = self.create_network(
66 network_name=data_utils.rand_name('router-network02-'))
67 subnet01 = self.create_subnet(network01)
68 subnet02 = self.create_subnet(network02)
69 self._add_router_interface_with_subnet_id(self.router['id'],
70 subnet01['id'])
71 self.assertRaises(exceptions.BadRequest,
72 self._add_router_interface_with_subnet_id,
73 self.router['id'],
74 subnet02['id'])
rossellae02431e2013-11-15 17:58:29 +010075
Yoshihiro Kaneko05670262014-01-18 19:22:44 +090076 @test.attr(type=['negative', 'smoke'])
rossellae02431e2013-11-15 17:58:29 +010077 def test_router_remove_interface_in_use_returns_409(self):
78 self.client.add_router_interface_with_subnet_id(
79 self.router['id'], self.subnet['id'])
80 self.assertRaises(exceptions.Conflict,
81 self.client.delete_router,
82 self.router['id'])