Statistics
| Branch: | Tag: | Revision:

root / api / tests.py @ b9a77976

History | View | Annotate | Download (18.4 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 894f6b7e Dimitris Moraitis
from django.test import TestCase
10 894f6b7e Dimitris Moraitis
from django.test.client import Client
11 7de0c985 Dimitris Moraitis
import simplejson as json
12 a8acbbac Markos Gogoulos
from synnefo.db.models import VirtualMachine, Flavor, Image, VirtualMachineGroup
13 7e2f9d4b Giorgos Verigakis
from synnefo.api.tests_redux import APIReduxTestCase
14 7e2f9d4b Giorgos Verigakis
15 894f6b7e Dimitris Moraitis
16 894f6b7e Dimitris Moraitis
class APITestCase(TestCase):
17 6781c0d0 Dimitris Moraitis
    fixtures = [ 'api_test_data' ]
18 d2e5f1d1 Markos Gogoulos
    test_server_id = 1001
19 d2e5f1d1 Markos Gogoulos
    test_image_id = 1
20 d2e5f1d1 Markos Gogoulos
    test_flavor_id = 1
21 a8acbbac Markos Gogoulos
    test_group_id = 1
22 d2e5f1d1 Markos Gogoulos
    test_wrong_server_id = 99999999
23 d2e5f1d1 Markos Gogoulos
    test_wrong_image_id = 99999999
24 d2e5f1d1 Markos Gogoulos
    test_wrong_flavor_id = 99999999
25 a8acbbac Markos Gogoulos
    test_wrong_group_id = 99999999
26 d2e5f1d1 Markos Gogoulos
    #make the testing with these id's
27 d2e5f1d1 Markos Gogoulos
28 6781c0d0 Dimitris Moraitis
29 894f6b7e Dimitris Moraitis
    def setUp(self):
30 7de0c985 Dimitris Moraitis
        self.client = Client()
31 894f6b7e Dimitris Moraitis
32 894f6b7e Dimitris Moraitis
    def testAPIVersion(self):
33 285a1fa8 Dimitris Moraitis
        """ check rackspace cloud servers API version
34 6781c0d0 Dimitris Moraitis
        """
35 7de0c985 Dimitris Moraitis
        response = self.client.get('/api/v1.0/')
36 894f6b7e Dimitris Moraitis
        # Check that the response is 200 OK.
37 894f6b7e Dimitris Moraitis
        self.assertEqual(response.status_code, 200)
38 54c30633 Markos Gogoulos
        api_version = json.loads(response.content)['version']
39 54c30633 Markos Gogoulos
        self.assertEqual(api_version['status'], 'CURRENT')
40 54c30633 Markos Gogoulos
        self.assertEqual(api_version['wadl'], 'http://docs.rackspacecloud.com/servers/api/v1.0/application.wadl')
41 54c30633 Markos Gogoulos
        self.assertEqual(api_version['docURL'], 'http://docs.rackspacecloud.com/servers/api/v1.0/cs-devguide-20110112.pdf')
42 54c30633 Markos Gogoulos
        self.assertEqual(api_version['id'], 'v1.0')
43 54c30633 Markos Gogoulos
44 54c30633 Markos Gogoulos
45 6781c0d0 Dimitris Moraitis
    def testServerList(self):
46 6781c0d0 Dimitris Moraitis
        """ test if the expected list of servers is returned by the API
47 6781c0d0 Dimitris Moraitis
        """        
48 7de0c985 Dimitris Moraitis
        response = self.client.get('/api/v1.0/servers')
49 6781c0d0 Dimitris Moraitis
        vms_from_api = json.loads(response.content)['servers']
50 668c1361 Markos Gogoulos
        vms_from_db = VirtualMachine.objects.filter(deleted=False)
51 6781c0d0 Dimitris Moraitis
        self.assertEqual(len(vms_from_api), len(vms_from_db))
52 7de0c985 Dimitris Moraitis
        self.assertTrue(response.status_code in [200,203])
53 54c30633 Markos Gogoulos
        for vm_from_api in vms_from_api:
54 54c30633 Markos Gogoulos
            vm_from_db = VirtualMachine.objects.get(id=vm_from_api['id'])
55 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['id'], vm_from_db.id)
56 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['name'], vm_from_db.name)
57 54c30633 Markos Gogoulos
58 7de0c985 Dimitris Moraitis
59 668c1361 Markos Gogoulos
    def testServerDetails(self):
