root / snf-cyclades-app / synnefo / api / tests / routers.py @ 69dadbe4
History | View | Annotate | Download (11.6 kB)
1 |
# Copyright 2012-2013 GRNET S.A. All rights reserved.
|
---|---|
2 |
#
|
3 |
# Redistribution and use in source and binary forms, with or
|
4 |
# without modification, are permitted provided that the following
|
5 |
# conditions are met:
|
6 |
#
|
7 |
# 1. Redistributions of source code must retain the above
|
8 |
# copyright notice, this list of conditions and the following
|
9 |
# disclaimer.
|
10 |
#
|
11 |
# 2. Redistributions in binary form must reproduce the above
|
12 |
# copyright notice, this list of conditions and the following
|
13 |
# disclaimer in the documentation and/or other materials
|
14 |
# provided with the distribution.
|
15 |
#
|
16 |
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 |
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 |
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 |
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 |
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 |
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 |
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 |
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 |
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 |
# POSSIBILITY OF SUCH DAMAGE.
|
28 |
#
|
29 |
# The views and conclusions contained in the software and
|
30 |
# documentation are those of the authors and should not be
|
31 |
# interpreted as representing official policies, either expressed
|
32 |
# or implied, of GRNET S.A.
|
33 |
|
34 |
from snf_django.utils.testing import BaseAPITest |
35 |
from django.utils import simplejson as json |
36 |
from synnefo.cyclades_settings import cyclades_services |
37 |
from synnefo.lib.services import get_service_path |
38 |
from synnefo.lib import join_urls |
39 |
import synnefo.db.models_factory as dbmf |
40 |
|
41 |
|
42 |
COMPUTE_URL = get_service_path(cyclades_services, 'compute',
|
43 |
version='v2.0')
|
44 |
ROUTERS_URL = join_urls(COMPUTE_URL, "routers/")
|
45 |
|
46 |
|
47 |
class RouterTest(BaseAPITest): |
48 |
|
49 |
def test_list_empty_routers(self): |
50 |
response = self.get(ROUTERS_URL)
|
51 |
self.assertSuccess(response)
|
52 |
routers = json.loads(response.content) |
53 |
self.assertEqual(routers, {"routers": []}) |
54 |
|
55 |
def test_list_detail(self): |
56 |
response = self.get(join_urls(ROUTERS_URL, 'detail')) |
57 |
self.assertEqual(response.status_code, 200) |
58 |
|
59 |
def test_create_router_no_net(self): |
60 |
request = { |
61 |
"router": {
|
62 |
"name": "test-router", |
63 |
"external_gateway_info": {
|
64 |
"network_id": "123"} |
65 |
} |
66 |
} |
67 |
response = self.post(ROUTERS_URL, params=json.dumps(request),
|
68 |
user='user')
|
69 |
self.assertEqual(response.status_code, 404) |
70 |
|
71 |
def test_create_router_no_external(self): |
72 |
net = dbmf.NetworkFactory.create(userid='user', external_router=False) |
73 |
request = { |
74 |
"router": {
|
75 |
"name": "test-router", |
76 |
"external_gateway_info": {
|
77 |
"network_id": str(net.id) |
78 |
} |
79 |
} |
80 |
} |
81 |
response = self.post(ROUTERS_URL, params=json.dumps(request),
|
82 |
user='user')
|
83 |
self.assertEqual(response.status_code, 400) |
84 |
|
85 |
def test_create_router(self): |
86 |
try:
|
87 |
flavor = dbmf.FlavorFactory.create(id=1)
|
88 |
except:
|
89 |
pass
|
90 |
net = dbmf.NetworkFactory.create(userid='user', external_router=True) |
91 |
fip = dbmf.FloatingIPFactory.create(userid='user',
|
92 |
network=net, nic=None)
|
93 |
request = { |
94 |
"router": {
|
95 |
"name": "test-router", |
96 |
"external_gateway_info": {
|
97 |
"network_id": str(fip.network.id), |
98 |
"floating_ip": fip.address}
|
99 |
} |
100 |
} |
101 |
response = self.post(ROUTERS_URL, params=json.dumps(request),
|
102 |
user='user')
|
103 |
self.assertEqual(response.status_code, 201) |
104 |
|
105 |
def test_create_router_no_ip(self): |
106 |
try:
|
107 |
flavor = dbmf.FlavorFactory.create(id=1)
|
108 |
except:
|
109 |
pass
|
110 |
net = dbmf.NetworkFactory.create(userid='user', external_router=True) |
111 |
fip = dbmf.FloatingIPFactory.create(userid='user',
|
112 |
network=net, nic=None)
|
113 |
request = { |
114 |
"router": {
|
115 |
"name": "test-router", |
116 |
"external_gateway_info": {
|
117 |
"network_id": str(net.id)} |
118 |
} |
119 |
} |
120 |
response = self.post(ROUTERS_URL, params=json.dumps(request),
|
121 |
user='user')
|
122 |
self.assertEqual(response.status_code, 201) |
123 |
|
124 |
def test_get_router(self): |
125 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
126 |
nic = dbmf.NetworkInterfaceFactory.create(machine=router) |
127 |
fip = dbmf.FloatingIPFactory.create(userid=router.userid, nic=nic, |
128 |
network=nic.network) |
129 |
response = self.get(ROUTERS_URL, user=router.userid)
|
130 |
self.assertSuccess(response)
|
131 |
|
132 |
def test_delete_router(self): |
133 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
134 |
url = join_urls(ROUTERS_URL, str(router.id))
|
135 |
response = self.delete(url, user=router.userid)
|
136 |
self.assertEqual(response.status_code, 204) |
137 |
|
138 |
def test_delete_router_with_private_net(self): |
139 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
140 |
net = dbmf.NetworkFactory.create(external_router=False)
|
141 |
nic = dbmf.NetworkInterfaceFactory.create(network=net, machine=router) |
142 |
url = join_urls(ROUTERS_URL, str(router.id))
|
143 |
response = self.delete(url, user=router.userid)
|
144 |
self.assertEqual(response.status_code, 409) |
145 |
|
146 |
def test_update_router_network(self): |
147 |
router = dbmf.VirtualMachineFactory.create(router=True, userid='user') |
148 |
net = dbmf.NetworkFactory.create(userid='user', external_router=True) |
149 |
fip = dbmf.FloatingIPFactory.create(userid='user',
|
150 |
network=net, nic=None)
|
151 |
request = { |
152 |
"router": {
|
153 |
"name": "new_name", |
154 |
"external_gateway_info": {"network_id": str(net.id)} |
155 |
} |
156 |
} |
157 |
url = join_urls(ROUTERS_URL, str(router.id))
|
158 |
response = self.put(url, params=json.dumps(request),
|
159 |
user=router.userid) |
160 |
info = json.loads(response.content) |
161 |
self.assertEqual(info['router']['external_gateway_info']['network_id'], |
162 |
str(net.id))
|
163 |
self.assertEqual(info['router']['name'], "new_name") |
164 |
|
165 |
def test_update_router_both(self): |
166 |
router = dbmf.VirtualMachineFactory.create(router=True, userid='user') |
167 |
net = dbmf.NetworkFactory.create(userid='user', external_router=True) |
168 |
fip = dbmf.FloatingIPFactory.create(userid='user',
|
169 |
network=net, nic=None)
|
170 |
request = { |
171 |
"router": {
|
172 |
"name": "new_name", |
173 |
"external_gateway_info": {"network_id": str(net.id), |
174 |
"floating_ip": fip.address}
|
175 |
} |
176 |
} |
177 |
url = join_urls(ROUTERS_URL, str(router.id))
|
178 |
response = self.put(url, params=json.dumps(request),
|
179 |
user=router.userid) |
180 |
info = json.loads(response.content) |
181 |
self.assertEqual(info['router']['external_gateway_info']['network_id'], |
182 |
str(net.id))
|
183 |
self.assertEqual(info['router']['name'], "new_name") |
184 |
|
185 |
def test_update_router_conflict(self): |
186 |
router = dbmf.VirtualMachineFactory.create(router=True, userid='user') |
187 |
net = dbmf.NetworkFactory.create(userid='user', external_router=True) |
188 |
fip = dbmf.FloatingIPFactory.create(userid='user', nic=None) |
189 |
request = { |
190 |
"router": {
|
191 |
"name": "new_name", |
192 |
"external_gateway_info": {"network_id": str(net.id), |
193 |
"floating_ip": fip.address}
|
194 |
} |
195 |
} |
196 |
url = join_urls(ROUTERS_URL, str(router.id))
|
197 |
response = self.put(url, params=json.dumps(request),
|
198 |
user=router.userid) |
199 |
self.assertEqual(response.status_code, 409) |
200 |
|
201 |
def test_remove_interface_no_body(self): |
202 |
url = join_urls(join_urls(ROUTERS_URL, "123"),
|
203 |
"remove_router_interface")
|
204 |
|
205 |
response = self.put(url, params="") |
206 |
self.assertEqual(response.status_code, 400) |
207 |
|
208 |
def test_remove_interface_unfound_subnet(self): |
209 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
210 |
request = {"subnet_id": "123"} |
211 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
212 |
"remove_router_interface")
|
213 |
response = self.put(url, params=json.dumps(request),
|
214 |
user=router.userid) |
215 |
self.assertEqual(response.status_code, 404) |
216 |
|
217 |
def test_remove_interface_no_info(self): |
218 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
219 |
request = {"wrong": "123"} |
220 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
221 |
"remove_router_interface")
|
222 |
response = self.put(url, params=json.dumps(request),
|
223 |
user=router.userid) |
224 |
self.assertEqual(response.status_code, 400) |
225 |
|
226 |
def test_remove_interface_subnet(self): |
227 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
228 |
net1 = dbmf.NetworkFactory.create(external_router=True,
|
229 |
userid=router.userid) |
230 |
subnet = dbmf.SubnetFactory.create(network=net1) |
231 |
nic = dbmf.NetworkInterfaceFactory.create(network=net1, machine=router) |
232 |
request = {"subnet_id": subnet.id}
|
233 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
234 |
"remove_router_interface")
|
235 |
response = self.put(url, params=json.dumps(request),
|
236 |
user=router.userid) |
237 |
self.assertEqual(response.status_code, 200) |
238 |
|
239 |
def test_add_interface_no_info(self): |
240 |
url = join_urls(join_urls(ROUTERS_URL, "123"), "add_router_interface") |
241 |
response = self.put(url, params="") |
242 |
self.assertEqual(response.status_code, 400) |
243 |
|
244 |
def test_add_interface_wrong_info(self): |
245 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
246 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
247 |
"add_router_interface")
|
248 |
request = {} |
249 |
response = self.put(url, params=json.dumps(request),
|
250 |
user=router.userid) |
251 |
self.assertEqual(response.status_code, 400) |
252 |
|
253 |
def test_add_interface_unfound_subnet(self): |
254 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
255 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
256 |
"add_router_interface")
|
257 |
request = {"subnet_id": "123"} |
258 |
response = self.put(url, params=json.dumps(request),
|
259 |
user=router.userid) |
260 |
self.assertEqual(response.status_code, 404) |
261 |
|
262 |
def test_add_interface_subnet(self): |
263 |
router = dbmf.VirtualMachineFactory.create(router=True)
|
264 |
net1 = dbmf.NetworkFactory.create(external_router=True,
|
265 |
userid=router.userid) |
266 |
subnet = dbmf.SubnetFactory.create(network=net1, ipversion=4)
|
267 |
url = join_urls(join_urls(ROUTERS_URL, str(router.id)),
|
268 |
"add_router_interface")
|
269 |
request = {"subnet_id": subnet.id}
|
270 |
response = self.put(url, params=json.dumps(request),
|
271 |
user=router.userid) |
272 |
self.assertEqual(response.status_code, 200) |