Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / tests / api.py @ a44a3278

History | View | Annotate | Download (24.1 kB)

1 bd1f667b Giorgos Korfiatis
# Copyright 2011, 2012, 2013 GRNET S.A. All rights reserved.
2 1ac3349d Kostas Papadimitriou
#
3 1ac3349d Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 1ac3349d Kostas Papadimitriou
# without modification, are permitted provided that the following
5 1ac3349d Kostas Papadimitriou
# conditions are met:
6 1ac3349d Kostas Papadimitriou
#
7 1ac3349d Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 1ac3349d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 1ac3349d Kostas Papadimitriou
#      disclaimer.
10 1ac3349d Kostas Papadimitriou
#
11 1ac3349d Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 1ac3349d Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 1ac3349d Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 1ac3349d Kostas Papadimitriou
#      provided with the distribution.
15 1ac3349d Kostas Papadimitriou
#
16 1ac3349d Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 1ac3349d Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 1ac3349d Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1ac3349d Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 1ac3349d Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 1ac3349d Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 1ac3349d Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 1ac3349d Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 1ac3349d Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 1ac3349d Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 1ac3349d Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 1ac3349d Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 1ac3349d Kostas Papadimitriou
#
29 1ac3349d Kostas Papadimitriou
# The views and conclusions contained in the software and
30 1ac3349d Kostas Papadimitriou
# documentation are those of the authors and should not be
31 1ac3349d Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 1ac3349d Kostas Papadimitriou
# or implied, of GRNET S.A.
33 1ac3349d Kostas Papadimitriou
34 1ac3349d Kostas Papadimitriou
from astakos.im.tests.common import *
35 8aaf4f0d Georgios D. Tsoukalas
from astakos.im.settings import astakos_services, BASE_HOST
36 8aaf4f0d Georgios D. Tsoukalas
from synnefo.lib.services import get_service_path
37 8aaf4f0d Georgios D. Tsoukalas
from synnefo.lib import join_urls
38 7ac2131c Sofia Papagiannaki
39 baa9073a Kostas Papadimitriou
from django.test import TestCase
40 8cb96389 Sofia Papagiannaki
from django.core.urlresolvers import reverse
41 8cb96389 Sofia Papagiannaki
42 8cb96389 Sofia Papagiannaki
#from xml.dom import minidom
43 7ac2131c Sofia Papagiannaki
44 7ac2131c Sofia Papagiannaki
import json
45 7ac2131c Sofia Papagiannaki
46 a248ebbb Kostas Papadimitriou
ROOT = "/%s/%s/%s/" % (
47 a248ebbb Kostas Papadimitriou
    astakos_settings.BASE_PATH, astakos_settings.ACCOUNTS_PREFIX, 'v1.0')
48 1ac3349d Kostas Papadimitriou
u = lambda url: ROOT + url
49 1ac3349d Kostas Papadimitriou
50 1ac3349d Kostas Papadimitriou
51 1ac3349d Kostas Papadimitriou
class QuotaAPITest(TestCase):
52 1ac3349d Kostas Papadimitriou
    def test_0(self):
53 1ac3349d Kostas Papadimitriou
        client = Client()
54 bd1f667b Giorgos Korfiatis
55 bd1f667b Giorgos Korfiatis
        component1 = Component.objects.create(name="comp1")
56 bd1f667b Giorgos Korfiatis
        register.add_service(component1, "service1", "type1", [])
57 1ac3349d Kostas Papadimitriou
        # custom service resources
58 1ac3349d Kostas Papadimitriou
        resource11 = {"name": "service1.resource11",
59 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
60 bd1f667b Giorgos Korfiatis
                      "service_type": "type1",
61 a248ebbb Kostas Papadimitriou
                      "service_origin": "service1",
62 1ac3349d Kostas Papadimitriou
                      "allow_in_projects": True}
63 bd1f667b Giorgos Korfiatis
        r, _ = register.add_resource(resource11)
64 bd1f667b Giorgos Korfiatis
        register.update_resource(r, 100)
