root / snf-cyclades-app / synnefo / neutron / tests / api.py @ 0dae1b9f
History | View | Annotate | Download (8.8 kB)
1 | d6b24130 | Marios Kogias | from snf_django.utils.testing import BaseAPITest |
---|---|---|---|
2 | d6b24130 | Marios Kogias | from django.utils import simplejson as json |
3 | d6b24130 | Marios Kogias | from synnefo.cyclades_settings import cyclades_services |
4 | d6b24130 | Marios Kogias | from synnefo.lib.services import get_service_path |
5 | d6b24130 | Marios Kogias | from synnefo.lib import join_urls |
6 | d6e16760 | Marios Kogias | import json |
7 | b0cda6f9 | Marios Kogias | import synnefo.neutron.models_factory as mf |
8 | d6e16760 | Marios Kogias | import synnefo.db.models_factory as dbmf |
9 | d6b24130 | Marios Kogias | |
10 | d6b24130 | Marios Kogias | NEUTRON_URL = get_service_path(cyclades_services, "neutron", "v2.0") |
11 | d6b24130 | Marios Kogias | NETWORKS_URL = join_urls(NEUTRON_URL, "networks/")
|
12 | 7eae8fce | Dionysis Grigoropoulos | SUBNETS_URL = join_urls(NEUTRON_URL, "subnets/")
|
13 | d6b24130 | Marios Kogias | |
14 | d6b24130 | Marios Kogias | |
15 | d6b24130 | Marios Kogias | class NetworkTest(BaseAPITest): |
16 | b0cda6f9 | Marios Kogias | |
17 | d6b24130 | Marios Kogias | def test_list_networks(self): |
18 | d6b24130 | Marios Kogias | response = self.get(NETWORKS_URL)
|
19 | d6b24130 | Marios Kogias | self.assertSuccess(response)
|
20 | d6b24130 | Marios Kogias | networks = json.loads(response.content) |
21 | d6b24130 | Marios Kogias | self.assertEqual(networks, {'networks': []}) |
22 | d6b24130 | Marios Kogias | |
23 | d6b24130 | Marios Kogias | def test_create_network(self): |
24 | d6e16760 | Marios Kogias | request = { |
25 | d6e16760 | Marios Kogias | "network": {
|
26 | d6e16760 | Marios Kogias | "name": "sample_network" |
27 | b0cda6f9 | Marios Kogias | } |
28 | d6e16760 | Marios Kogias | } |
29 | b0cda6f9 | Marios Kogias | response = self.post(NETWORKS_URL, params=json.dumps(request))
|
30 | d6b24130 | Marios Kogias | code = response.status_code |
31 | b0cda6f9 | Marios Kogias | self.assertEqual(code, 201) |
32 | b0cda6f9 | Marios Kogias | |
33 | d6e16760 | Marios Kogias | def test_create_network_no_name(self): |
34 | d6e16760 | Marios Kogias | response = self.post(NETWORKS_URL, params="") |
35 | d6e16760 | Marios Kogias | print response.content
|
36 | d6e16760 | Marios Kogias | code = response.status_code |
37 | d6e16760 | Marios Kogias | self.assertEqual(code, 201) |
38 | d6b24130 | Marios Kogias | |
39 | d6b24130 | Marios Kogias | def test_get_unfound_network(self): |
40 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, "123")
|
41 | d6b24130 | Marios Kogias | response = self.get(url)
|
42 | d6b24130 | Marios Kogias | self.assertItemNotFound(response)
|
43 | d6b24130 | Marios Kogias | |
44 | b0cda6f9 | Marios Kogias | def test_get_network(self): |
45 | b0cda6f9 | Marios Kogias | test_net = mf.NetworkFactory.create() |
46 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
47 | b0cda6f9 | Marios Kogias | response = self.get(url, user=test_net.userid)
|
48 | d6e16760 | Marios Kogias | # validate response
|
49 | d6e16760 | Marios Kogias | res = json.loads(response.content) |
50 | d6e16760 | Marios Kogias | net = res['network']
|
51 | d6e16760 | Marios Kogias | keys = net.keys() |
52 | d6e16760 | Marios Kogias | must_send = set(["status", "subnets", "name", "admin_state_up", |
53 | d6e16760 | Marios Kogias | "tenant_id", "id"]) |
54 | d6e16760 | Marios Kogias | self.assertEqual(set(keys).issuperset(must_send), True) |
55 | b0cda6f9 | Marios Kogias | self.assertEqual(response.status_code, 200) |
56 | b0cda6f9 | Marios Kogias | |
57 | d6e16760 | Marios Kogias | def test_get_deleted_network(self): |
58 | d6e16760 | Marios Kogias | test_net = mf.NetworkFactory.create() |
59 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
60 | d6e16760 | Marios Kogias | self.delete(url, user=test_net.userid)
|
61 | d6e16760 | Marios Kogias | response = self.get(url, user=test_net.userid)
|
62 | d6e16760 | Marios Kogias | self.assertEqual(response.status_code, 400) |
63 | d6e16760 | Marios Kogias | |
64 | d6b24130 | Marios Kogias | def test_delete_unfound_network(self): |
65 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, "123")
|
66 | b0cda6f9 | Marios Kogias | response = self.delete(url)
|
67 | b0cda6f9 | Marios Kogias | self.assertItemNotFound(response)
|
68 | b0cda6f9 | Marios Kogias | |
69 | b0cda6f9 | Marios Kogias | def test_delete_network(self): |
70 | b0cda6f9 | Marios Kogias | test_net = mf.NetworkFactory.create() |
71 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
72 | b0cda6f9 | Marios Kogias | response = self.delete(url, user=test_net.userid)
|
73 | b0cda6f9 | Marios Kogias | self.assertEqual(response.status_code, 204) |
74 | b0cda6f9 | Marios Kogias | |
75 | d6e16760 | Marios Kogias | def test_delete_network_in_use(self): |
76 | d6e16760 | Marios Kogias | test_net = mf.NetworkFactory.create() |
77 | d6e16760 | Marios Kogias | test_iface = mf.NetworkInterfaceFactory.create(network=test_net) |
78 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
79 | d6e16760 | Marios Kogias | response = self.delete(url, user=test_net.userid)
|
80 | d6e16760 | Marios Kogias | self.assertEqual(response.status_code, 409) |
81 | d6e16760 | Marios Kogias | |
82 | b0cda6f9 | Marios Kogias | def test_put_unfound_network(self): |
83 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, "123")
|
84 | d6b24130 | Marios Kogias | response = self.delete(url)
|
85 | d6b24130 | Marios Kogias | self.assertItemNotFound(response)
|
86 | d6b24130 | Marios Kogias | |
87 | b0cda6f9 | Marios Kogias | def test_put_network(self): |
88 | b0cda6f9 | Marios Kogias | test_net = mf.NetworkFactory.create() |
89 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
90 | d6e16760 | Marios Kogias | request = { |
91 | d6e16760 | Marios Kogias | "network": {
|
92 | d6e16760 | Marios Kogias | "name": "new_name"} |
93 | b0cda6f9 | Marios Kogias | } |
94 | d6e16760 | Marios Kogias | response = self.put(url, params=json.dumps(request),
|
95 | d6e16760 | Marios Kogias | user=test_net.userid) |
96 | b0cda6f9 | Marios Kogias | self.assertEqual(response.status_code, 200) |
97 | 7eae8fce | Dionysis Grigoropoulos | |
98 | d6e16760 | Marios Kogias | def test_put_network_wrong_data(self): |
99 | b0cda6f9 | Marios Kogias | test_net = mf.NetworkFactory.create() |
100 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
101 | d6e16760 | Marios Kogias | request = { |
102 | d6e16760 | Marios Kogias | "network": {
|
103 | d6e16760 | Marios Kogias | "wronng_field": "new_name"} |
104 | b0cda6f9 | Marios Kogias | } |
105 | d6e16760 | Marios Kogias | response = self.put(url, params=json.dumps(request),
|
106 | d6e16760 | Marios Kogias | user=test_net.userid) |
107 | b0cda6f9 | Marios Kogias | self.assertEqual(response.status_code, 400) |
108 | 7eae8fce | Dionysis Grigoropoulos | |
109 | d6e16760 | Marios Kogias | def test_put_no_data(self): |
110 | d6e16760 | Marios Kogias | test_net = mf.NetworkFactory.create() |
111 | d6e16760 | Marios Kogias | url = join_urls(NETWORKS_URL, str(test_net.id))
|
112 | d6e16760 | Marios Kogias | print url
|
113 | d6e16760 | Marios Kogias | response = self.put(url, params="", user=test_net.userid) |
114 | d6e16760 | Marios Kogias | self.assertEqual(response.status_code, 400) |
115 | d6e16760 | Marios Kogias | |
116 | d6e16760 | Marios Kogias | |
117 | 7eae8fce | Dionysis Grigoropoulos | class SubnetTest(BaseAPITest): |
118 | 7eae8fce | Dionysis Grigoropoulos | def test_list_subnets(self): |
119 | 0dae1b9f | Dionysis Grigoropoulos | '''Test list subnets without data'''
|
120 | 7eae8fce | Dionysis Grigoropoulos | response = self.get(SUBNETS_URL)
|
121 | 7eae8fce | Dionysis Grigoropoulos | self.assertSuccess(response)
|
122 | 7eae8fce | Dionysis Grigoropoulos | subnets = json.loads(response.content) |
123 | 7eae8fce | Dionysis Grigoropoulos | self.assertEqual(subnets, {'subnets': []}) |
124 | 6de57f9c | Dionysis Grigoropoulos | |
125 | 0dae1b9f | Dionysis Grigoropoulos | def test_list_subnets_data(self): |
126 | 0dae1b9f | Dionysis Grigoropoulos | '''Test list subnets with data'''
|
127 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
128 | 0dae1b9f | Dionysis Grigoropoulos | test_subnet_ipv4 = mf.SubnetFactory(network=test_net) |
129 | 0dae1b9f | Dionysis Grigoropoulos | test_subnet_ipv6 = mf.SubnetFactory(network=test_net, ipversion=6,
|
130 | 0dae1b9f | Dionysis Grigoropoulos | cidr='2620:0:2d0:200::7/32')
|
131 | 0dae1b9f | Dionysis Grigoropoulos | response = self.get(SUBNETS_URL, user=test_net.userid)
|
132 | 0dae1b9f | Dionysis Grigoropoulos | self.assertSuccess(response)
|
133 | 0dae1b9f | Dionysis Grigoropoulos | |
134 | 6de57f9c | Dionysis Grigoropoulos | def test_get_subnet(self): |
135 | 0dae1b9f | Dionysis Grigoropoulos | '''Test get info of a single subnet'''
|
136 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
137 | 0dae1b9f | Dionysis Grigoropoulos | test_subnet = mf.SubnetFactory(network=test_net) |
138 | 0dae1b9f | Dionysis Grigoropoulos | url = join_urls(SUBNETS_URL, str(test_subnet.id))
|
139 | 0dae1b9f | Dionysis Grigoropoulos | response = self.get(url, user=test_net.userid)
|
140 | 6de57f9c | Dionysis Grigoropoulos | self.assertSuccess(response)
|
141 | 6de57f9c | Dionysis Grigoropoulos | |
142 | 6de57f9c | Dionysis Grigoropoulos | def test_get_subnet_404(self): |
143 | 6de57f9c | Dionysis Grigoropoulos | '''Test get info of a subnet that doesn't exist'''
|
144 | 0dae1b9f | Dionysis Grigoropoulos | url = join_urls(SUBNETS_URL, '42')
|
145 | 6de57f9c | Dionysis Grigoropoulos | response = self.get(url)
|
146 | 6de57f9c | Dionysis Grigoropoulos | self.assertItemNotFound(response)
|
147 | 6de57f9c | Dionysis Grigoropoulos | |
148 | f261896d | Dionysis Grigoropoulos | def test_subnet_delete(self): |
149 | 882b662f | Dionysis Grigoropoulos | '''Test delete a subnet -- not supported'''
|
150 | 6de57f9c | Dionysis Grigoropoulos | url = join_urls(SUBNETS_URL, '42')
|
151 | 0dae1b9f | Dionysis Grigoropoulos | response = self.delete(url)
|
152 | 0dae1b9f | Dionysis Grigoropoulos | self.assertBadRequest(response)
|
153 | 0dae1b9f | Dionysis Grigoropoulos | |
154 | 0dae1b9f | Dionysis Grigoropoulos | # def test_create_subnet_success(self):
|
155 | 0dae1b9f | Dionysis Grigoropoulos | # '''Test create a subnet successfully'''
|
156 | 0dae1b9f | Dionysis Grigoropoulos | # test_net = mf.NetworkFactory()
|
157 | 0dae1b9f | Dionysis Grigoropoulos | # request = {
|
158 | 0dae1b9f | Dionysis Grigoropoulos | # 'subnet': {
|
159 | 0dae1b9f | Dionysis Grigoropoulos | # 'network_id': test_net.id,
|
160 | 0dae1b9f | Dionysis Grigoropoulos | # 'cidr': '10.0.3.0/24',
|
161 | 0dae1b9f | Dionysis Grigoropoulos | # 'ip_version': 4}
|
162 | 0dae1b9f | Dionysis Grigoropoulos | # }
|
163 | 0dae1b9f | Dionysis Grigoropoulos | # response = self.post(SUBNETS_URL, test_net.userid,
|
164 | 0dae1b9f | Dionysis Grigoropoulos | # json.dumps(request), "json")
|
165 | 0dae1b9f | Dionysis Grigoropoulos | # self.assertSuccess(response)
|
166 | 0dae1b9f | Dionysis Grigoropoulos | |
167 | 0dae1b9f | Dionysis Grigoropoulos | def test_create_subnet_with_invalid_network_id(self): |
168 | 0dae1b9f | Dionysis Grigoropoulos | '''Test create a subnet with a network id that doesn't exist'''
|
169 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
170 | 0dae1b9f | Dionysis Grigoropoulos | request = { |
171 | 0dae1b9f | Dionysis Grigoropoulos | 'subnet': {
|
172 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': '42', |
173 | 0dae1b9f | Dionysis Grigoropoulos | 'cidr': '10.0.3.0/24', |
174 | 0dae1b9f | Dionysis Grigoropoulos | 'ip_version': 4} |
175 | 0dae1b9f | Dionysis Grigoropoulos | } |
176 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
177 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
178 | 6de57f9c | Dionysis Grigoropoulos | self.assertItemNotFound(response)
|
179 | f261896d | Dionysis Grigoropoulos | |
180 | f261896d | Dionysis Grigoropoulos | def test_create_subnet_with_malformed_ipversion(self): |
181 | f261896d | Dionysis Grigoropoulos | '''Create a subnet with a malformed ip_version type'''
|
182 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
183 | 882b662f | Dionysis Grigoropoulos | request = { |
184 | 882b662f | Dionysis Grigoropoulos | 'subnet': {
|
185 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': test_net.id,
|
186 | 882b662f | Dionysis Grigoropoulos | 'cidr': '10.0.3.0/24', |
187 | 882b662f | Dionysis Grigoropoulos | 'ip_version': 8} |
188 | 882b662f | Dionysis Grigoropoulos | } |
189 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
190 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
191 | 882b662f | Dionysis Grigoropoulos | self.assertBadRequest(response)
|
192 | 882b662f | Dionysis Grigoropoulos | |
193 | 882b662f | Dionysis Grigoropoulos | def test_create_subnet_with_invalid_cidr(self): |
194 | 882b662f | Dionysis Grigoropoulos | '''Create a subnet with an invalid cidr'''
|
195 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
196 | 882b662f | Dionysis Grigoropoulos | request = { |
197 | 882b662f | Dionysis Grigoropoulos | 'subnet': {
|
198 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': test_net.id,
|
199 | 882b662f | Dionysis Grigoropoulos | 'cidr': '192.168.3.0/8'} |
200 | 882b662f | Dionysis Grigoropoulos | } |
201 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
202 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
203 | 882b662f | Dionysis Grigoropoulos | self.assertBadRequest(response)
|
204 | f261896d | Dionysis Grigoropoulos | |
205 | 882b662f | Dionysis Grigoropoulos | def test_create_subnet_with_invalid_gateway(self): |
206 | 882b662f | Dionysis Grigoropoulos | '''Create a subnet with a gateway outside of the subnet range'''
|
207 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
208 | 882b662f | Dionysis Grigoropoulos | request = { |
209 | 882b662f | Dionysis Grigoropoulos | 'subnet': {
|
210 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': test_net.id,
|
211 | 882b662f | Dionysis Grigoropoulos | 'cidr': '192.168.3.0/24', |
212 | 882b662f | Dionysis Grigoropoulos | 'gateway_ip': '192.168.0.1'} |
213 | 882b662f | Dionysis Grigoropoulos | } |
214 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
215 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
216 | 882b662f | Dionysis Grigoropoulos | self.assertBadRequest(response)
|
217 | 882b662f | Dionysis Grigoropoulos | |
218 | 0dae1b9f | Dionysis Grigoropoulos | def test_create_subnet_with_invalid_name(self): |
219 | 882b662f | Dionysis Grigoropoulos | '''Create a subnet with an invalid subnet name'''
|
220 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
221 | 882b662f | Dionysis Grigoropoulos | request = { |
222 | 882b662f | Dionysis Grigoropoulos | 'subnet': {
|
223 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': test_net.id,
|
224 | 882b662f | Dionysis Grigoropoulos | 'cidr': '192.168.3.0/24', |
225 | 0dae1b9f | Dionysis Grigoropoulos | 'name': 'a' * 300} |
226 | 882b662f | Dionysis Grigoropoulos | } |
227 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
228 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
229 | 882b662f | Dionysis Grigoropoulos | self.assertBadRequest(response)
|
230 | 882b662f | Dionysis Grigoropoulos | |
231 | 882b662f | Dionysis Grigoropoulos | def test_create_subnet_with_invalid_dhcp(self): |
232 | 882b662f | Dionysis Grigoropoulos | '''Create a subnet with an invalid dhcp value'''
|
233 | 0dae1b9f | Dionysis Grigoropoulos | test_net = mf.NetworkFactory() |
234 | 882b662f | Dionysis Grigoropoulos | request = { |
235 | 882b662f | Dionysis Grigoropoulos | 'subnet': {
|
236 | 0dae1b9f | Dionysis Grigoropoulos | 'network_id': test_net.id,
|
237 | 882b662f | Dionysis Grigoropoulos | 'cidr': '192.168.3.0/24', |
238 | 882b662f | Dionysis Grigoropoulos | 'enable_dhcp': 'None'} |
239 | 882b662f | Dionysis Grigoropoulos | } |
240 | 0dae1b9f | Dionysis Grigoropoulos | response = self.post(SUBNETS_URL, test_net.userid, json.dumps(request),
|
241 | 0dae1b9f | Dionysis Grigoropoulos | "json")
|
242 | f261896d | Dionysis Grigoropoulos | self.assertBadRequest(response) |