60 668c1361 Markos Gogoulos
        """ test if the expected server is returned by the API
61 668c1361 Markos Gogoulos
        """        
62 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/servers/' + str(self.test_server_id))
63 668c1361 Markos Gogoulos
        vm_from_api = json.loads(response.content)['server']
64 d2e5f1d1 Markos Gogoulos
        vm_from_db = VirtualMachine.objects.get(id=self.test_server_id)
65 b335768e Markos Gogoulos
        self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id)
66 668c1361 Markos Gogoulos
        self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid)
67 668c1361 Markos Gogoulos
        self.assertEqual(vm_from_api['id'], vm_from_db.id)
68 b335768e Markos Gogoulos
        self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id)
69 668c1361 Markos Gogoulos
        self.assertEqual(vm_from_api['name'], vm_from_db.name)
70 668c1361 Markos Gogoulos
        self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)
71 668c1361 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
72 668c1361 Markos Gogoulos
73 54c30633 Markos Gogoulos
74 685ab2b6 Markos Gogoulos
    def testServersDetails(self):
75 685ab2b6 Markos Gogoulos
        """ test if the servers details are returned by the API
76 685ab2b6 Markos Gogoulos
        """
77 685ab2b6 Markos Gogoulos
        response = self.client.get('/api/v1.0/servers/detail')     
78 54c30633 Markos Gogoulos
        vms_from_db = VirtualMachine.objects.filter(deleted=False)
79 54c30633 Markos Gogoulos
        id_list = [vm.id for vm in vms_from_db]
80 685ab2b6 Markos Gogoulos
        number = 0
81 685ab2b6 Markos Gogoulos
        for vm_id in id_list:
82 685ab2b6 Markos Gogoulos
            vm_from_api = json.loads(response.content)['servers'][number]
83 685ab2b6 Markos Gogoulos
            vm_from_db = VirtualMachine.objects.get(id=vm_id)
84 b335768e Markos Gogoulos
            self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id)
85 685ab2b6 Markos Gogoulos
            self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid)
86 685ab2b6 Markos Gogoulos
            self.assertEqual(vm_from_api['id'], vm_from_db.id)
87 b335768e Markos Gogoulos
            self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id)
88 685ab2b6 Markos Gogoulos
            self.assertEqual(vm_from_api['name'], vm_from_db.name)
89 685ab2b6 Markos Gogoulos
            self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)
90 685ab2b6 Markos Gogoulos
            number += 1
91 54c30633 Markos Gogoulos
        vms_from_api = json.loads(response.content)['servers']
92 54c30633 Markos Gogoulos
        for vm_from_api in vms_from_api:
93 54c30633 Markos Gogoulos
            vm_from_db = VirtualMachine.objects.get(id=vm_from_api['id'])
94 b335768e Markos Gogoulos
            self.assertEqual(vm_from_api['flavorRef'], vm_from_db.flavor.id)
95 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['hostId'], vm_from_db.hostid)
96 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['id'], vm_from_db.id)
97 b335768e Markos Gogoulos
            self.assertEqual(vm_from_api['imageRef'], vm_from_db.flavor.id)
98 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['name'], vm_from_db.name)
99 54c30633 Markos Gogoulos
            self.assertEqual(vm_from_api['status'], vm_from_db.rsapi_state)            
100 685ab2b6 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
101 685ab2b6 Markos Gogoulos
102 54c30633 Markos Gogoulos
103 685ab2b6 Markos Gogoulos
    def testWrongServer(self):
104 685ab2b6 Markos Gogoulos
        """ test if a non existent server is asked, if a 404 itemNotFound returned
105 685ab2b6 Markos Gogoulos
        """