65 1ac3349d Kostas Papadimitriou
        resource12 = {"name": "service1.resource12",
66 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
67 bd1f667b Giorgos Korfiatis
                      "service_type": "type1",
68 a248ebbb Kostas Papadimitriou
                      "service_origin": "service1",
69 1ac3349d Kostas Papadimitriou
                      "unit": "bytes"}
70 bd1f667b Giorgos Korfiatis
        r, _ = register.add_resource(resource12)
71 bd1f667b Giorgos Korfiatis
        register.update_resource(r, 1024)
72 1ac3349d Kostas Papadimitriou
73 1ac3349d Kostas Papadimitriou
        # create user
74 1ac3349d Kostas Papadimitriou
        user = get_local_user('test@grnet.gr')
75 1ac3349d Kostas Papadimitriou
        quotas.qh_sync_user(user)
76 1ac3349d Kostas Papadimitriou
77 bd1f667b Giorgos Korfiatis
        component2 = Component.objects.create(name="comp2")
78 bd1f667b Giorgos Korfiatis
        register.add_service(component2, "service2", "type2", [])
79 1ac3349d Kostas Papadimitriou
        # create another service
80 1ac3349d Kostas Papadimitriou
        resource21 = {"name": "service2.resource21",
81 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
82 bd1f667b Giorgos Korfiatis
                      "service_type": "type2",
83 a248ebbb Kostas Papadimitriou
                      "service_origin": "service2",
84 1ac3349d Kostas Papadimitriou
                      "allow_in_projects": False}
85 bd1f667b Giorgos Korfiatis
        r, _ = register.add_resource(resource21)
86 bd1f667b Giorgos Korfiatis
        register.update_resource(r, 3)
87 1ac3349d Kostas Papadimitriou
88 1ac3349d Kostas Papadimitriou
        resource_names = [r['name'] for r in
89 1ac3349d Kostas Papadimitriou
                          [resource11, resource12, resource21]]
90 1ac3349d Kostas Papadimitriou
91 1ac3349d Kostas Papadimitriou
        # get resources
92 1ac3349d Kostas Papadimitriou
        r = client.get(u('resources'))
93 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
94 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
95 1ac3349d Kostas Papadimitriou
        for name in resource_names:
96 1ac3349d Kostas Papadimitriou
            assertIn(name, body)
97 1ac3349d Kostas Papadimitriou
98 1ac3349d Kostas Papadimitriou
        # get quota
99 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas'))
100 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 401)
101 1ac3349d Kostas Papadimitriou
102 1ac3349d Kostas Papadimitriou
        headers = {'HTTP_X_AUTH_TOKEN': user.auth_token}
103 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas/'), **headers)
104 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
105 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
106 1ac3349d Kostas Papadimitriou
        system_quota = body['system']
107 1ac3349d Kostas Papadimitriou
        assertIn('system', body)
108 1ac3349d Kostas Papadimitriou
        for name in resource_names:
109 1ac3349d Kostas Papadimitriou
            assertIn(name, system_quota)
110 1ac3349d Kostas Papadimitriou
111 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas'))
112 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 401)
113 1ac3349d Kostas Papadimitriou
114 bd1f667b Giorgos Korfiatis
        s1_headers = {'HTTP_X_AUTH_TOKEN': component1.auth_token}
115 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas'), **s1_headers)
116 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
117 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
118 1ac3349d Kostas Papadimitriou
        assertIn(user.uuid, body)
119 1ac3349d Kostas Papadimitriou
120 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions'), **s1_headers)
121 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
122 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
123 1ac3349d Kostas Papadimitriou
        self.assertEqual(body, [])
124 1ac3349d Kostas Papadimitriou
125 1ac3349d Kostas Papadimitriou
        # issue some commissions
126 1ac3349d Kostas Papadimitriou
        commission_request = {
127 1ac3349d Kostas Papadimitriou
            "force": False,
128 1ac3349d Kostas Papadimitriou
            "auto_accept": False,
129 1ac3349d Kostas Papadimitriou
            "name": "my commission",
130 1ac3349d Kostas Papadimitriou
            "provisions": [
131 1ac3349d Kostas Papadimitriou
                {
132 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
133 1ac3349d Kostas Papadimitriou
                    "source": "system",
134 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
135 1ac3349d Kostas Papadimitriou
                    "quantity": 1
136 1ac3349d Kostas Papadimitriou
                },
137 1ac3349d Kostas Papadimitriou
                {
138 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
139 1ac3349d Kostas Papadimitriou
                    "source": "system",
140 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
141 1ac3349d Kostas Papadimitriou
                    "quantity": 30000
142 1ac3349d Kostas Papadimitriou
                }]}
