Revision e646ebe5 api/tests.py

b/api/tests.py
10 10
from django.utils import simplejson as json
11 11
from django.test import TestCase
12 12
from django.test.client import Client
13
from synnefo.db.models import VirtualMachine, Flavor, Image, VirtualMachineGroup
13
from synnefo.db.models import VirtualMachine, VirtualMachineGroup
14
from synnefo.db.models import Flavor, Image
14 15
from synnefo.api.tests_redux import APIReduxTestCase
15 16

  
16 17

  
17 18
class APITestCase(TestCase):
18
    fixtures = [ 'api_test_data' ]
19
    fixtures = ['api_test_data', ]
19 20
    test_server_id = 1001
20 21
    test_image_id = 1
21 22
    test_flavor_id = 1
......
26 27
    test_wrong_group_id = 99999999
27 28
    #make the testing with these id's
28 29

  
29

  
30 30
    def setUp(self):
31 31
        self.client = Client()
32 32

  
33
    def testAPIVersion(self):
33
    def test_api_version(self):
34 34
        """ check rackspace cloud servers API version
35 35
        """
36 36
        response = self.client.get('/api/v1.0/')
......
38 38
        self.assertEqual(response.status_code, 200)
39 39
        api_version = json.loads(response.content)['version']
40 40
        self.assertEqual(api_version['status'], 'CURRENT')
41
        self.assertEqual(api_version['wadl'], 'http://docs.rackspacecloud.com/servers/api/v1.0/application.wadl')
42
        self.assertEqual(api_version['docURL'], 'http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20110112.pdf')
41
        self.assertEqual(api_version['wadl'],
42
            'http://docs.rackspacecloud.com/servers/api/v1.0/application.wadl')
43
        self.assertEqual(api_version['docURL'],
44
    'http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20110112.pdf')
43 45
        self.assertEqual(api_version['id'], 'v1.0')
44 46

  
45

  
46
    def testServerList(self):
47
    def test_server_list(self):
47 48
        """ test if the expected list of servers is returned by the API
48
        """        
49
        """
49 50
        response = self.client.get('/api/v1.0/servers')
50 51
        vms_from_api = json.loads(response.content)['servers']
51 52
        vms_from_db = VirtualMachine.objects.filter(deleted=False)
52 53
        self.assertEqual(len(vms_from_api), len(vms_from_db))
53
        self.assertTrue(response.status_code in [200,203])
54
        self.assertTrue(response.status_code in [200, 203])
54 55
        for vm_from_api in vms_from_api:
55 56
            vm_from_db = VirtualMachine.objects.get(id=vm_from_api['id'])
56 57
            self.assertEqual(vm_from_api['id'], vm_from_db.id)
57 58
            self.assertEqual(vm_from_api['name'], vm_from_db.name)
58 59

  
59

  
60
    def testServerDetails(self):
60
    def test_server_details(self):
61 61
        """ test if the expected server is returned by the API
62
        """        
63
        response = self.client.get('/api/v1.0/servers/' + str(self.test_server_id))
62
        """
63
        response = self.client.get('/api/v1.0/servers/' +
64
                                   str(self.test_server_id))
64 65
        vm_from_api = json.loads(response.content)['server']
65 66
        vm_from_db = VirtualMachine.objects.get(id=self.test_server_id)
66 67
        self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id)
......
69 70
        self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id)
70 71
        self.assertEqual(vm_from_api['name'], vm_from_db.name)
71 72
        self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)
72
        self.assertTrue(response.status_code in [200,203])
73
        self.assertTrue(response.status_code in [200, 203])
73 74

  
74

  
75
    def testServersDetails(self):
75
    def test_servers_details(self):
76 76
        """ test if the servers details are returned by the API
77 77
        """
78
        response = self.client.get('/api/v1.0/servers/detail')     
78
        response = self.client.get('/api/v1.0/servers/detail')
79 79
        vms_from_db = VirtualMachine.objects.filter(deleted=False)
80 80
        id_list = [vm.id for vm in vms_from_db]
81 81
        number = 0
......
97 97
            self.assertEqual(vm_from_api['id'], vm_from_db.id)
98 98
            self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id)