106 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/servers/' + str(self.test_wrong_server_id))
107 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
108 685ab2b6 Markos Gogoulos
109 54c30633 Markos Gogoulos
110 7de0c985 Dimitris Moraitis
    def testCreateServerEmpty(self):
111 7de0c985 Dimitris Moraitis
        """ test if the create server call returns a 400 badRequest if no
112 7de0c985 Dimitris Moraitis
            attributes are specified
113 7de0c985 Dimitris Moraitis
        """
114 7de0c985 Dimitris Moraitis
        response = self.client.post('/api/v1.0/servers',{})
115 7de0c985 Dimitris Moraitis
        self.assertEqual(response.status_code, 400)
116 54c30633 Markos Gogoulos
117 54c30633 Markos Gogoulos
118 7de0c985 Dimitris Moraitis
    def testCreateServer(self):
119 685ab2b6 Markos Gogoulos
        """ test if the create server call returns the expected response
120 685ab2b6 Markos Gogoulos
            if a valid request has been speficied
121 7de0c985 Dimitris Moraitis
        """
122 7de0c985 Dimitris Moraitis
        request = {
123 285a1fa8 Dimitris Moraitis
                    "server": {
124 285a1fa8 Dimitris Moraitis
                        "name"          : "new-server-test",
125 b335768e Markos Gogoulos
                        "imageRef"       : 1,
126 b335768e Markos Gogoulos
                        "flavorRef"      : 1,
127 285a1fa8 Dimitris Moraitis
                        "metadata"      : {
128 285a1fa8 Dimitris Moraitis
                            "My Server Name": "Apache1"
129 285a1fa8 Dimitris Moraitis
                        },
130 285a1fa8 Dimitris Moraitis
                        "personality"   : []
131 285a1fa8 Dimitris Moraitis
                    }
132 7de0c985 Dimitris Moraitis
        }
133 685ab2b6 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers', 
134 685ab2b6 Markos Gogoulos
                                    json.dumps(request), 
135 685ab2b6 Markos Gogoulos
                                    content_type='application/json')
136 285a1fa8 Dimitris Moraitis
        self.assertEqual(response.status_code, 202)
137 668c1361 Markos Gogoulos
        #TODO: check response.content      
138 668c1361 Markos Gogoulos
        #TODO: check create server with wrong options (eg flavor that not exist)
139 668c1361 Markos Gogoulos
    
140 668c1361 Markos Gogoulos
141 668c1361 Markos Gogoulos
    def testRebootServer(self):
142 668c1361 Markos Gogoulos
        """ test if the specified server is rebooted
143 668c1361 Markos Gogoulos
        """
144 685ab2b6 Markos Gogoulos
        request = {
145 685ab2b6 Markos Gogoulos
            "reboot": '{"type" : "HARD"}'
146 685ab2b6 Markos Gogoulos
            }
147 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action', 
148 685ab2b6 Markos Gogoulos
                                    json.dumps(request),
149 685ab2b6 Markos Gogoulos
                                    content_type='application/json')  
150 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 202)
151 685ab2b6 Markos Gogoulos
        #server id that does not exist
152 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action', 
153 685ab2b6 Markos Gogoulos
                                   json.dumps(request), 
154 685ab2b6 Markos Gogoulos
                                   content_type='application/json')
155 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
156 668c1361 Markos Gogoulos
157 668c1361 Markos Gogoulos
158 668c1361 Markos Gogoulos
    def testShutdownServer(self):
159 668c1361 Markos Gogoulos
        """ test if the specified server is shutdown
160 668c1361 Markos Gogoulos
        """
161 685ab2b6 Markos Gogoulos
        request = {
162 685ab2b6 Markos Gogoulos
            "shutdown": {"timeout" : "5"}
163 685ab2b6 Markos Gogoulos
            }
164 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action',
165 685ab2b6 Markos Gogoulos
                                    json.dumps(request), 
166 685ab2b6 Markos Gogoulos
                                    content_type='application/json')  