143 1ac3349d Kostas Papadimitriou
144 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
145 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
146 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
147 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 413)
148 1ac3349d Kostas Papadimitriou
149 1ac3349d Kostas Papadimitriou
        commission_request = {
150 1ac3349d Kostas Papadimitriou
            "force": False,
151 1ac3349d Kostas Papadimitriou
            "auto_accept": False,
152 1ac3349d Kostas Papadimitriou
            "name": "my commission",
153 1ac3349d Kostas Papadimitriou
            "provisions": [
154 1ac3349d Kostas Papadimitriou
                {
155 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
156 1ac3349d Kostas Papadimitriou
                    "source": "system",
157 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
158 1ac3349d Kostas Papadimitriou
                    "quantity": 1
159 1ac3349d Kostas Papadimitriou
                },
160 1ac3349d Kostas Papadimitriou
                {
161 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
162 1ac3349d Kostas Papadimitriou
                    "source": "system",
163 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
164 1ac3349d Kostas Papadimitriou
                    "quantity": 100
165 1ac3349d Kostas Papadimitriou
                }]}
166 1ac3349d Kostas Papadimitriou
167 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
168 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
169 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
170 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
171 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
172 1ac3349d Kostas Papadimitriou
        serial = body['serial']
173 1ac3349d Kostas Papadimitriou
        self.assertEqual(serial, 1)
174 1ac3349d Kostas Papadimitriou
175 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
176 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
177 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
178 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
179 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
180 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], 2)
181 1ac3349d Kostas Papadimitriou
182 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
183 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
184 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
185 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
186 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
187 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], 3)
188 1ac3349d Kostas Papadimitriou
189 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions'), **s1_headers)
190 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
191 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
192 1ac3349d Kostas Papadimitriou
        self.assertEqual(body, [1, 2, 3])
193 1ac3349d Kostas Papadimitriou
194 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
195 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
196 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
197 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], serial)
198 1ac3349d Kostas Papadimitriou
        assertIn('issue_time', body)
199 a44a3278 Giorgos Korfiatis
        provisions = sorted(body['provisions'], key=lambda p: p['resource'])
200 a44a3278 Giorgos Korfiatis
        self.assertEqual(provisions, commission_request['provisions'])
201 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['name'], commission_request['name'])
202 1ac3349d Kostas Papadimitriou
203 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas?user=' + user.uuid), **s1_headers)
204 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
205 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
206 1ac3349d Kostas Papadimitriou
        user_quota = body[user.uuid]
207 1ac3349d Kostas Papadimitriou
        system_quota = user_quota['system']
208 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
209 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 3)
210 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 3)
211 1ac3349d Kostas Papadimitriou
212 1ac3349d Kostas Papadimitriou
        # resolve pending commissions
213 1ac3349d Kostas Papadimitriou
        resolve_data = {
214 1ac3349d Kostas Papadimitriou
            "accept": [1, 3],
215 1ac3349d Kostas Papadimitriou
            "reject": [2, 3, 4],
216 1ac3349d Kostas Papadimitriou
        }
217 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(resolve_data)
218 1ac3349d Kostas Papadimitriou
219 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/action'), post_data,
220 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
221 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
222 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
223 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['accepted'], [1])
224 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['rejected'], [2])
225 1ac3349d Kostas Papadimitriou
        failed = body['failed']
226 1ac3349d Kostas Papadimitriou
        self.assertEqual(len(failed), 2)
227 1ac3349d Kostas Papadimitriou
228 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
229 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
230 1ac3349d Kostas Papadimitriou
231 1ac3349d Kostas Papadimitriou
        # auto accept