99 99
            self.assertEqual(vm_from_api['name'], vm_from_db.name)
100
            self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)            
101
        self.assertTrue(response.status_code in [200,203])
102

  
100
            self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)
101
        self.assertTrue(response.status_code in [200, 203])
103 102

  
104
    def testWrongServer(self):
105
        """ test if a non existent server is asked, if a 404 itemNotFound returned
103
    def test_wrong_server(self):
104
        """ test 404 response if server does not exist
106 105
        """
107
        response = self.client.get('/api/v1.0/servers/' + str(self.test_wrong_server_id))
106
        response = self.client.get('/api/v1.0/servers/' +
107
                                   str(self.test_wrong_server_id))
108 108
        self.assertEqual(response.status_code, 404)
109 109

  
110

  
111
    def testCreateServerEmpty(self):
110
    def test_create_server_empty(self):
112 111
        """ test if the create server call returns a 400 badRequest if no
113 112
            attributes are specified
114 113
        """
115
        response = self.client.post('/api/v1.0/servers',{})
114
        response = self.client.post('/api/v1.0/servers', {})
116 115
        self.assertEqual(response.status_code, 400)
117 116

  
118

  
119
    def testCreateServer(self):
117
    def test_create_server(self):
120 118
        """ test if the create server call returns the expected response
121 119
            if a valid request has been speficied
122 120
        """
123 121
        request = {
124 122
                    "server": {
125
                        "name"          : "new-server-test",
126
                        "imageRef"       : 1,
127
                        "flavorRef"      : 1,
128
                        "metadata"      : {
123
                        "name": "new-server-test",
124
                        "imageRef": 1,
125
                        "flavorRef": 1,
126
                        "metadata": {
129 127
                            "My Server Name": "Apache1"
130 128
                        },
131
                        "personality"   : []
129
                        "personality": []
132 130
                    }
133 131
        }
134
        response = self.client.post('/api/v1.0/servers', 
135
                                    json.dumps(request), 
132
        response = self.client.post('/api/v1.0/servers',
133
                                    json.dumps(request),
136 134
                                    content_type='application/json')
137 135
        self.assertEqual(response.status_code, 202)
138
        #TODO: check response.content      
139
        #TODO: check create server with wrong options (eg flavor that not exist)
140
    
136
        #TODO: check response.content
137
        #TODO: check create server with wrong options (eg non existing flavor)
141 138

  
142
    def testServerPolling(self):
139
    def test_server_polling(self):
143 140
        """ test if the server polling works as expected
144 141
        """
145 142
        response = self.client.get('/api/v1.0/servers/detail')
146 143
        vms_from_api_initial = json.loads(response.content)['servers']
147 144
        then = datetime.datetime.now().isoformat().split('.')[0]
148
        
145

  
149 146
        #isoformat also gives miliseconds that are not needed
150
        response = self.client.get('/api/v1.0/servers/detail?changes-since=%s' % then)
147
        response = self.client.get('/api/v1.0/servers/detail?changes-since=%s'
148
                                   % then)
151 149
        self.assertEqual(len(response.content), 0)
152 150
        #no changes were made
153 151

  
154 152
        #now create a machine. Then check if it is on the list
155 153
        request = {
156 154
                    "server": {
157
                        "name"          : "new-server-test",
158
                        "imageRef"       : 1,
159
                        "flavorRef"      : 1,
160
                        "metadata"      : {
155
                        "name": "new-server-test",
156
                        "imageRef": 1,
157
                        "flavorRef": 1,
158
                        "metadata": {
161 159
                            "My Server Name": "Apache1"
162 160
                        },
163
                        "personality"   : []
161
                        "personality": []
164 162
                    }
165 163
        }
166
        response = self.client.post('/api/v1.0/servers', 
167
                                    json.dumps(request), 
164
        response = self.client.post('/api/v1.0/servers',
165
                                    json.dumps(request),
168 166
                                    content_type='application/json')
169 167
        self.assertEqual(response.status_code, 202)
170 168

  
171
        response = self.client.get('/api/v1.0/servers/detail?changes-since=%s' % then)        
169
        response = self.client.get('/api/v1.0/servers/detail?changes-since=%s'
170
                                   % then)
172 171
        vms_from_api_after = json.loads(response.content)['servers']
172
        #make sure the newly created server is included on the updated list
173 173
        self.assertEqual(len(vms_from_api_after), 1)
174
        #make sure the newly created server is included on the updated list 
175

  
176 174

  
177
    def testRebootServer(self):
175
    def test_reboot_server(self):
178 176
        """ test if the specified server is rebooted