167 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 202)
168 685ab2b6 Markos Gogoulos
        #server id that does not exist
169 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action',
170 685ab2b6 Markos Gogoulos
                                    json.dumps(request), 
171 685ab2b6 Markos Gogoulos
                                    content_type='application/json')
172 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
173 668c1361 Markos Gogoulos
174 668c1361 Markos Gogoulos
175 668c1361 Markos Gogoulos
    def testStartServer(self):
176 668c1361 Markos Gogoulos
        """ test if the specified server is started
177 668c1361 Markos Gogoulos
        """
178 685ab2b6 Markos Gogoulos
        request = {
179 685ab2b6 Markos Gogoulos
            "start": {"type" : "NORMAL"}
180 685ab2b6 Markos Gogoulos
            }
181 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_server_id) + '/action', 
182 685ab2b6 Markos Gogoulos
                                    json.dumps(request),
183 685ab2b6 Markos Gogoulos
                                    content_type='application/json')  
184 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 202)
185 685ab2b6 Markos Gogoulos
        #server id that does not exist
186 d2e5f1d1 Markos Gogoulos
        response = self.client.post('/api/v1.0/servers/' + str(self.test_wrong_server_id) + '/action', 
187 685ab2b6 Markos Gogoulos
                                    json.dumps(request), 
188 685ab2b6 Markos Gogoulos
                                    content_type='application/json')
189 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
190 668c1361 Markos Gogoulos
191 668c1361 Markos Gogoulos
    def testDeleteServer(self):
192 668c1361 Markos Gogoulos
        """ test if the specified server is deleted
193 668c1361 Markos Gogoulos
        """
194 d2e5f1d1 Markos Gogoulos
        response = self.client.delete('/api/v1.0/servers/' + str(self.test_server_id))
195 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 202)
196 685ab2b6 Markos Gogoulos
        #server id that does not exist      
197 d2e5f1d1 Markos Gogoulos
        response = self.client.delete('/api/v1.0/servers/' + str(self.test_wrong_server_id))  
198 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
199 668c1361 Markos Gogoulos
200 668c1361 Markos Gogoulos
201 668c1361 Markos Gogoulos
    def testFlavorList(self):
202 668c1361 Markos Gogoulos
        """ test if the expected list of flavors is returned by the API
203 668c1361 Markos Gogoulos
        """        
204 668c1361 Markos Gogoulos
        response = self.client.get('/api/v1.0/flavors')
205 668c1361 Markos Gogoulos
        flavors_from_api = json.loads(response.content)['flavors']
206 668c1361 Markos Gogoulos
        flavors_from_db = Flavor.objects.all()
207 668c1361 Markos Gogoulos
        self.assertEqual(len(flavors_from_api), len(flavors_from_db))
208 668c1361 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
209 54c30633 Markos Gogoulos
        for flavor_from_api in flavors_from_api:
210 54c30633 Markos Gogoulos
            flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
211 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['id'], flavor_from_db.id)
212 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
213 668c1361 Markos Gogoulos
214 668c1361 Markos Gogoulos
215 685ab2b6 Markos Gogoulos
    def testFlavorsDetails(self):
216 685ab2b6 Markos Gogoulos
        """ test if the flavors details are returned by the API
217 668c1361 Markos Gogoulos
        """
218 f3af8b40 Dimitris Moraitis
        response = self.client.get('/api/v1.0/flavors/detail')
219 f3af8b40 Dimitris Moraitis
        flavors_from_db = Flavor.objects.all()
220 f3af8b40 Dimitris Moraitis
        flavors_from_api = json.loads(response.content)['flavors']
221 f3af8b40 Dimitris Moraitis
        
222 f3af8b40 Dimitris Moraitis
        # Assert that all flavors in the db appear inthe API call result
223 f3af8b40 Dimitris Moraitis
        for i in range(0, len(flavors_from_db)):
224 f3af8b40 Dimitris Moraitis
            flavor_from_api = flavors_from_api[i]