232 1ac3349d Kostas Papadimitriou
        commission_request = {
233 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
234 1ac3349d Kostas Papadimitriou
            "name": "my commission",
235 1ac3349d Kostas Papadimitriou
            "provisions": [
236 1ac3349d Kostas Papadimitriou
                {
237 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
238 1ac3349d Kostas Papadimitriou
                    "source": "system",
239 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
240 1ac3349d Kostas Papadimitriou
                    "quantity": 1
241 1ac3349d Kostas Papadimitriou
                },
242 1ac3349d Kostas Papadimitriou
                {
243 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
244 1ac3349d Kostas Papadimitriou
                    "source": "system",
245 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
246 1ac3349d Kostas Papadimitriou
                    "quantity": 100
247 1ac3349d Kostas Papadimitriou
                }]}
248 1ac3349d Kostas Papadimitriou
249 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
250 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
251 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
252 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
253 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
254 1ac3349d Kostas Papadimitriou
        serial = body['serial']
255 1ac3349d Kostas Papadimitriou
        self.assertEqual(serial, 4)
256 1ac3349d Kostas Papadimitriou
257 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
258 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
259 1ac3349d Kostas Papadimitriou
260 1ac3349d Kostas Papadimitriou
        # malformed
261 1ac3349d Kostas Papadimitriou
        commission_request = {
262 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
263 1ac3349d Kostas Papadimitriou
            "name": "my commission",
264 1ac3349d Kostas Papadimitriou
            "provisions": [
265 1ac3349d Kostas Papadimitriou
                {
266 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
267 1ac3349d Kostas Papadimitriou
                    "source": "system",
268 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
269 1ac3349d Kostas Papadimitriou
                }
270 1ac3349d Kostas Papadimitriou
            ]}
271 1ac3349d Kostas Papadimitriou
272 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
273 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
274 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
275 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
276 1ac3349d Kostas Papadimitriou
277 1ac3349d Kostas Papadimitriou
        commission_request = {
278 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
279 1ac3349d Kostas Papadimitriou
            "name": "my commission",
280 1ac3349d Kostas Papadimitriou
            "provisions": "dummy"}
281 1ac3349d Kostas Papadimitriou
282 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
283 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
284 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
285 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
286 1ac3349d Kostas Papadimitriou
287 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), commission_request,
288 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
289 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
290 1ac3349d Kostas Papadimitriou
291 1ac3349d Kostas Papadimitriou
        # no holding
292 1ac3349d Kostas Papadimitriou
        commission_request = {
293 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
294 1ac3349d Kostas Papadimitriou
            "name": "my commission",
295 1ac3349d Kostas Papadimitriou
            "provisions": [
296 1ac3349d Kostas Papadimitriou
                {
297 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
298 1ac3349d Kostas Papadimitriou
                    "source": "system",
299 1ac3349d Kostas Papadimitriou
                    "resource": "non existent",
300 1ac3349d Kostas Papadimitriou
                    "quantity": 1
301 1ac3349d Kostas Papadimitriou
                },
302 1ac3349d Kostas Papadimitriou
                {
303 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
304 1ac3349d Kostas Papadimitriou
                    "source": "system",
305 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
306 1ac3349d Kostas Papadimitriou
                    "quantity": 100
307 1ac3349d Kostas Papadimitriou
                }]}
308 1ac3349d Kostas Papadimitriou
309 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
310 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
311 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
312 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
313 1ac3349d Kostas Papadimitriou
314 1ac3349d Kostas Papadimitriou
        # release
315 1ac3349d Kostas Papadimitriou
        commission_request = {
316 1ac3349d Kostas Papadimitriou
            "provisions": [
317 1ac3349d Kostas Papadimitriou
                {
318 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
319 1ac3349d Kostas Papadimitriou
                    "source": "system",
320 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
321 1ac3349d Kostas Papadimitriou
                    "quantity": -1
322 1ac3349d Kostas Papadimitriou
                }
323 1ac3349d Kostas Papadimitriou
            ]}
324 1ac3349d Kostas Papadimitriou
325 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
326 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
327 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
328 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
329 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
330 1ac3349d Kostas Papadimitriou
        serial = body['serial']