179 177
        """
180 178
        request = {
181 179
            "reboot": '{"type" : "HARD"}'
182 180
            }
183
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action', 
181
        response = self.client.post('/api/v1.0/servers/' +
182
                                    str(self.test_server_id) + '/action',
184 183
                                    json.dumps(request),
185
                                    content_type='application/json')  
184
                                    content_type='application/json')
186 185
        self.assertEqual(response.status_code, 202)
187 186
        #server id that does not exist
188
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action', 
189
                                   json.dumps(request), 
187
        response = self.client.post('/api/v1.0/servers/' +
188
                                    str(self.test_wrong_server_id) + '/action',
189
                                   json.dumps(request),
190 190
                                   content_type='application/json')
191 191
        self.assertEqual(response.status_code, 404)
192 192

  
193

  
194
    def testShutdownServer(self):
193
    def test_shutdown_server(self):
195 194
        """ test if the specified server is shutdown
196 195
        """
197 196
        request = {
198
            "shutdown": {"timeout" : "5"}
197
            "shutdown": {"timeout": "5"}
199 198
            }
200
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action',
201
                                    json.dumps(request), 
202
                                    content_type='application/json')  
199
        response = self.client.post('/api/v1.0/servers/' +
200
                                    str(self.test_server_id) + '/action',
201
                                    json.dumps(request),
202
                                    content_type='application/json')
203 203
        self.assertEqual(response.status_code, 202)
204 204
        #server id that does not exist
205
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action',
206
                                    json.dumps(request), 
205
        response = self.client.post('/api/v1.0/servers/' +
206
                                    str(self.test_wrong_server_id) + '/action',
207
                                    json.dumps(request),
207 208
                                    content_type='application/json')
208 209
        self.assertEqual(response.status_code, 404)
209 210

  
210

  
211
    def testStartServer(self):
211
    def test_start_server(self):
212 212
        """ test if the specified server is started
213 213
        """
214 214
        request = {
215
            "start": {"type" : "NORMAL"}
215
            "start": {"type": "NORMAL"}
216 216
            }
217
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action', 
217
        response = self.client.post('/api/v1.0/servers/' +
218
                                    str(self.test_server_id) + '/action',
218 219
                                    json.dumps(request),
219
                                    content_type='application/json')  
220
                                    content_type='application/json')
220 221
        self.assertEqual(response.status_code, 202)
221 222
        #server id that does not exist
222
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action', 
223
                                    json.dumps(request), 
223
        response = self.client.post('/api/v1.0/servers/' +
224
                                    str(self.test_wrong_server_id) + '/action',
225
                                    json.dumps(request),
224 226
                                    content_type='application/json')
225 227
        self.assertEqual(response.status_code, 404)
226 228

  
227
    def testDeleteServer(self):
229
    def test_delete_server(self):
228 230
        """ test if the specified server is deleted
229 231
        """
230
        response = self.client.delete('/api/v1.0/servers/' + str(self.test_server_id))
232
        response = self.client.delete('/api/v1.0/servers/' +
233
                                      str(self.test_server_id))
231 234
        self.assertEqual(response.status_code, 202)
232
        #server id that does not exist      
233
        response = self.client.delete('/api/v1.0/servers/' + str(self.test_wrong_server_id))  
235
        #server id that does not exist
236
        response = self.client.delete('/api/v1.0/servers/' +
237
                                      str(self.test_wrong_server_id))
234 238
        self.assertEqual(response.status_code, 404)
235 239

  
236

  
237
    def testFlavorList(self):
240
    def test_flavor_list(self):
238 241
        """ test if the expected list of flavors is returned by the API
239
        """        
242
        """
240 243
        response = self.client.get('/api/v1.0/flavors')
241 244
        flavors_from_api = json.loads(response.content)['flavors']