225 f3af8b40 Dimitris Moraitis
            flavor_from_db = Flavor.objects.get(id=flavors_from_db[i].id)
226 685ab2b6 Markos Gogoulos
            self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu)
227 685ab2b6 Markos Gogoulos
            self.assertEqual(flavor_from_api['id'], flavor_from_db.id)
228 685ab2b6 Markos Gogoulos
            self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk)
229 685ab2b6 Markos Gogoulos
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
230 685ab2b6 Markos Gogoulos
            self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
231 f3af8b40 Dimitris Moraitis
232 f3af8b40 Dimitris Moraitis
        # Assert that all flavors that appear in the API call result are also in the db             
233 54c30633 Markos Gogoulos
        for flavor_from_api in flavors_from_api:
234 54c30633 Markos Gogoulos
            flavor_from_db = Flavor.objects.get(id=flavor_from_api['id'])
235 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu)
236 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['id'], flavor_from_db.id)
237 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk)
238 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
239 54c30633 Markos Gogoulos
            self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
240 f3af8b40 Dimitris Moraitis
        
241 f3af8b40 Dimitris Moraitis
        # Check if we have the right status_code
242 685ab2b6 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
243 7de0c985 Dimitris Moraitis
244 7de0c985 Dimitris Moraitis
245 685ab2b6 Markos Gogoulos
    def testFlavorDetails(self):
246 685ab2b6 Markos Gogoulos
        """ test if the expected flavor is returned by the API
247 668c1361 Markos Gogoulos
        """
248 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/flavors/' + str(self.test_flavor_id))
249 668c1361 Markos Gogoulos
        flavor_from_api = json.loads(response.content)['flavor']
250 d2e5f1d1 Markos Gogoulos
        flavor_from_db = Flavor.objects.get(id=self.test_flavor_id)
251 668c1361 Markos Gogoulos
        self.assertEqual(flavor_from_api['cpu'], flavor_from_db.cpu)
252 668c1361 Markos Gogoulos
        self.assertEqual(flavor_from_api['id'], flavor_from_db.id)
253 668c1361 Markos Gogoulos
        self.assertEqual(flavor_from_api['disk'], flavor_from_db.disk)
254 668c1361 Markos Gogoulos
        self.assertEqual(flavor_from_api['name'], flavor_from_db.name)
255 668c1361 Markos Gogoulos
        self.assertEqual(flavor_from_api['ram'], flavor_from_db.ram)
256 668c1361 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
257 668c1361 Markos Gogoulos
258 668c1361 Markos Gogoulos
259 668c1361 Markos Gogoulos
    def testWrongFlavor(self):
260 668c1361 Markos Gogoulos
        """ test if a non existent flavor is asked, if a 404 itemNotFound returned
261 668c1361 Markos Gogoulos
        """
262 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/flavors/' + str(self.test_wrong_flavor_id))
263 ffffd5fe Markos Gogoulos
        self.assertTrue(response.status_code in [404, 503])
264 668c1361 Markos Gogoulos
265 668c1361 Markos Gogoulos
    def testImageList(self):
266 668c1361 Markos Gogoulos
        """ test if the expected list of images is returned by the API
267 668c1361 Markos Gogoulos
        """        
268 668c1361 Markos Gogoulos
        response = self.client.get('/api/v1.0/images')
269 668c1361 Markos Gogoulos
        images_from_api = json.loads(response.content)['images']
270 668c1361 Markos Gogoulos
        images_from_db = Image.objects.all()
271 668c1361 Markos Gogoulos
        self.assertEqual(len(images_from_api), len(images_from_db))
272 668c1361 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
273 54c30633 Markos Gogoulos
        for image_from_api in images_from_api:
274 54c30633 Markos Gogoulos
            image_from_db = Image.objects.get(id=image_from_api['id'])
275 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['id'], image_from_db.id)
276 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['name'], image_from_db.name)
277 668c1361 Markos Gogoulos
278 668c1361 Markos Gogoulos
279 668c1361 Markos Gogoulos
    def testImageDetails(self):