331 1ac3349d Kostas Papadimitriou
332 1ac3349d Kostas Papadimitriou
        accept_data = {'accept': ""}
333 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
334 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
335 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
336 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
337 1ac3349d Kostas Papadimitriou
338 1ac3349d Kostas Papadimitriou
        reject_data = {'reject': ""}
339 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
340 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
341 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
342 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
343 1ac3349d Kostas Papadimitriou
344 1ac3349d Kostas Papadimitriou
        # force
345 1ac3349d Kostas Papadimitriou
        commission_request = {
346 1ac3349d Kostas Papadimitriou
            "force": True,
347 1ac3349d Kostas Papadimitriou
            "provisions": [
348 1ac3349d Kostas Papadimitriou
                {
349 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
350 1ac3349d Kostas Papadimitriou
                    "source": "system",
351 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
352 1ac3349d Kostas Papadimitriou
                    "quantity": 100
353 1ac3349d Kostas Papadimitriou
                }]}
354 1ac3349d Kostas Papadimitriou
355 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
356 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
357 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
358 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
359 1ac3349d Kostas Papadimitriou
360 1ac3349d Kostas Papadimitriou
        commission_request = {
361 1ac3349d Kostas Papadimitriou
            "force": True,
362 1ac3349d Kostas Papadimitriou
            "provisions": [
363 1ac3349d Kostas Papadimitriou
                {
364 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
365 1ac3349d Kostas Papadimitriou
                    "source": "system",
366 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
367 1ac3349d Kostas Papadimitriou
                    "quantity": -200
368 1ac3349d Kostas Papadimitriou
                }]}
369 1ac3349d Kostas Papadimitriou
370 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
371 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
372 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
373 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 413)
374 1ac3349d Kostas Papadimitriou
375 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas'), **headers)
376 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
377 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
378 1ac3349d Kostas Papadimitriou
        system_quota = body['system']
379 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
380 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 102)
381 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 101)
382 7ac2131c Sofia Papagiannaki
383 8ff1e8d9 Giorgos Korfiatis
        # Bad Request
384 8ff1e8d9 Giorgos Korfiatis
        r = client.head(u('commissions'))
385 8ff1e8d9 Giorgos Korfiatis
        self.assertEqual(r.status_code, 400)
386 8ff1e8d9 Giorgos Korfiatis
387 7ac2131c Sofia Papagiannaki
388 7ac2131c Sofia Papagiannaki
class TokensApiTest(TestCase):
389 7ac2131c Sofia Papagiannaki
    def setUp(self):
390 ab7ca50a Sofia Papagiannaki
        backend = activation_backends.get_backend()
391 ab7ca50a Sofia Papagiannaki
392 ab7ca50a Sofia Papagiannaki
        self.user1 = AstakosUser.objects.create(
393 ab7ca50a Sofia Papagiannaki
            email='test1', email_verified=True, moderated=True,
394 ab7ca50a Sofia Papagiannaki
            is_rejected=False)
395 ab7ca50a Sofia Papagiannaki
        backend.activate_user(self.user1)
396 ab7ca50a Sofia Papagiannaki
        assert self.user1.is_active is True
397 ab7ca50a Sofia Papagiannaki
398 ab7ca50a Sofia Papagiannaki
        self.user2 = AstakosUser.objects.create(
399 ab7ca50a Sofia Papagiannaki
            email='test2', email_verified=True, moderated=True,
400 ab7ca50a Sofia Papagiannaki
            is_rejected=False)
401 ab7ca50a Sofia Papagiannaki
        backend.activate_user(self.user2)
402 ab7ca50a Sofia Papagiannaki
        assert self.user2.is_active is True
403 7ac2131c Sofia Papagiannaki
404 8cb96389 Sofia Papagiannaki
        c1 = Component(name='component1', url='http://localhost/component1')
405 8cb96389 Sofia Papagiannaki
        c1.save()
406 8cb96389 Sofia Papagiannaki
        s1 = Service(component=c1, type='type1', name='service1')
407 8cb96389 Sofia Papagiannaki
        s1.save()