242 245
        flavors_from_db = Flavor.objects.all()
243 246
        self.assertEqual(len(flavors_from_api), len(flavors_from_db))
244
        self.assertTrue(response.status_code in [200,203])
247
        self.assertTrue(response.status_code in [200, 203])
245 248
        for flavor_from_api in flavors_from_api:
246 249
            flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
247 250
            self.assertEqual(flavor_from_api['id'], flavor_from_db.id)
248 251
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
249 252

  
250

  
251
    def testFlavorsDetails(self):
253
    def test_flavors_details(self):
252 254
        """ test if the flavors details are returned by the API
253 255
        """
254 256
        response = self.client.get('/api/v1.0/flavors/detail')
255 257
        flavors_from_db = Flavor.objects.all()
256 258
        flavors_from_api = json.loads(response.content)['flavors']
257
        
259

  
258 260
        # Assert that all flavors in the db appear inthe API call result
259 261
        for i in range(0, len(flavors_from_db)):
260 262
            flavor_from_api = flavors_from_api[i]
......
265 267
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
266 268
            self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
267 269

  
268
        # Assert that all flavors that appear in the API call result are also in the db             
270
        # Assert that all flavors returned by the API also exist in the db
269 271
        for flavor_from_api in flavors_from_api:
270 272
            flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
271 273
            self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu)
......
273 275
            self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk)
274 276
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
275 277
            self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
276
        
277
        # Check if we have the right status_code
278
        self.assertTrue(response.status_code in [200,203])
279 278

  
279
        # Check if we have the right status_code
280
        self.assertTrue(response.status_code in [200, 203])
280 281

  
281
    def testFlavorDetails(self):
282
    def test_flavor_details(self):
282 283
        """ test if the expected flavor is returned by the API
283 284
        """
284
        response = self.client.get('/api/v1.0/flavors/' + str(self.test_flavor_id))
285
        response = self.client.get('/api/v1.0/flavors/' +
286
                                   str(self.test_flavor_id))
285 287
        flavor_from_api = json.loads(response.content)['flavor']
286 288
        flavor_from_db = Flavor.objects.get(id=self.test_flavor_id)
287 289
        self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu)
......
289 291
        self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk)
290 292
        self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
291 293
        self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
292
        self.assertTrue(response.status_code in [200,203])
293

  
294
        self.assertTrue(response.status_code in [200, 203])
294 295

  
295
    def testWrongFlavor(self):
296
        """ test if a non existent flavor is asked, if a 404 itemNotFound returned
296
    def test_wrong_flavor(self):
297
        """ test 404 result when requesting a flavor that does not exist
297 298
        """
298
        response = self.client.get('/api/v1.0/flavors/' + str(self.test_wrong_flavor_id))
299
        response = self.client.get('/api/v1.0/flavors/' +
300
                                   str(self.test_wrong_flavor_id))
299 301
        self.assertTrue(response.status_code in [404, 503])
300 302

  
301
    def testImageList(self):
303
    def test_image_list(self):
302 304
        """ test if the expected list of images is returned by the API
303
        """        
305
        """
304 306
        response = self.client.get('/api/v1.0/images')
305 307
        images_from_api = json.loads(response.content)['images']
306 308
        images_from_db = Image.objects.all()
307 309
        self.assertEqual(len(images_from_api), len(images_from_db))
308
        self.assertTrue(response.status_code in [200,203])
310
        self.assertTrue(response.status_code in [200, 203])
309 311
        for image_from_api in images_from_api:
310 312
            image_from_db = Image.objects.get(id=image_from_api['id'])
311 313
            self.assertEqual(image_from_api['id'], image_from_db.id)
312 314
            self.assertEqual(image_from_api['name'], image_from_db.name)
313 315

  
314

  
315
    def testImageDetails(self):
316
    def test_image_details(self):
316 317
        """ test if the expected image is returned by the API
317 318
        """
318
        response = self.client.get('/api/v1.0/images/' + str(self.test_image_id))
319
        response = self.client.get('/api/v1.0/images/' +
320
                                   str(self.test_image_id))
319 321
        image_from_api = json.loads(response.content)['image']
320 322
        image_from_db = Image.objects.get(id=self.test_image_id)