280 668c1361 Markos Gogoulos
        """ test if the expected image is returned by the API
281 668c1361 Markos Gogoulos
        """
282 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/images/' + str(self.test_image_id))
283 668c1361 Markos Gogoulos
        image_from_api = json.loads(response.content)['image']
284 d2e5f1d1 Markos Gogoulos
        image_from_db = Image.objects.get(id=self.test_image_id)
285 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['name'], image_from_db.name)
286 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['id'], image_from_db.id)
287 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
288 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['size'], image_from_db.size)
289 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['status'], image_from_db.state)
290 668c1361 Markos Gogoulos
        self.assertEqual(image_from_api['description'], image_from_db.description)
291 668c1361 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
292 668c1361 Markos Gogoulos
293 668c1361 Markos Gogoulos
294 668c1361 Markos Gogoulos
    def testImagesDetails(self):
295 668c1361 Markos Gogoulos
        """ test if the images details are returned by the API
296 668c1361 Markos Gogoulos
        """
297 f3af8b40 Dimitris Moraitis
        response = self.client.get('/api/v1.0/images/detail')
298 f3af8b40 Dimitris Moraitis
        images_from_api = json.loads(response.content)['images']
299 f3af8b40 Dimitris Moraitis
        images_from_db = Image.objects.all()
300 f3af8b40 Dimitris Moraitis
        for i in range(0, len(images_from_db)):
301 f3af8b40 Dimitris Moraitis
            image_from_db = Image.objects.get(id=images_from_db[i].id)
302 f3af8b40 Dimitris Moraitis
            image_from_api = images_from_api[i]
303 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['name'], image_from_db.name)
304 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['id'], image_from_db.id)
305 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
306 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['size'], image_from_db.size)
307 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['status'], image_from_db.state)
308 685ab2b6 Markos Gogoulos
            self.assertEqual(image_from_api['description'], image_from_db.description)
309 f3af8b40 Dimitris Moraitis
310 54c30633 Markos Gogoulos
        for image_from_api in images_from_api:
311 54c30633 Markos Gogoulos
            image_from_db = Image.objects.get(id=image_from_api['id'])
312 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['name'], image_from_db.name)
313 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['id'], image_from_db.id)
314 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['serverId'], image_from_db.sourcevm and image_from_db.sourcevm.id or "")
315 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['size'], image_from_db.size)
316 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['status'], image_from_db.state)
317 54c30633 Markos Gogoulos
            self.assertEqual(image_from_api['description'], image_from_db.description)
318 f3af8b40 Dimitris Moraitis
            
319 685ab2b6 Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
320 685ab2b6 Markos Gogoulos
321 668c1361 Markos Gogoulos
322 668c1361 Markos Gogoulos
    def testWrongImage(self):
323 668c1361 Markos Gogoulos
        """ test if a non existent image is asked, if a 404 itemNotFound returned
324 668c1361 Markos Gogoulos
        """
325 d2e5f1d1 Markos Gogoulos
        response = self.client.get('/api/v1.0/images/' + str(self.test_wrong_image_id))
326 685ab2b6 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
327 73469364 Markos Gogoulos
328 73469364 Markos Gogoulos
329 73469364 Markos Gogoulos
    def testServerMetadata(self):
330 73469364 Markos Gogoulos
        """ test server's metadata (add, edit)
331 73469364 Markos Gogoulos
        """
332 73469364 Markos Gogoulos
        request = {
333 73469364 Markos Gogoulos
            "metadata": {"metadata_key" : "name", "metadata_value" : "a fancy name"}
334 73469364 Markos Gogoulos
            }
335 73469364 Markos Gogoulos
        response = self.client.put('/api/v1.0/servers' + str(self.test_server_id), 
336 73469364 Markos Gogoulos
                                    json.dumps(request),
337 73469364 Markos Gogoulos
                                    content_type='application/json')  
338 73469364 Markos Gogoulos
        self.assertEqual(response.status_code, 404)
339 73469364 Markos Gogoulos
        #TODO: not working atm, due to problem with django piston and PUT