408 8cb96389 Sofia Papagiannaki
        e1 = Endpoint(service=s1)
409 8cb96389 Sofia Papagiannaki
        e1.save()
410 8cb96389 Sofia Papagiannaki
        e1.data.create(key='versionId', value='v1.0')
411 8cb96389 Sofia Papagiannaki
        e1.data.create(key='publicURL', value='http://localhost:8000/s1/v1.0')
412 8cb96389 Sofia Papagiannaki
413 8cb96389 Sofia Papagiannaki
        s2 = Service(component=c1, type='type2', name='service2')
414 8cb96389 Sofia Papagiannaki
        s2.save()
415 8cb96389 Sofia Papagiannaki
        e2 = Endpoint(service=s2)
416 8cb96389 Sofia Papagiannaki
        e2.save()
417 8cb96389 Sofia Papagiannaki
        e2.data.create(key='versionId', value='v1.0')
418 8cb96389 Sofia Papagiannaki
        e2.data.create(key='publicURL', value='http://localhost:8000/s2/v1.0')
419 8cb96389 Sofia Papagiannaki
420 8cb96389 Sofia Papagiannaki
        c2 = Component(name='component2', url='http://localhost/component2')
421 8cb96389 Sofia Papagiannaki
        c2.save()
422 8cb96389 Sofia Papagiannaki
        s3 = Service(component=c2, type='type3', name='service3')
423 8cb96389 Sofia Papagiannaki
        s3.save()
424 8cb96389 Sofia Papagiannaki
        e3 = Endpoint(service=s3)
425 8cb96389 Sofia Papagiannaki
        e3.save()
426 8cb96389 Sofia Papagiannaki
        e3.data.create(key='versionId', value='v2.0')
427 8cb96389 Sofia Papagiannaki
        e3.data.create(key='publicURL', value='http://localhost:8000/s3/v2.0')
428 7ac2131c Sofia Papagiannaki
429 f870efe2 Sofia Papagiannaki
    def test_authenticate(self):
430 7ac2131c Sofia Papagiannaki
        client = Client()
431 7ac2131c Sofia Papagiannaki
432 f870efe2 Sofia Papagiannaki
        # Check not allowed method
433 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
434 f870efe2 Sofia Papagiannaki
        r = client.get(url, post_data={})
435 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
436 f870efe2 Sofia Papagiannaki
437 d29f0371 Sofia Papagiannaki
        # check public mode
438 d29f0371 Sofia Papagiannaki
        r = client.post(url, CONTENT_LENGTH=0)
439 d29f0371 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
440 d29f0371 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
441 d29f0371 Sofia Papagiannaki
        try:
442 d29f0371 Sofia Papagiannaki
            body = json.loads(r.content)
443 d29f0371 Sofia Papagiannaki
        except Exception, e:
444 d29f0371 Sofia Papagiannaki
            self.fail(e)
445 d29f0371 Sofia Papagiannaki
        self.assertTrue('token' not in body.get('access'))
446 d29f0371 Sofia Papagiannaki
        self.assertTrue('user' not in body.get('access'))
447 d29f0371 Sofia Papagiannaki
        self.assertTrue('serviceCatalog' in body.get('access'))
448 f870efe2 Sofia Papagiannaki
449 f870efe2 Sofia Papagiannaki
        # Check unsupported xml input
450 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
451 f870efe2 Sofia Papagiannaki
        post_data = """
452 f870efe2 Sofia Papagiannaki
            <?xml version="1.0" encoding="UTF-8"?>
453 f870efe2 Sofia Papagiannaki
                <auth xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
454 f870efe2 Sofia Papagiannaki
                 xmlns="http://docs.openstack.org/identity/api/v2.0"
455 f870efe2 Sofia Papagiannaki
                 tenantName="%s">
456 f870efe2 Sofia Papagiannaki
                  <passwordCredentials username="%s" password="%s"/>
457 f870efe2 Sofia Papagiannaki
                </auth>""" % (self.user1.uuid, self.user1.uuid,
458 f870efe2 Sofia Papagiannaki
                              self.user1.auth_token)