321 323
        self.assertEqual(image_from_api['name'], image_from_db.name)
322 324
        self.assertEqual(image_from_api['id'], image_from_db.id)
323
        self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
325
        self.assertEqual(image_from_api['serverId'],
326
                        image_from_db.sourcevm and image_from_db.sourcevm.id or
327
                        "")
324 328
        self.assertEqual(image_from_api['size'], image_from_db.size)
325 329
        self.assertEqual(image_from_api['status'], image_from_db.state)
326
        self.assertEqual(image_from_api['metadata']['meta']['key']['description'], image_from_db.description)
327
        self.assertTrue(response.status_code in [200,203])
328

  
330
        self.assertEqual(image_from_api['metadata']['meta']['key']
331
                         ['description'],
332
                         image_from_db.description)
333
        self.assertTrue(response.status_code in [200, 203])
329 334

  
330
    def testImagesDetails(self):
335
    def test_images_details(self):
331 336
        """ test if the images details are returned by the API
332 337
        """
333 338
        response = self.client.get('/api/v1.0/images/detail')
......
338 343
            image_from_api = images_from_api[i]
339 344
            self.assertEqual(image_from_api['name'], image_from_db.name)
340 345
            self.assertEqual(image_from_api['id'], image_from_db.id)
341
            self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
346
            self.assertEqual(image_from_api['serverId'],
347
                             image_from_db.sourcevm and
348
                             image_from_db.sourcevm.id or "")
342 349
            self.assertEqual(image_from_api['size'], image_from_db.size)
343 350
            self.assertEqual(image_from_api['status'], image_from_db.state)
344
            self.assertEqual(image_from_api['metadata']['meta']['key']['description'], image_from_db.description)
351
            self.assertEqual(image_from_api['metadata']['meta']['key']
352
                             ['description'],
353
                             image_from_db.description)
345 354

  
346 355
        for image_from_api in images_from_api:
347 356
            image_from_db = Image.objects.get(id=image_from_api['id'])
348 357
            self.assertEqual(image_from_api['name'], image_from_db.name)
349 358
            self.assertEqual(image_from_api['id'], image_from_db.id)
350
            self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
359
            self.assertEqual(image_from_api['serverId'],
360
                             image_from_db.sourcevm and
361
                             image_from_db.sourcevm.id or "")
351 362
            self.assertEqual(image_from_api['size'], image_from_db.size)
352 363
            self.assertEqual(image_from_api['status'], image_from_db.state)
353
            self.assertEqual(image_from_api['metadata']['meta']['key']['description'], image_from_db.description)
354
            
355
        self.assertTrue(response.status_code in [200,203])
364
            self.assertEqual(image_from_api['metadata']['meta']['key']
365
                             ['description'],
366
                             image_from_db.description)
356 367

  
368
        self.assertTrue(response.status_code in [200, 203])
357 369

  
358
    def testWrongImage(self):
359
        """ test if a non existent image is asked, if a 404 itemNotFound returned
370
    def test_wrong_image(self):
371
        """ test 404 result if a non existent image is requested
360 372
        """
361
        response = self.client.get('/api/v1.0/images/' + str(self.test_wrong_image_id))
373
        response = self.client.get('/api/v1.0/images/' +
374
                                   str(self.test_wrong_image_id))
362 375
        self.assertEqual(response.status_code, 404)
363 376

  
364

  
365
    def testServerMetadata(self):
377
    def test_server_metadata(self):
366 378
        """ test server's metadata (add, edit)
367 379
        """
368 380
        request = {
369
            "metadata": {"metadata_key" : "name", "metadata_value" : "a fancy name"}
381
            "metadata": {
382
                "metadata_key": "name",
383
                "metadata_value": "a fancy name"
384
                }
370 385
            }
371
        response = self.client.put('/api/v1.0/servers' + str(self.test_server_id), 
386
        response = self.client.put('/api/v1.0/servers' +
387
                                    str(self.test_server_id),
372 388
                                    json.dumps(request),
373
                                    content_type='application/json')  
389
                                    content_type='application/json')
374 390
        self.assertEqual(response.status_code, 404)
375 391
        #TODO: not working atm, due to problem with django piston and PUT
376 392

  
377
    def testVMgroupList(self):
393
    def test_vm_group_list(self):
378 394
        """ test if the expected list of groups is returned by the API
