root / api / tests.py @ 7584d408
History | View | Annotate | Download (21.2 kB)
1 | 894f6b7e | Dimitris Moraitis | #
|
---|---|---|---|
2 | 894f6b7e | Dimitris Moraitis | # Unit Tests for api
|
3 | 894f6b7e | Dimitris Moraitis | #
|
4 | 285a1fa8 | Dimitris Moraitis | # Provides automated tests for api module
|
5 | 894f6b7e | Dimitris Moraitis | #
|
6 | 285a1fa8 | Dimitris Moraitis | # Copyright 2011 Greek Research and Technology Network
|
7 | 894f6b7e | Dimitris Moraitis | #
|
8 | 894f6b7e | Dimitris Moraitis | |
9 | 34244492 | Markos Gogoulos | import datetime |
10 | a237869d | Faidon Liambotis | from django.utils import simplejson as json |
11 | 894f6b7e | Dimitris Moraitis | from django.test import TestCase |
12 | 894f6b7e | Dimitris Moraitis | from django.test.client import Client |
13 | e646ebe5 | Dimitris Moraitis | from synnefo.db.models import VirtualMachine, VirtualMachineGroup |
14 | e646ebe5 | Dimitris Moraitis | from synnefo.db.models import Flavor, Image |
15 | 7e2f9d4b | Giorgos Verigakis | from synnefo.api.tests_redux import APIReduxTestCase |
16 | 5fb55fba | Georgios Gousios | from synnefo.api.tests_auth import AuthTestCase |
17 | 7e2f9d4b | Giorgos Verigakis | |
18 | 5fb55fba | Georgios Gousios | from synnefo.logic import utils |
19 | 894f6b7e | Dimitris Moraitis | |
20 | 894f6b7e | Dimitris Moraitis | class APITestCase(TestCase): |
21 | e646ebe5 | Dimitris Moraitis | fixtures = ['api_test_data', ]
|
22 | d2e5f1d1 | Markos Gogoulos | test_server_id = 1001
|
23 | d2e5f1d1 | Markos Gogoulos | test_image_id = 1
|
24 | d2e5f1d1 | Markos Gogoulos | test_flavor_id = 1
|
25 | a8acbbac | Markos Gogoulos | test_group_id = 1
|
26 | d2e5f1d1 | Markos Gogoulos | test_wrong_server_id = 99999999
|
27 | d2e5f1d1 | Markos Gogoulos | test_wrong_image_id = 99999999
|
28 | d2e5f1d1 | Markos Gogoulos | test_wrong_flavor_id = 99999999
|
29 | a8acbbac | Markos Gogoulos | test_wrong_group_id = 99999999
|
30 | d2e5f1d1 | Markos Gogoulos | #make the testing with these id's
|
31 | d2e5f1d1 | Markos Gogoulos | |
32 | 894f6b7e | Dimitris Moraitis | def setUp(self): |
33 | 7de0c985 | Dimitris Moraitis | self.client = Client()
|
34 | 894f6b7e | Dimitris Moraitis | |
35 | e646ebe5 | Dimitris Moraitis | def test_api_version(self): |
36 | 285a1fa8 | Dimitris Moraitis | """ check rackspace cloud servers API version
|
37 | 6781c0d0 | Dimitris Moraitis | """
|
38 | 7de0c985 | Dimitris Moraitis | response = self.client.get('/api/v1.0/') |
39 | 894f6b7e | Dimitris Moraitis | # Check that the response is 200 OK.
|
40 | 894f6b7e | Dimitris Moraitis | self.assertEqual(response.status_code, 200) |
41 | 54c30633 | Markos Gogoulos | api_version = json.loads(response.content)['version']
|
42 | 54c30633 | Markos Gogoulos | self.assertEqual(api_version['status'], 'CURRENT') |
43 | e646ebe5 | Dimitris Moraitis | self.assertEqual(api_version['wadl'], |
44 | e646ebe5 | Dimitris Moraitis | 'http://docs.rackspacecloud.com/servers/api/v1.0/application.wadl')
|
45 | e646ebe5 | Dimitris Moraitis | self.assertEqual(api_version['docURL'], |
46 | e646ebe5 | Dimitris Moraitis | 'http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20110112.pdf')
|
47 | 54c30633 | Markos Gogoulos | self.assertEqual(api_version['id'], 'v1.0') |
48 | 54c30633 | Markos Gogoulos | |
49 | e646ebe5 | Dimitris Moraitis | def test_server_list(self): |
50 | 6781c0d0 | Dimitris Moraitis | """ test if the expected list of servers is returned by the API
|
51 | e646ebe5 | Dimitris Moraitis | """
|
52 | 7de0c985 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers') |
53 | 6781c0d0 | Dimitris Moraitis | vms_from_api = json.loads(response.content)['servers']
|
54 | 668c1361 | Markos Gogoulos | vms_from_db = VirtualMachine.objects.filter(deleted=False)
|
55 | 6781c0d0 | Dimitris Moraitis | self.assertEqual(len(vms_from_api), len(vms_from_db)) |
56 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
57 | 54c30633 | Markos Gogoulos | for vm_from_api in vms_from_api: |
58 | 54c30633 | Markos Gogoulos | vm_from_db = VirtualMachine.objects.get(id=vm_from_api['id'])
|
59 | 54c30633 | Markos Gogoulos | self.assertEqual(vm_from_api['id'], vm_from_db.id) |
60 | 54c30633 | Markos Gogoulos | self.assertEqual(vm_from_api['name'], vm_from_db.name) |
61 | 54c30633 | Markos Gogoulos | |
62 | e646ebe5 | Dimitris Moraitis | def test_server_details(self): |
63 | 668c1361 | Markos Gogoulos | """ test if the expected server is returned by the API
|
64 | e646ebe5 | Dimitris Moraitis | """
|
65 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers/' + |
66 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id)) |
67 | 668c1361 | Markos Gogoulos | vm_from_api = json.loads(response.content)['server']
|
68 | d2e5f1d1 | Markos Gogoulos | vm_from_db = VirtualMachine.objects.get(id=self.test_server_id)
|
69 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id) |
70 | 668c1361 | Markos Gogoulos | self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid) |
71 | 668c1361 | Markos Gogoulos | self.assertEqual(vm_from_api['id'], vm_from_db.id) |
72 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id) |
73 | 668c1361 | Markos Gogoulos | self.assertEqual(vm_from_api['name'], vm_from_db.name) |
74 | dbccf323 | Vassilios Karakoidas | self.assertEqual(vm_from_api['status'], utils.get_rsapi_state(vm_from_db)) |
75 | 668c1361 | Markos Gogoulos | self.assertTrue(response.status_code in [200,203]) |
76 | 668c1361 | Markos Gogoulos | |
77 | 54c30633 | Markos Gogoulos | |
78 | e646ebe5 | Dimitris Moraitis | def test_servers_details(self): |
79 | 685ab2b6 | Markos Gogoulos | """ test if the servers details are returned by the API
|
80 | 685ab2b6 | Markos Gogoulos | """
|
81 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers/detail') |
82 | 54c30633 | Markos Gogoulos | vms_from_db = VirtualMachine.objects.filter(deleted=False)
|
83 | 54c30633 | Markos Gogoulos | id_list = [vm.id for vm in vms_from_db] |
84 | 685ab2b6 | Markos Gogoulos | number = 0
|
85 | 685ab2b6 | Markos Gogoulos | for vm_id in id_list: |
86 | 685ab2b6 | Markos Gogoulos | vm_from_api = json.loads(response.content)['servers'][number]
|
87 | 685ab2b6 | Markos Gogoulos | vm_from_db = VirtualMachine.objects.get(id=vm_id) |
88 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id) |
89 | 685ab2b6 | Markos Gogoulos | self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid) |
90 | 685ab2b6 | Markos Gogoulos | self.assertEqual(vm_from_api['id'], vm_from_db.id) |
91 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id) |
92 | 685ab2b6 | Markos Gogoulos | self.assertEqual(vm_from_api['name'], vm_from_db.name) |
93 | dbccf323 | Vassilios Karakoidas | self.assertEqual(vm_from_api['status'], utils.get_rsapi_state(vm_from_db)) |
94 | 685ab2b6 | Markos Gogoulos | number += 1
|
95 | 54c30633 | Markos Gogoulos | vms_from_api = json.loads(response.content)['servers']
|
96 | 54c30633 | Markos Gogoulos | for vm_from_api in vms_from_api: |
97 | 54c30633 | Markos Gogoulos | vm_from_db = VirtualMachine.objects.get(id=vm_from_api['id'])
|
98 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id) |
99 | 54c30633 | Markos Gogoulos | self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid) |
100 | 54c30633 | Markos Gogoulos | self.assertEqual(vm_from_api['id'], vm_from_db.id) |
101 | b335768e | Markos Gogoulos | self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id) |
102 | 54c30633 | Markos Gogoulos | self.assertEqual(vm_from_api['name'], vm_from_db.name) |
103 | dbccf323 | Vassilios Karakoidas | self.assertEqual(vm_from_api['status'], utils.get_rsapi_state(vm_from_db)) |
104 | 685ab2b6 | Markos Gogoulos | self.assertTrue(response.status_code in [200,203]) |
105 | 685ab2b6 | Markos Gogoulos | |
106 | 54c30633 | Markos Gogoulos | |
107 | e646ebe5 | Dimitris Moraitis | def test_wrong_server(self): |
108 | e646ebe5 | Dimitris Moraitis | """ test 404 response if server does not exist
|
109 | 685ab2b6 | Markos Gogoulos | """
|
110 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers/' + |
111 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_server_id)) |
112 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
113 | 685ab2b6 | Markos Gogoulos | |
114 | e646ebe5 | Dimitris Moraitis | def test_create_server_empty(self): |
115 | 7de0c985 | Dimitris Moraitis | """ test if the create server call returns a 400 badRequest if no
|
116 | 7de0c985 | Dimitris Moraitis | attributes are specified
|
117 | 7de0c985 | Dimitris Moraitis | """
|
118 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers', {}) |
119 | 7de0c985 | Dimitris Moraitis | self.assertEqual(response.status_code, 400) |
120 | 54c30633 | Markos Gogoulos | |
121 | e646ebe5 | Dimitris Moraitis | def test_create_server(self): |
122 | 685ab2b6 | Markos Gogoulos | """ test if the create server call returns the expected response
|
123 | 685ab2b6 | Markos Gogoulos | if a valid request has been speficied
|
124 | 7de0c985 | Dimitris Moraitis | """
|
125 | 7de0c985 | Dimitris Moraitis | request = { |
126 | 285a1fa8 | Dimitris Moraitis | "server": {
|
127 | e646ebe5 | Dimitris Moraitis | "name": "new-server-test", |
128 | e646ebe5 | Dimitris Moraitis | "imageRef": 1, |
129 | e646ebe5 | Dimitris Moraitis | "flavorRef": 1, |
130 | e646ebe5 | Dimitris Moraitis | "metadata": {
|
131 | 285a1fa8 | Dimitris Moraitis | "My Server Name": "Apache1" |
132 | 285a1fa8 | Dimitris Moraitis | }, |
133 | e646ebe5 | Dimitris Moraitis | "personality": []
|
134 | 285a1fa8 | Dimitris Moraitis | } |
135 | 7de0c985 | Dimitris Moraitis | } |
136 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers', |
137 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
138 | 685ab2b6 | Markos Gogoulos | content_type='application/json')
|
139 | 285a1fa8 | Dimitris Moraitis | self.assertEqual(response.status_code, 202) |
140 | e646ebe5 | Dimitris Moraitis | #TODO: check response.content
|
141 | e646ebe5 | Dimitris Moraitis | #TODO: check create server with wrong options (eg non existing flavor)
|
142 | 668c1361 | Markos Gogoulos | |
143 | e646ebe5 | Dimitris Moraitis | def test_server_polling(self): |
144 | 34244492 | Markos Gogoulos | """ test if the server polling works as expected
|
145 | 34244492 | Markos Gogoulos | """
|
146 | 34244492 | Markos Gogoulos | response = self.client.get('/api/v1.0/servers/detail') |
147 | 34244492 | Markos Gogoulos | vms_from_api_initial = json.loads(response.content)['servers']
|
148 | 34244492 | Markos Gogoulos | then = datetime.datetime.now().isoformat().split('.')[0] |
149 | e646ebe5 | Dimitris Moraitis | |
150 | 34244492 | Markos Gogoulos | #isoformat also gives miliseconds that are not needed
|
151 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers/detail?changes-since=%s' |
152 | e646ebe5 | Dimitris Moraitis | % then) |
153 | 34244492 | Markos Gogoulos | self.assertEqual(len(response.content), 0) |
154 | 34244492 | Markos Gogoulos | #no changes were made
|
155 | 34244492 | Markos Gogoulos | |
156 | 34244492 | Markos Gogoulos | #now create a machine. Then check if it is on the list
|
157 | 34244492 | Markos Gogoulos | request = { |
158 | 34244492 | Markos Gogoulos | "server": {
|
159 | e646ebe5 | Dimitris Moraitis | "name": "new-server-test", |
160 | e646ebe5 | Dimitris Moraitis | "imageRef": 1, |
161 | e646ebe5 | Dimitris Moraitis | "flavorRef": 1, |
162 | e646ebe5 | Dimitris Moraitis | "metadata": {
|
163 | 34244492 | Markos Gogoulos | "My Server Name": "Apache1" |
164 | 34244492 | Markos Gogoulos | }, |
165 | e646ebe5 | Dimitris Moraitis | "personality": []
|
166 | 34244492 | Markos Gogoulos | } |
167 | 34244492 | Markos Gogoulos | } |
168 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers', |
169 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
170 | 34244492 | Markos Gogoulos | content_type='application/json')
|
171 | 34244492 | Markos Gogoulos | self.assertEqual(response.status_code, 202) |
172 | 34244492 | Markos Gogoulos | |
173 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/servers/detail?changes-since=%s' |
174 | e646ebe5 | Dimitris Moraitis | % then) |
175 | 34244492 | Markos Gogoulos | vms_from_api_after = json.loads(response.content)['servers']
|
176 | e646ebe5 | Dimitris Moraitis | #make sure the newly created server is included on the updated list
|
177 | 34244492 | Markos Gogoulos | self.assertEqual(len(vms_from_api_after), 1) |
178 | 34244492 | Markos Gogoulos | |
179 | e646ebe5 | Dimitris Moraitis | def test_reboot_server(self): |
180 | 668c1361 | Markos Gogoulos | """ test if the specified server is rebooted
|
181 | 668c1361 | Markos Gogoulos | """
|
182 | 685ab2b6 | Markos Gogoulos | request = { |
183 | 685ab2b6 | Markos Gogoulos | "reboot": '{"type" : "HARD"}' |
184 | 685ab2b6 | Markos Gogoulos | } |
185 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
186 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id) + '/action', |
187 | 685ab2b6 | Markos Gogoulos | json.dumps(request), |
188 | e646ebe5 | Dimitris Moraitis | content_type='application/json')
|
189 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 202) |
190 | 685ab2b6 | Markos Gogoulos | #server id that does not exist
|
191 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
192 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_server_id) + '/action', |
193 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
194 | 685ab2b6 | Markos Gogoulos | content_type='application/json')
|
195 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
196 | 668c1361 | Markos Gogoulos | |
197 | e646ebe5 | Dimitris Moraitis | def test_shutdown_server(self): |
198 | 668c1361 | Markos Gogoulos | """ test if the specified server is shutdown
|
199 | 668c1361 | Markos Gogoulos | """
|
200 | 685ab2b6 | Markos Gogoulos | request = { |
201 | e646ebe5 | Dimitris Moraitis | "shutdown": {"timeout": "5"} |
202 | 685ab2b6 | Markos Gogoulos | } |
203 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
204 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id) + '/action', |
205 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
206 | e646ebe5 | Dimitris Moraitis | content_type='application/json')
|
207 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 202) |
208 | 685ab2b6 | Markos Gogoulos | #server id that does not exist
|
209 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
210 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_server_id) + '/action', |
211 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
212 | 685ab2b6 | Markos Gogoulos | content_type='application/json')
|
213 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
214 | 668c1361 | Markos Gogoulos | |
215 | e646ebe5 | Dimitris Moraitis | def test_start_server(self): |
216 | 668c1361 | Markos Gogoulos | """ test if the specified server is started
|
217 | 668c1361 | Markos Gogoulos | """
|
218 | 685ab2b6 | Markos Gogoulos | request = { |
219 | e646ebe5 | Dimitris Moraitis | "start": {"type": "NORMAL"} |
220 | 685ab2b6 | Markos Gogoulos | } |
221 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
222 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id) + '/action', |
223 | 685ab2b6 | Markos Gogoulos | json.dumps(request), |
224 | e646ebe5 | Dimitris Moraitis | content_type='application/json')
|
225 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 202) |
226 | 685ab2b6 | Markos Gogoulos | #server id that does not exist
|
227 | e646ebe5 | Dimitris Moraitis | response = self.client.post('/api/v1.0/servers/' + |
228 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_server_id) + '/action', |
229 | e646ebe5 | Dimitris Moraitis | json.dumps(request), |
230 | 685ab2b6 | Markos Gogoulos | content_type='application/json')
|
231 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
232 | 668c1361 | Markos Gogoulos | |
233 | e646ebe5 | Dimitris Moraitis | def test_delete_server(self): |
234 | 668c1361 | Markos Gogoulos | """ test if the specified server is deleted
|
235 | 668c1361 | Markos Gogoulos | """
|
236 | e646ebe5 | Dimitris Moraitis | response = self.client.delete('/api/v1.0/servers/' + |
237 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id)) |
238 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 202) |
239 | e646ebe5 | Dimitris Moraitis | #server id that does not exist
|
240 | e646ebe5 | Dimitris Moraitis | response = self.client.delete('/api/v1.0/servers/' + |
241 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_server_id)) |
242 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
243 | 668c1361 | Markos Gogoulos | |
244 | e646ebe5 | Dimitris Moraitis | def test_flavor_list(self): |
245 | 668c1361 | Markos Gogoulos | """ test if the expected list of flavors is returned by the API
|
246 | e646ebe5 | Dimitris Moraitis | """
|
247 | 668c1361 | Markos Gogoulos | response = self.client.get('/api/v1.0/flavors') |
248 | 668c1361 | Markos Gogoulos | flavors_from_api = json.loads(response.content)['flavors']
|
249 | 668c1361 | Markos Gogoulos | flavors_from_db = Flavor.objects.all() |
250 | 668c1361 | Markos Gogoulos | self.assertEqual(len(flavors_from_api), len(flavors_from_db)) |
251 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
252 | 54c30633 | Markos Gogoulos | for flavor_from_api in flavors_from_api: |
253 | 54c30633 | Markos Gogoulos | flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
|
254 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['id'], flavor_from_db.id) |
255 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['name'], flavor_from_db.name) |
256 | 668c1361 | Markos Gogoulos | |
257 | e646ebe5 | Dimitris Moraitis | def test_flavors_details(self): |
258 | 685ab2b6 | Markos Gogoulos | """ test if the flavors details are returned by the API
|
259 | 668c1361 | Markos Gogoulos | """
|
260 | f3af8b40 | Dimitris Moraitis | response = self.client.get('/api/v1.0/flavors/detail') |
261 | f3af8b40 | Dimitris Moraitis | flavors_from_db = Flavor.objects.all() |
262 | f3af8b40 | Dimitris Moraitis | flavors_from_api = json.loads(response.content)['flavors']
|
263 | e646ebe5 | Dimitris Moraitis | |
264 | f3af8b40 | Dimitris Moraitis | # Assert that all flavors in the db appear inthe API call result
|
265 | f3af8b40 | Dimitris Moraitis | for i in range(0, len(flavors_from_db)): |
266 | f3af8b40 | Dimitris Moraitis | flavor_from_api = flavors_from_api[i] |
267 | f3af8b40 | Dimitris Moraitis | flavor_from_db = Flavor.objects.get(id=flavors_from_db[i].id) |
268 | 685ab2b6 | Markos Gogoulos | self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu) |
269 | 685ab2b6 | Markos Gogoulos | self.assertEqual(flavor_from_api['id'], flavor_from_db.id) |
270 | 685ab2b6 | Markos Gogoulos | self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk) |
271 | 685ab2b6 | Markos Gogoulos | self.assertEqual(flavor_from_api['name'], flavor_from_db.name) |
272 | 685ab2b6 | Markos Gogoulos | self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram) |
273 | f3af8b40 | Dimitris Moraitis | |
274 | e646ebe5 | Dimitris Moraitis | # Assert that all flavors returned by the API also exist in the db
|
275 | 54c30633 | Markos Gogoulos | for flavor_from_api in flavors_from_api: |
276 | 54c30633 | Markos Gogoulos | flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
|
277 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu) |
278 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['id'], flavor_from_db.id) |
279 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk) |
280 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['name'], flavor_from_db.name) |
281 | 54c30633 | Markos Gogoulos | self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram) |
282 | 7de0c985 | Dimitris Moraitis | |
283 | e646ebe5 | Dimitris Moraitis | # Check if we have the right status_code
|
284 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
285 | 7de0c985 | Dimitris Moraitis | |
286 | e646ebe5 | Dimitris Moraitis | def test_flavor_details(self): |
287 | 685ab2b6 | Markos Gogoulos | """ test if the expected flavor is returned by the API
|
288 | 668c1361 | Markos Gogoulos | """
|
289 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/flavors/' + |
290 | e646ebe5 | Dimitris Moraitis | str(self.test_flavor_id)) |
291 | 668c1361 | Markos Gogoulos | flavor_from_api = json.loads(response.content)['flavor']
|
292 | d2e5f1d1 | Markos Gogoulos | flavor_from_db = Flavor.objects.get(id=self.test_flavor_id)
|
293 | 668c1361 | Markos Gogoulos | self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu) |
294 | 668c1361 | Markos Gogoulos | self.assertEqual(flavor_from_api['id'], flavor_from_db.id) |
295 | 668c1361 | Markos Gogoulos | self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk) |
296 | 668c1361 | Markos Gogoulos | self.assertEqual(flavor_from_api['name'], flavor_from_db.name) |
297 | 668c1361 | Markos Gogoulos | self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram) |
298 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
299 | 668c1361 | Markos Gogoulos | |
300 | e646ebe5 | Dimitris Moraitis | def test_wrong_flavor(self): |
301 | e646ebe5 | Dimitris Moraitis | """ test 404 result when requesting a flavor that does not exist
|
302 | 668c1361 | Markos Gogoulos | """
|
303 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/flavors/' + |
304 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_flavor_id)) |
305 | ffffd5fe | Markos Gogoulos | self.assertTrue(response.status_code in [404, 503]) |
306 | 668c1361 | Markos Gogoulos | |
307 | e646ebe5 | Dimitris Moraitis | def test_image_list(self): |
308 | 668c1361 | Markos Gogoulos | """ test if the expected list of images is returned by the API
|
309 | e646ebe5 | Dimitris Moraitis | """
|
310 | 668c1361 | Markos Gogoulos | response = self.client.get('/api/v1.0/images') |
311 | 668c1361 | Markos Gogoulos | images_from_api = json.loads(response.content)['images']
|
312 | 668c1361 | Markos Gogoulos | images_from_db = Image.objects.all() |
313 | 668c1361 | Markos Gogoulos | self.assertEqual(len(images_from_api), len(images_from_db)) |
314 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
315 | 54c30633 | Markos Gogoulos | for image_from_api in images_from_api: |
316 | 54c30633 | Markos Gogoulos | image_from_db = Image.objects.get(id=image_from_api['id'])
|
317 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['id'], image_from_db.id) |
318 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['name'], image_from_db.name) |
319 | 668c1361 | Markos Gogoulos | |
320 | e646ebe5 | Dimitris Moraitis | def test_image_details(self): |
321 | 668c1361 | Markos Gogoulos | """ test if the expected image is returned by the API
|
322 | 668c1361 | Markos Gogoulos | """
|
323 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/images/' + |
324 | e646ebe5 | Dimitris Moraitis | str(self.test_image_id)) |
325 | 668c1361 | Markos Gogoulos | image_from_api = json.loads(response.content)['image']
|
326 | d2e5f1d1 | Markos Gogoulos | image_from_db = Image.objects.get(id=self.test_image_id)
|
327 | 668c1361 | Markos Gogoulos | self.assertEqual(image_from_api['name'], image_from_db.name) |
328 | 668c1361 | Markos Gogoulos | self.assertEqual(image_from_api['id'], image_from_db.id) |
329 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['serverId'], |
330 | e646ebe5 | Dimitris Moraitis | image_from_db.sourcevm and image_from_db.sourcevm.id or |
331 | e646ebe5 | Dimitris Moraitis | "")
|
332 | 668c1361 | Markos Gogoulos | self.assertEqual(image_from_api['size'], image_from_db.size) |
333 | 668c1361 | Markos Gogoulos | self.assertEqual(image_from_api['status'], image_from_db.state) |
334 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['metadata']['meta']['key'] |
335 | e646ebe5 | Dimitris Moraitis | ['description'],
|
336 | e646ebe5 | Dimitris Moraitis | image_from_db.description) |
337 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
338 | 668c1361 | Markos Gogoulos | |
339 | e646ebe5 | Dimitris Moraitis | def test_images_details(self): |
340 | 668c1361 | Markos Gogoulos | """ test if the images details are returned by the API
|
341 | 668c1361 | Markos Gogoulos | """
|
342 | f3af8b40 | Dimitris Moraitis | response = self.client.get('/api/v1.0/images/detail') |
343 | f3af8b40 | Dimitris Moraitis | images_from_api = json.loads(response.content)['images']
|
344 | f3af8b40 | Dimitris Moraitis | images_from_db = Image.objects.all() |
345 | f3af8b40 | Dimitris Moraitis | for i in range(0, len(images_from_db)): |
346 | f3af8b40 | Dimitris Moraitis | image_from_db = Image.objects.get(id=images_from_db[i].id) |
347 | f3af8b40 | Dimitris Moraitis | image_from_api = images_from_api[i] |
348 | 685ab2b6 | Markos Gogoulos | self.assertEqual(image_from_api['name'], image_from_db.name) |
349 | 685ab2b6 | Markos Gogoulos | self.assertEqual(image_from_api['id'], image_from_db.id) |
350 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['serverId'], |
351 | e646ebe5 | Dimitris Moraitis | image_from_db.sourcevm and
|
352 | e646ebe5 | Dimitris Moraitis | image_from_db.sourcevm.id or "") |
353 | 685ab2b6 | Markos Gogoulos | self.assertEqual(image_from_api['size'], image_from_db.size) |
354 | 685ab2b6 | Markos Gogoulos | self.assertEqual(image_from_api['status'], image_from_db.state) |
355 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['metadata']['meta']['key'] |
356 | e646ebe5 | Dimitris Moraitis | ['description'],
|
357 | e646ebe5 | Dimitris Moraitis | image_from_db.description) |
358 | f3af8b40 | Dimitris Moraitis | |
359 | 54c30633 | Markos Gogoulos | for image_from_api in images_from_api: |
360 | 54c30633 | Markos Gogoulos | image_from_db = Image.objects.get(id=image_from_api['id'])
|
361 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['name'], image_from_db.name) |
362 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['id'], image_from_db.id) |
363 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['serverId'], |
364 | e646ebe5 | Dimitris Moraitis | image_from_db.sourcevm and
|
365 | e646ebe5 | Dimitris Moraitis | image_from_db.sourcevm.id or "") |
366 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['size'], image_from_db.size) |
367 | 54c30633 | Markos Gogoulos | self.assertEqual(image_from_api['status'], image_from_db.state) |
368 | e646ebe5 | Dimitris Moraitis | self.assertEqual(image_from_api['metadata']['meta']['key'] |
369 | e646ebe5 | Dimitris Moraitis | ['description'],
|
370 | e646ebe5 | Dimitris Moraitis | image_from_db.description) |
371 | 685ab2b6 | Markos Gogoulos | |
372 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
373 | 668c1361 | Markos Gogoulos | |
374 | e646ebe5 | Dimitris Moraitis | def test_wrong_image(self): |
375 | e646ebe5 | Dimitris Moraitis | """ test 404 result if a non existent image is requested
|
376 | 668c1361 | Markos Gogoulos | """
|
377 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/images/' + |
378 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_image_id)) |
379 | 685ab2b6 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
380 | 73469364 | Markos Gogoulos | |
381 | e646ebe5 | Dimitris Moraitis | def test_server_metadata(self): |
382 | 73469364 | Markos Gogoulos | """ test server's metadata (add, edit)
|
383 | 73469364 | Markos Gogoulos | """
|
384 | 73469364 | Markos Gogoulos | request = { |
385 | e646ebe5 | Dimitris Moraitis | "metadata": {
|
386 | e646ebe5 | Dimitris Moraitis | "metadata_key": "name", |
387 | e646ebe5 | Dimitris Moraitis | "metadata_value": "a fancy name" |
388 | e646ebe5 | Dimitris Moraitis | } |
389 | 73469364 | Markos Gogoulos | } |
390 | e646ebe5 | Dimitris Moraitis | response = self.client.put('/api/v1.0/servers' + |
391 | e646ebe5 | Dimitris Moraitis | str(self.test_server_id), |
392 | 73469364 | Markos Gogoulos | json.dumps(request), |
393 | e646ebe5 | Dimitris Moraitis | content_type='application/json')
|
394 | 73469364 | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
395 | 73469364 | Markos Gogoulos | #TODO: not working atm, due to problem with django piston and PUT
|
396 | a8acbbac | Markos Gogoulos | |
397 | e646ebe5 | Dimitris Moraitis | def test_vm_group_list(self): |
398 | a8acbbac | Markos Gogoulos | """ test if the expected list of groups is returned by the API
|
399 | e646ebe5 | Dimitris Moraitis | """
|
400 | a8acbbac | Markos Gogoulos | response = self.client.get('/api/v1.0/groups') |
401 | a8acbbac | Markos Gogoulos | groups_from_api = json.loads(response.content)['groups']
|
402 | a8acbbac | Markos Gogoulos | groups_from_db = VirtualMachineGroup.objects.all() |
403 | a8acbbac | Markos Gogoulos | self.assertEqual(len(groups_from_api), len(groups_from_db)) |
404 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
405 | a8acbbac | Markos Gogoulos | for group_from_api in groups_from_api: |
406 | e646ebe5 | Dimitris Moraitis | group_from_db = VirtualMachineGroup.objects.get( |
407 | e646ebe5 | Dimitris Moraitis | id=group_from_api['id']
|
408 | e646ebe5 | Dimitris Moraitis | ) |
409 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['id'], group_from_db.id) |
410 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['name'], group_from_db.name) |
411 | a8acbbac | Markos Gogoulos | |
412 | e646ebe5 | Dimitris Moraitis | def test_vm_group_details(self): |
413 | a8acbbac | Markos Gogoulos | """ test if the expected virtual machine group is returned by the API
|
414 | a8acbbac | Markos Gogoulos | """
|
415 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/groups/' + |
416 | e646ebe5 | Dimitris Moraitis | str(self.test_group_id)) |
417 | a8acbbac | Markos Gogoulos | group_from_api = json.loads(response.content)['group']
|
418 | a8acbbac | Markos Gogoulos | group_from_db = VirtualMachineGroup.objects.get(id=self.test_group_id)
|
419 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['name'], group_from_db.name) |
420 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['id'], group_from_db.id) |
421 | e646ebe5 | Dimitris Moraitis | self.assertEqual(group_from_api['server_id'], |
422 | e646ebe5 | Dimitris Moraitis | [machine.id |
423 | e646ebe5 | Dimitris Moraitis | for machine in group_from_db.machines.all()]) |
424 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |
425 | a8acbbac | Markos Gogoulos | |
426 | e646ebe5 | Dimitris Moraitis | def test_wrong_vm_group(self): |
427 | e646ebe5 | Dimitris Moraitis | """ test 404 result if a non existent VM group is requested
|
428 | a8acbbac | Markos Gogoulos | """
|
429 | e646ebe5 | Dimitris Moraitis | response = self.client.get('/api/v1.0/groups/' + |
430 | e646ebe5 | Dimitris Moraitis | str(self.test_wrong_group_id)) |
431 | a8acbbac | Markos Gogoulos | self.assertEqual(response.status_code, 404) |
432 | a8acbbac | Markos Gogoulos | |
433 | e646ebe5 | Dimitris Moraitis | def test_groups_details(self): |
434 | a8acbbac | Markos Gogoulos | """ test if the groups details are returned by the API
|
435 | a8acbbac | Markos Gogoulos | """
|
436 | a8acbbac | Markos Gogoulos | response = self.client.get('/api/v1.0/groups/detail') |
437 | a8acbbac | Markos Gogoulos | groups_from_api = json.loads(response.content)['groups']
|
438 | a8acbbac | Markos Gogoulos | groups_from_db = VirtualMachineGroup.objects.all() |
439 | a8acbbac | Markos Gogoulos | for i in range(0, len(groups_from_db)): |
440 | e646ebe5 | Dimitris Moraitis | group_from_db = VirtualMachineGroup.objects.get( |
441 | e646ebe5 | Dimitris Moraitis | id=groups_from_db[i].id) |
442 | a8acbbac | Markos Gogoulos | group_from_api = groups_from_api[i] |
443 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['name'], group_from_db.name) |
444 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['id'], group_from_db.id) |
445 | e646ebe5 | Dimitris Moraitis | self.assertEqual(group_from_api['server_id'], |
446 | e646ebe5 | Dimitris Moraitis | [machine.id |
447 | e646ebe5 | Dimitris Moraitis | for machine in group_from_db.machines.all()]) |
448 | a8acbbac | Markos Gogoulos | for group_from_api in groups_from_api: |
449 | e646ebe5 | Dimitris Moraitis | group_from_db = VirtualMachineGroup.objects.get( |
450 | e646ebe5 | Dimitris Moraitis | id=group_from_api['id'])
|
451 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['name'], group_from_db.name) |
452 | a8acbbac | Markos Gogoulos | self.assertEqual(group_from_api['id'], group_from_db.id) |
453 | e646ebe5 | Dimitris Moraitis | self.assertEqual(group_from_api['server_id'], |
454 | e646ebe5 | Dimitris Moraitis | [machine.id |
455 | e646ebe5 | Dimitris Moraitis | for machine in group_from_db.machines.all()]) |
456 | e646ebe5 | Dimitris Moraitis | self.assertTrue(response.status_code in [200, 203]) |