459 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/xml')
460 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
461 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
462 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'],
463 f870efe2 Sofia Papagiannaki
                         "Unsupported Content-type: 'application/xml'")
464 f870efe2 Sofia Papagiannaki
465 f870efe2 Sofia Papagiannaki
        # Check malformed request: missing password
466 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
467 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s"},
468 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
469 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.uuid)
470 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
471 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
472 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
473 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
474 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
475 f870efe2 Sofia Papagiannaki
476 f870efe2 Sofia Papagiannaki
        # Check malformed request: missing username
477 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
478 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"password":"%s"},
479 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
480 f870efe2 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
481 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
482 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
483 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
484 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
485 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
486 f870efe2 Sofia Papagiannaki
487 f870efe2 Sofia Papagiannaki
        # Check invalid pass
488 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
489 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
490 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
491 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
492 f870efe2 Sofia Papagiannaki
            self.user1.uuid, '', self.user1.uuid)
493 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
494 7ac2131c Sofia Papagiannaki
        self.assertEqual(r.status_code, 401)
495 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
496 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['unauthorized']['message'],
497 f870efe2 Sofia Papagiannaki
                         'Invalid token')
498 f870efe2 Sofia Papagiannaki
499 f870efe2 Sofia Papagiannaki
        # Check inconsistent pass
500 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
501 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
502 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
503 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
504 49005665 Sofia Papagiannaki
            self.user1.uuid, self.user2.auth_token, self.user2.uuid)
505 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
506 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 401)
507 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
508 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['unauthorized']['message'],
509 f870efe2 Sofia Papagiannaki
                         'Invalid credentials')
510 f870efe2 Sofia Papagiannaki
511 f870efe2 Sofia Papagiannaki
        # Check invalid json data
512 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
513 f870efe2 Sofia Papagiannaki
        r = client.post(url, "not json", content_type='application/json')
514 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
515 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
516 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'], 'Invalid JSON data')
517 f870efe2 Sofia Papagiannaki
518 f870efe2 Sofia Papagiannaki
        # Check auth with token