340 a8acbbac Markos Gogoulos
341 a8acbbac Markos Gogoulos
    def testVMgroupList(self):
342 a8acbbac Markos Gogoulos
        """ test if the expected list of groups is returned by the API
343 a8acbbac Markos Gogoulos
        """        
344 a8acbbac Markos Gogoulos
        response = self.client.get('/api/v1.0/groups')
345 a8acbbac Markos Gogoulos
        groups_from_api = json.loads(response.content)['groups']
346 a8acbbac Markos Gogoulos
        groups_from_db = VirtualMachineGroup.objects.all()
347 a8acbbac Markos Gogoulos
        self.assertEqual(len(groups_from_api), len(groups_from_db))
348 a8acbbac Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
349 a8acbbac Markos Gogoulos
        for group_from_api in groups_from_api:
350 a8acbbac Markos Gogoulos
            group_from_db = VirtualMachineGroup.objects.get(id=group_from_api['id'])
351 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['id'], group_from_db.id)
352 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['name'], group_from_db.name)
353 a8acbbac Markos Gogoulos
354 a8acbbac Markos Gogoulos
    def testVMgroupDetails(self):
355 a8acbbac Markos Gogoulos
        """ test if the expected virtual machine group is returned by the API
356 a8acbbac Markos Gogoulos
        """
357 a8acbbac Markos Gogoulos
        response = self.client.get('/api/v1.0/groups/' + str(self.test_group_id))
358 a8acbbac Markos Gogoulos
        group_from_api = json.loads(response.content)['group']
359 a8acbbac Markos Gogoulos
        group_from_db = VirtualMachineGroup.objects.get(id=self.test_group_id)
360 a8acbbac Markos Gogoulos
        self.assertEqual(group_from_api['name'], group_from_db.name)
361 a8acbbac Markos Gogoulos
        self.assertEqual(group_from_api['id'], group_from_db.id)
362 a8acbbac Markos Gogoulos
        self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])
363 a8acbbac Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])
364 a8acbbac Markos Gogoulos
365 a8acbbac Markos Gogoulos
    def testWrongVMgroup(self):
366 a8acbbac Markos Gogoulos
        """ test if a non existent VMgroup is asked, if a 404 itemNotFound returned
367 a8acbbac Markos Gogoulos
        """
368 a8acbbac Markos Gogoulos
        response = self.client.get('/api/v1.0/groups/' + str(self.test_wrong_group_id))
369 a8acbbac Markos Gogoulos
        self.assertEqual(response.status_code, 404)
370 a8acbbac Markos Gogoulos
371 a8acbbac Markos Gogoulos
    def testgroupsDetails(self):
372 a8acbbac Markos Gogoulos
        """ test if the groups details are returned by the API
373 a8acbbac Markos Gogoulos
        """
374 a8acbbac Markos Gogoulos
        response = self.client.get('/api/v1.0/groups/detail')
375 a8acbbac Markos Gogoulos
        groups_from_api = json.loads(response.content)['groups']
376 a8acbbac Markos Gogoulos
        groups_from_db = VirtualMachineGroup.objects.all()
377 a8acbbac Markos Gogoulos
        for i in range(0, len(groups_from_db)):
378 a8acbbac Markos Gogoulos
            group_from_db = VirtualMachineGroup.objects.get(id=groups_from_db[i].id)
379 a8acbbac Markos Gogoulos
            group_from_api = groups_from_api[i]
380 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['name'], group_from_db.name)
381 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['id'], group_from_db.id)
382 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])
383 a8acbbac Markos Gogoulos
        for group_from_api in groups_from_api:
384 a8acbbac Markos Gogoulos
            group_from_db = VirtualMachineGroup.objects.get(id=group_from_api['id'])
385 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['name'], group_from_db.name)
386 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['id'], group_from_db.id)
387 a8acbbac Markos Gogoulos
            self.assertEqual(group_from_api['server_id'], [machine.id for machine in group_from_db.machines.all()])            
388 a8acbbac Markos Gogoulos
        self.assertTrue(response.status_code in [200,203])