379
        """        
395
        """
380 396
        response = self.client.get('/api/v1.0/groups')
381 397
        groups_from_api = json.loads(response.content)['groups']
382 398
        groups_from_db = VirtualMachineGroup.objects.all()
383 399
        self.assertEqual(len(groups_from_api), len(groups_from_db))
384
        self.assertTrue(response.status_code in [200,203])
400
        self.assertTrue(response.status_code in [200, 203])
385 401
        for group_from_api in groups_from_api:
386
            group_from_db = VirtualMachineGroup.objects.get(id=group_from_api['id'])
402
            group_from_db = VirtualMachineGroup.objects.get(
403
                id=group_from_api['id']
404
                )
387 405
            self.assertEqual(group_from_api['id'], group_from_db.id)
388 406
            self.assertEqual(group_from_api['name'], group_from_db.name)
389 407

  
390
    def testVMgroupDetails(self):
408
    def test_vm_group_details(self):
391 409
        """ test if the expected virtual machine group is returned by the API
392 410
        """
393
        response = self.client.get('/api/v1.0/groups/' + str(self.test_group_id))
411
        response = self.client.get('/api/v1.0/groups/' +
412
                                   str(self.test_group_id))
394 413
        group_from_api = json.loads(response.content)['group']
395 414
        group_from_db = VirtualMachineGroup.objects.get(id=self.test_group_id)
396 415
        self.assertEqual(group_from_api['name'], group_from_db.name)
397 416
        self.assertEqual(group_from_api['id'], group_from_db.id)
398
        self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])
399
        self.assertTrue(response.status_code in [200,203])
417
        self.assertEqual(group_from_api['server_id'],
418
                         [machine.id
419
                          for machine in group_from_db.machines.all()])
420
        self.assertTrue(response.status_code in [200, 203])
400 421

  
401
    def testWrongVMgroup(self):
402
        """ test if a non existent VMgroup is asked, if a 404 itemNotFound returned
422
    def test_wrong_vm_group(self):
423
        """ test 404 result if a non existent VM group is requested
403 424
        """
404
        response = self.client.get('/api/v1.0/groups/' + str(self.test_wrong_group_id))
425
        response = self.client.get('/api/v1.0/groups/' +
426
                                   str(self.test_wrong_group_id))
405 427
        self.assertEqual(response.status_code, 404)
406 428

  
407
    def testgroupsDetails(self):
429
    def test_groups_details(self):
408 430
        """ test if the groups details are returned by the API
409 431
        """
410 432
        response = self.client.get('/api/v1.0/groups/detail')
411 433
        groups_from_api = json.loads(response.content)['groups']
412 434
        groups_from_db = VirtualMachineGroup.objects.all()
413 435
        for i in range(0, len(groups_from_db)):
414
            group_from_db = VirtualMachineGroup.objects.get(id=groups_from_db[i].id)
436
            group_from_db = VirtualMachineGroup.objects.get(
437
                id=groups_from_db[i].id)
415 438
            group_from_api = groups_from_api[i]
416 439
            self.assertEqual(group_from_api['name'], group_from_db.name)
417 440
            self.assertEqual(group_from_api['id'], group_from_db.id)
418
            self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])
441
            self.assertEqual(group_from_api['server_id'],
442
                             [machine.id
443
                              for machine in group_from_db.machines.all()])
419 444
        for group_from_api in groups_from_api:
420
            group_from_db = VirtualMachineGroup.objects.get(id=group_from_api['id'])
445
            group_from_db = VirtualMachineGroup.objects.get(
446
                id=group_from_api['id'])
421 447
            self.assertEqual(group_from_api['name'], group_from_db.name)
422 448
            self.assertEqual(group_from_api['id'], group_from_db.id)
423
            self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])            
424
        self.assertTrue(response.status_code in [200,203])
425

  
449
            self.assertEqual(group_from_api['server_id'],
450
                             [machine.id
451
                              for machine in group_from_db.machines.all()])
452
        self.assertTrue(response.status_code in [200, 203])

Also available in: Unified diff