519 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
520 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"token": {"id":"%s"},
521 f870efe2 Sofia Papagiannaki
                        "tenantName":"%s"}}""" % (
522 f870efe2 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
523 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
524 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
525 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
526 f870efe2 Sofia Papagiannaki
        try:
527 f870efe2 Sofia Papagiannaki
            body = json.loads(r.content)
528 f870efe2 Sofia Papagiannaki
        except Exception, e:
529 f870efe2 Sofia Papagiannaki
            self.fail(e)
530 f870efe2 Sofia Papagiannaki
531 11366070 Sofia Papagiannaki
        # Check malformed request: missing token
532 11366070 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
533 11366070 Sofia Papagiannaki
        post_data = """{"auth":{"auth_token":{"id":"%s"},
534 11366070 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
535 11366070 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
536 11366070 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
537 11366070 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
538 11366070 Sofia Papagiannaki
        body = json.loads(r.content)
539 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
540 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
541 11366070 Sofia Papagiannaki
542 11366070 Sofia Papagiannaki
        # Check bad request: inconsistent tenant
543 11366070 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
544 11366070 Sofia Papagiannaki
        post_data = """{"auth":{"token":{"id":"%s"},
545 11366070 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
546 11366070 Sofia Papagiannaki
            self.user1.auth_token, self.user2.uuid)
547 11366070 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
548 11366070 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
549 11366070 Sofia Papagiannaki
        body = json.loads(r.content)
550 11366070 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'],
551 11366070 Sofia Papagiannaki
                         'Not conforming tenantName')
552 11366070 Sofia Papagiannaki
553 a01eb018 Sofia Papagiannaki
        # Check bad request: inconsistent tenant
554 a01eb018 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
555 a01eb018 Sofia Papagiannaki
        post_data = """{"auth":{"token":{"id":"%s"},
556 a01eb018 Sofia Papagiannaki
                                "tenantName":""}}""" % (
557 a01eb018 Sofia Papagiannaki
            self.user1.auth_token)
558 a01eb018 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
559 a01eb018 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
560 a01eb018 Sofia Papagiannaki
561 f870efe2 Sofia Papagiannaki
        # Check successful json response
562 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
563 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
564 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
565 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
566 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.auth_token, self.user1.uuid)
567 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
568 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
569 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
570 f870efe2 Sofia Papagiannaki
        try:
571 f870efe2 Sofia Papagiannaki
            body = json.loads(r.content)
572 f870efe2 Sofia Papagiannaki
        except Exception, e:
573 f870efe2 Sofia Papagiannaki
            self.fail(e)
574 f870efe2 Sofia Papagiannaki
575 f870efe2 Sofia Papagiannaki
        try:
576 8cb96389 Sofia Papagiannaki
            token = body['access']['token']['id']
577 8cb96389 Sofia Papagiannaki
            user = body['access']['user']['id']
578 8cb96389 Sofia Papagiannaki
            service_catalog = body['access']['serviceCatalog']
579 f870efe2 Sofia Papagiannaki
        except KeyError:
580 f870efe2 Sofia Papagiannaki
            self.fail('Invalid response')
581 f870efe2 Sofia Papagiannaki
582 f870efe2 Sofia Papagiannaki
        self.assertEqual(token, self.user1.auth_token)
583 f870efe2 Sofia Papagiannaki
        self.assertEqual(user, self.user1.uuid)
584 f870efe2 Sofia Papagiannaki
        self.assertEqual(len(service_catalog), 3)
585 f870efe2 Sofia Papagiannaki
586 f870efe2 Sofia Papagiannaki
        # Check successful xml response
587 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
588 f870efe2 Sofia Papagiannaki
        headers = {'HTTP_ACCEPT': 'application/xml'}
589 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
590 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
591 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
592 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.auth_token, self.user1.uuid)
593 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json',
594 f870efe2 Sofia Papagiannaki
                        **headers)
595 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
596 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/xml'))
597 49005665 Sofia Papagiannaki
#        try:
598 49005665 Sofia Papagiannaki
#            body = minidom.parseString(r.content)
599 49005665 Sofia Papagiannaki
#        except Exception, e:
600 49005665 Sofia Papagiannaki
#            self.fail(e)
601 8aaf4f0d Georgios D. Tsoukalas
602 8aaf4f0d Georgios D. Tsoukalas
603 8aaf4f0d Georgios D. Tsoukalas
class WrongPathAPITest(TestCase):
604 cb26c74e Georgios D. Tsoukalas
    def test_catch_wrong_account_paths(self, *args):
605 8aaf4f0d Georgios D. Tsoukalas
        path = get_service_path(astakos_services, 'account', 'v1.0')
606 8aaf4f0d Georgios D. Tsoukalas
        path = join_urls(BASE_HOST, path, 'nonexistent')
607 8aaf4f0d Georgios D. Tsoukalas
        response = self.client.get(path)
608 8aaf4f0d Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
609 8aaf4f0d Georgios D. Tsoukalas
        try:
610 8aaf4f0d Georgios D. Tsoukalas
            error = json.loads(response.content)
611 8aaf4f0d Georgios D. Tsoukalas
        except ValueError:
612 8aaf4f0d Georgios D. Tsoukalas
            self.assertTrue(False)
613 8aaf4f0d Georgios D. Tsoukalas
614 cb26c74e Georgios D. Tsoukalas
    def test_catch_wrong_identity_paths(self, *args):
615 8aaf4f0d Georgios D. Tsoukalas
        path = get_service_path(astakos_services, 'identity', 'v2.0')
616 8aaf4f0d Georgios D. Tsoukalas
        path = join_urls(BASE_HOST, path, 'nonexistent')
617 8aaf4f0d Georgios D. Tsoukalas
        response = self.client.get(path)
618 8aaf4f0d Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
619 8aaf4f0d Georgios D. Tsoukalas
        try:
620 8aaf4f0d Georgios D. Tsoukalas
            error = json.loads(response.content)
621 8aaf4f0d Georgios D. Tsoukalas
        except ValueError:
622 8aaf4f0d Georgios D. Tsoukalas
            self.assertTrue(False)