Statistics
| Branch: | Tag: | Revision:

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

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 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['provisions'], commission_request['provisions'])
200 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['name'], commission_request['name'])
201 1ac3349d Kostas Papadimitriou
202 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas?user=' + user.uuid), **s1_headers)
203 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
204 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
205 1ac3349d Kostas Papadimitriou
        user_quota = body[user.uuid]
206 1ac3349d Kostas Papadimitriou
        system_quota = user_quota['system']
207 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
208 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 3)
209 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 3)
210 1ac3349d Kostas Papadimitriou
211 1ac3349d Kostas Papadimitriou
        # resolve pending commissions
212 1ac3349d Kostas Papadimitriou
        resolve_data = {
213 1ac3349d Kostas Papadimitriou
            "accept": [1, 3],
214 1ac3349d Kostas Papadimitriou
            "reject": [2, 3, 4],
215 1ac3349d Kostas Papadimitriou
        }
216 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(resolve_data)
217 1ac3349d Kostas Papadimitriou
218 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/action'), post_data,
219 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
220 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
221 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
222 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['accepted'], [1])
223 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['rejected'], [2])
224 1ac3349d Kostas Papadimitriou
        failed = body['failed']
225 1ac3349d Kostas Papadimitriou
        self.assertEqual(len(failed), 2)
226 1ac3349d Kostas Papadimitriou
227 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
228 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
229 1ac3349d Kostas Papadimitriou
230 1ac3349d Kostas Papadimitriou
        # auto accept
231 1ac3349d Kostas Papadimitriou
        commission_request = {
232 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
233 1ac3349d Kostas Papadimitriou
            "name": "my commission",
234 1ac3349d Kostas Papadimitriou
            "provisions": [
235 1ac3349d Kostas Papadimitriou
                {
236 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
237 1ac3349d Kostas Papadimitriou
                    "source": "system",
238 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
239 1ac3349d Kostas Papadimitriou
                    "quantity": 1
240 1ac3349d Kostas Papadimitriou
                },
241 1ac3349d Kostas Papadimitriou
                {
242 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
243 1ac3349d Kostas Papadimitriou
                    "source": "system",
244 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
245 1ac3349d Kostas Papadimitriou
                    "quantity": 100
246 1ac3349d Kostas Papadimitriou
                }]}
247 1ac3349d Kostas Papadimitriou
248 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
249 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
250 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
251 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
252 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
253 1ac3349d Kostas Papadimitriou
        serial = body['serial']
254 1ac3349d Kostas Papadimitriou
        self.assertEqual(serial, 4)
255 1ac3349d Kostas Papadimitriou
256 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
257 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
258 1ac3349d Kostas Papadimitriou
259 1ac3349d Kostas Papadimitriou
        # malformed
260 1ac3349d Kostas Papadimitriou
        commission_request = {
261 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
262 1ac3349d Kostas Papadimitriou
            "name": "my commission",
263 1ac3349d Kostas Papadimitriou
            "provisions": [
264 1ac3349d Kostas Papadimitriou
                {
265 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
266 1ac3349d Kostas Papadimitriou
                    "source": "system",
267 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
268 1ac3349d Kostas Papadimitriou
                }
269 1ac3349d Kostas Papadimitriou
            ]}
270 1ac3349d Kostas Papadimitriou
271 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
272 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
273 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
274 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
275 1ac3349d Kostas Papadimitriou
276 1ac3349d Kostas Papadimitriou
        commission_request = {
277 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
278 1ac3349d Kostas Papadimitriou
            "name": "my commission",
279 1ac3349d Kostas Papadimitriou
            "provisions": "dummy"}
280 1ac3349d Kostas Papadimitriou
281 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
282 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
283 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
284 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
285 1ac3349d Kostas Papadimitriou
286 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), commission_request,
287 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
288 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
289 1ac3349d Kostas Papadimitriou
290 1ac3349d Kostas Papadimitriou
        # no holding
291 1ac3349d Kostas Papadimitriou
        commission_request = {
292 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
293 1ac3349d Kostas Papadimitriou
            "name": "my commission",
294 1ac3349d Kostas Papadimitriou
            "provisions": [
295 1ac3349d Kostas Papadimitriou
                {
296 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
297 1ac3349d Kostas Papadimitriou
                    "source": "system",
298 1ac3349d Kostas Papadimitriou
                    "resource": "non existent",
299 1ac3349d Kostas Papadimitriou
                    "quantity": 1
300 1ac3349d Kostas Papadimitriou
                },
301 1ac3349d Kostas Papadimitriou
                {
302 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
303 1ac3349d Kostas Papadimitriou
                    "source": "system",
304 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
305 1ac3349d Kostas Papadimitriou
                    "quantity": 100
306 1ac3349d Kostas Papadimitriou
                }]}
307 1ac3349d Kostas Papadimitriou
308 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
309 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
310 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
311 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
312 1ac3349d Kostas Papadimitriou
313 1ac3349d Kostas Papadimitriou
        # release
314 1ac3349d Kostas Papadimitriou
        commission_request = {
315 1ac3349d Kostas Papadimitriou
            "provisions": [
316 1ac3349d Kostas Papadimitriou
                {
317 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
318 1ac3349d Kostas Papadimitriou
                    "source": "system",
319 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
320 1ac3349d Kostas Papadimitriou
                    "quantity": -1
321 1ac3349d Kostas Papadimitriou
                }
322 1ac3349d Kostas Papadimitriou
            ]}
323 1ac3349d Kostas Papadimitriou
324 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
325 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
326 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
327 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
328 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
329 1ac3349d Kostas Papadimitriou
        serial = body['serial']
330 1ac3349d Kostas Papadimitriou
331 1ac3349d Kostas Papadimitriou
        accept_data = {'accept': ""}
332 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
333 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
334 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
335 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
336 1ac3349d Kostas Papadimitriou
337 1ac3349d Kostas Papadimitriou
        reject_data = {'reject': ""}
338 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
339 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
340 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
341 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
342 1ac3349d Kostas Papadimitriou
343 1ac3349d Kostas Papadimitriou
        # force
344 1ac3349d Kostas Papadimitriou
        commission_request = {
345 1ac3349d Kostas Papadimitriou
            "force": True,
346 1ac3349d Kostas Papadimitriou
            "provisions": [
347 1ac3349d Kostas Papadimitriou
                {
348 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
349 1ac3349d Kostas Papadimitriou
                    "source": "system",
350 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
351 1ac3349d Kostas Papadimitriou
                    "quantity": 100
352 1ac3349d Kostas Papadimitriou
                }]}
353 1ac3349d Kostas Papadimitriou
354 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
355 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
356 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
357 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
358 1ac3349d Kostas Papadimitriou
359 1ac3349d Kostas Papadimitriou
        commission_request = {
360 1ac3349d Kostas Papadimitriou
            "force": True,
361 1ac3349d Kostas Papadimitriou
            "provisions": [
362 1ac3349d Kostas Papadimitriou
                {
363 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
364 1ac3349d Kostas Papadimitriou
                    "source": "system",
365 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
366 1ac3349d Kostas Papadimitriou
                    "quantity": -200
367 1ac3349d Kostas Papadimitriou
                }]}
368 1ac3349d Kostas Papadimitriou
369 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
370 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
371 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
372 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 413)
373 1ac3349d Kostas Papadimitriou
374 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas'), **headers)
375 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
376 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
377 1ac3349d Kostas Papadimitriou
        system_quota = body['system']
378 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
379 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 102)
380 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 101)
381 7ac2131c Sofia Papagiannaki
382 8ff1e8d9 Giorgos Korfiatis
        # Bad Request
383 8ff1e8d9 Giorgos Korfiatis
        r = client.head(u('commissions'))
384 8ff1e8d9 Giorgos Korfiatis
        self.assertEqual(r.status_code, 400)
385 8ff1e8d9 Giorgos Korfiatis
386 7ac2131c Sofia Papagiannaki
387 7ac2131c Sofia Papagiannaki
class TokensApiTest(TestCase):
388 7ac2131c Sofia Papagiannaki
    def setUp(self):
389 ab7ca50a Sofia Papagiannaki
        backend = activation_backends.get_backend()
390 ab7ca50a Sofia Papagiannaki
391 ab7ca50a Sofia Papagiannaki
        self.user1 = AstakosUser.objects.create(
392 ab7ca50a Sofia Papagiannaki
            email='test1', email_verified=True, moderated=True,
393 ab7ca50a Sofia Papagiannaki
            is_rejected=False)
394 ab7ca50a Sofia Papagiannaki
        backend.activate_user(self.user1)
395 ab7ca50a Sofia Papagiannaki
        assert self.user1.is_active is True
396 ab7ca50a Sofia Papagiannaki
397 ab7ca50a Sofia Papagiannaki
        self.user2 = AstakosUser.objects.create(
398 ab7ca50a Sofia Papagiannaki
            email='test2', email_verified=True, moderated=True,
399 ab7ca50a Sofia Papagiannaki
            is_rejected=False)
400 ab7ca50a Sofia Papagiannaki
        backend.activate_user(self.user2)
401 ab7ca50a Sofia Papagiannaki
        assert self.user2.is_active is True
402 7ac2131c Sofia Papagiannaki
403 8cb96389 Sofia Papagiannaki
        c1 = Component(name='component1', url='http://localhost/component1')
404 8cb96389 Sofia Papagiannaki
        c1.save()
405 8cb96389 Sofia Papagiannaki
        s1 = Service(component=c1, type='type1', name='service1')
406 8cb96389 Sofia Papagiannaki
        s1.save()
407 8cb96389 Sofia Papagiannaki
        e1 = Endpoint(service=s1)
408 8cb96389 Sofia Papagiannaki
        e1.save()
409 8cb96389 Sofia Papagiannaki
        e1.data.create(key='versionId', value='v1.0')
410 8cb96389 Sofia Papagiannaki
        e1.data.create(key='publicURL', value='http://localhost:8000/s1/v1.0')
411 8cb96389 Sofia Papagiannaki
412 8cb96389 Sofia Papagiannaki
        s2 = Service(component=c1, type='type2', name='service2')
413 8cb96389 Sofia Papagiannaki
        s2.save()
414 8cb96389 Sofia Papagiannaki
        e2 = Endpoint(service=s2)
415 8cb96389 Sofia Papagiannaki
        e2.save()
416 8cb96389 Sofia Papagiannaki
        e2.data.create(key='versionId', value='v1.0')
417 8cb96389 Sofia Papagiannaki
        e2.data.create(key='publicURL', value='http://localhost:8000/s2/v1.0')
418 8cb96389 Sofia Papagiannaki
419 8cb96389 Sofia Papagiannaki
        c2 = Component(name='component2', url='http://localhost/component2')
420 8cb96389 Sofia Papagiannaki
        c2.save()
421 8cb96389 Sofia Papagiannaki
        s3 = Service(component=c2, type='type3', name='service3')
422 8cb96389 Sofia Papagiannaki
        s3.save()
423 8cb96389 Sofia Papagiannaki
        e3 = Endpoint(service=s3)
424 8cb96389 Sofia Papagiannaki
        e3.save()
425 8cb96389 Sofia Papagiannaki
        e3.data.create(key='versionId', value='v2.0')
426 8cb96389 Sofia Papagiannaki
        e3.data.create(key='publicURL', value='http://localhost:8000/s3/v2.0')
427 7ac2131c Sofia Papagiannaki
428 f870efe2 Sofia Papagiannaki
    def test_authenticate(self):
429 7ac2131c Sofia Papagiannaki
        client = Client()
430 7ac2131c Sofia Papagiannaki
431 f870efe2 Sofia Papagiannaki
        # Check not allowed method
432 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
433 f870efe2 Sofia Papagiannaki
        r = client.get(url, post_data={})
434 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
435 f870efe2 Sofia Papagiannaki
436 d29f0371 Sofia Papagiannaki
        # check public mode
437 d29f0371 Sofia Papagiannaki
        r = client.post(url, CONTENT_LENGTH=0)
438 d29f0371 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
439 d29f0371 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
440 d29f0371 Sofia Papagiannaki
        try:
441 d29f0371 Sofia Papagiannaki
            body = json.loads(r.content)
442 d29f0371 Sofia Papagiannaki
        except Exception, e:
443 d29f0371 Sofia Papagiannaki
            self.fail(e)
444 d29f0371 Sofia Papagiannaki
        self.assertTrue('token' not in body.get('access'))
445 d29f0371 Sofia Papagiannaki
        self.assertTrue('user' not in body.get('access'))
446 d29f0371 Sofia Papagiannaki
        self.assertTrue('serviceCatalog' in body.get('access'))
447 f870efe2 Sofia Papagiannaki
448 f870efe2 Sofia Papagiannaki
        # Check unsupported xml input
449 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
450 f870efe2 Sofia Papagiannaki
        post_data = """
451 f870efe2 Sofia Papagiannaki
            <?xml version="1.0" encoding="UTF-8"?>
452 f870efe2 Sofia Papagiannaki
                <auth xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
453 f870efe2 Sofia Papagiannaki
                 xmlns="http://docs.openstack.org/identity/api/v2.0"
454 f870efe2 Sofia Papagiannaki
                 tenantName="%s">
455 f870efe2 Sofia Papagiannaki
                  <passwordCredentials username="%s" password="%s"/>
456 f870efe2 Sofia Papagiannaki
                </auth>""" % (self.user1.uuid, self.user1.uuid,
457 f870efe2 Sofia Papagiannaki
                              self.user1.auth_token)
458 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/xml')
459 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
460 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
461 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'],
462 f870efe2 Sofia Papagiannaki
                         "Unsupported Content-type: 'application/xml'")
463 f870efe2 Sofia Papagiannaki
464 f870efe2 Sofia Papagiannaki
        # Check malformed request: missing password
465 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
466 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s"},
467 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
468 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.uuid)
469 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
470 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
471 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
472 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
473 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
474 f870efe2 Sofia Papagiannaki
475 f870efe2 Sofia Papagiannaki
        # Check malformed request: missing username
476 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
477 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"password":"%s"},
478 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
479 f870efe2 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
480 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
481 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
482 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
483 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
484 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
485 f870efe2 Sofia Papagiannaki
486 f870efe2 Sofia Papagiannaki
        # Check invalid pass
487 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
488 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
489 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
490 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
491 f870efe2 Sofia Papagiannaki
            self.user1.uuid, '', self.user1.uuid)
492 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
493 7ac2131c Sofia Papagiannaki
        self.assertEqual(r.status_code, 401)
494 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
495 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['unauthorized']['message'],
496 f870efe2 Sofia Papagiannaki
                         'Invalid token')
497 f870efe2 Sofia Papagiannaki
498 f870efe2 Sofia Papagiannaki
        # Check inconsistent pass
499 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
500 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
501 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
502 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
503 49005665 Sofia Papagiannaki
            self.user1.uuid, self.user2.auth_token, self.user2.uuid)
504 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
505 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 401)
506 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
507 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['unauthorized']['message'],
508 f870efe2 Sofia Papagiannaki
                         'Invalid credentials')
509 f870efe2 Sofia Papagiannaki
510 f870efe2 Sofia Papagiannaki
        # Check invalid json data
511 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
512 f870efe2 Sofia Papagiannaki
        r = client.post(url, "not json", content_type='application/json')
513 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
514 f870efe2 Sofia Papagiannaki
        body = json.loads(r.content)
515 f870efe2 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'], 'Invalid JSON data')
516 f870efe2 Sofia Papagiannaki
517 f870efe2 Sofia Papagiannaki
        # Check auth with token
518 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
519 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"token": {"id":"%s"},
520 f870efe2 Sofia Papagiannaki
                        "tenantName":"%s"}}""" % (
521 f870efe2 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
522 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
523 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
524 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
525 f870efe2 Sofia Papagiannaki
        try:
526 f870efe2 Sofia Papagiannaki
            body = json.loads(r.content)
527 f870efe2 Sofia Papagiannaki
        except Exception, e:
528 f870efe2 Sofia Papagiannaki
            self.fail(e)
529 f870efe2 Sofia Papagiannaki
530 11366070 Sofia Papagiannaki
        # Check malformed request: missing token
531 11366070 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
532 11366070 Sofia Papagiannaki
        post_data = """{"auth":{"auth_token":{"id":"%s"},
533 11366070 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
534 11366070 Sofia Papagiannaki
            self.user1.auth_token, self.user1.uuid)
535 11366070 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
536 11366070 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
537 11366070 Sofia Papagiannaki
        body = json.loads(r.content)
538 11366070 Sofia Papagiannaki
        self.assertTrue(body['badRequest']['message'].
539 11366070 Sofia Papagiannaki
                        startswith('Malformed request'))
540 11366070 Sofia Papagiannaki
541 11366070 Sofia Papagiannaki
        # Check bad request: inconsistent tenant
542 11366070 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
543 11366070 Sofia Papagiannaki
        post_data = """{"auth":{"token":{"id":"%s"},
544 11366070 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
545 11366070 Sofia Papagiannaki
            self.user1.auth_token, self.user2.uuid)
546 11366070 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
547 11366070 Sofia Papagiannaki
        self.assertEqual(r.status_code, 400)
548 11366070 Sofia Papagiannaki
        body = json.loads(r.content)
549 11366070 Sofia Papagiannaki
        self.assertEqual(body['badRequest']['message'],
550 11366070 Sofia Papagiannaki
                         'Not conforming tenantName')
551 11366070 Sofia Papagiannaki
552 a01eb018 Sofia Papagiannaki
        # Check bad request: inconsistent tenant
553 a01eb018 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
554 a01eb018 Sofia Papagiannaki
        post_data = """{"auth":{"token":{"id":"%s"},
555 a01eb018 Sofia Papagiannaki
                                "tenantName":""}}""" % (
556 a01eb018 Sofia Papagiannaki
            self.user1.auth_token)
557 a01eb018 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
558 a01eb018 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
559 a01eb018 Sofia Papagiannaki
560 f870efe2 Sofia Papagiannaki
        # Check successful json response
561 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
562 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
563 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
564 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
565 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.auth_token, self.user1.uuid)
566 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json')
567 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
568 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/json'))
569 f870efe2 Sofia Papagiannaki
        try:
570 f870efe2 Sofia Papagiannaki
            body = json.loads(r.content)
571 f870efe2 Sofia Papagiannaki
        except Exception, e:
572 f870efe2 Sofia Papagiannaki
            self.fail(e)
573 f870efe2 Sofia Papagiannaki
574 f870efe2 Sofia Papagiannaki
        try:
575 8cb96389 Sofia Papagiannaki
            token = body['access']['token']['id']
576 8cb96389 Sofia Papagiannaki
            user = body['access']['user']['id']
577 8cb96389 Sofia Papagiannaki
            service_catalog = body['access']['serviceCatalog']
578 f870efe2 Sofia Papagiannaki
        except KeyError:
579 f870efe2 Sofia Papagiannaki
            self.fail('Invalid response')
580 f870efe2 Sofia Papagiannaki
581 f870efe2 Sofia Papagiannaki
        self.assertEqual(token, self.user1.auth_token)
582 f870efe2 Sofia Papagiannaki
        self.assertEqual(user, self.user1.uuid)
583 f870efe2 Sofia Papagiannaki
        self.assertEqual(len(service_catalog), 3)
584 f870efe2 Sofia Papagiannaki
585 f870efe2 Sofia Papagiannaki
        # Check successful xml response
586 8cb96389 Sofia Papagiannaki
        url = reverse('astakos.api.tokens.authenticate')
587 f870efe2 Sofia Papagiannaki
        headers = {'HTTP_ACCEPT': 'application/xml'}
588 f870efe2 Sofia Papagiannaki
        post_data = """{"auth":{"passwordCredentials":{"username":"%s",
589 f870efe2 Sofia Papagiannaki
                                                       "password":"%s"},
590 f870efe2 Sofia Papagiannaki
                                "tenantName":"%s"}}""" % (
591 f870efe2 Sofia Papagiannaki
            self.user1.uuid, self.user1.auth_token, self.user1.uuid)
592 f870efe2 Sofia Papagiannaki
        r = client.post(url, post_data, content_type='application/json',
593 f870efe2 Sofia Papagiannaki
                        **headers)
594 f870efe2 Sofia Papagiannaki
        self.assertEqual(r.status_code, 200)
595 f870efe2 Sofia Papagiannaki
        self.assertTrue(r['Content-Type'].startswith('application/xml'))
596 49005665 Sofia Papagiannaki
#        try:
597 49005665 Sofia Papagiannaki
#            body = minidom.parseString(r.content)
598 49005665 Sofia Papagiannaki
#        except Exception, e:
599 49005665 Sofia Papagiannaki
#            self.fail(e)
600 8aaf4f0d Georgios D. Tsoukalas
601 8aaf4f0d Georgios D. Tsoukalas
602 8aaf4f0d Georgios D. Tsoukalas
class WrongPathAPITest(TestCase):
603 cb26c74e Georgios D. Tsoukalas
    def test_catch_wrong_account_paths(self, *args):
604 8aaf4f0d Georgios D. Tsoukalas
        path = get_service_path(astakos_services, 'account', 'v1.0')
605 8aaf4f0d Georgios D. Tsoukalas
        path = join_urls(BASE_HOST, path, 'nonexistent')
606 8aaf4f0d Georgios D. Tsoukalas
        response = self.client.get(path)
607 8aaf4f0d Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
608 8aaf4f0d Georgios D. Tsoukalas
        try:
609 8aaf4f0d Georgios D. Tsoukalas
            error = json.loads(response.content)
610 8aaf4f0d Georgios D. Tsoukalas
        except ValueError:
611 8aaf4f0d Georgios D. Tsoukalas
            self.assertTrue(False)
612 8aaf4f0d Georgios D. Tsoukalas
613 cb26c74e Georgios D. Tsoukalas
    def test_catch_wrong_identity_paths(self, *args):
614 8aaf4f0d Georgios D. Tsoukalas
        path = get_service_path(astakos_services, 'identity', 'v2.0')
615 8aaf4f0d Georgios D. Tsoukalas
        path = join_urls(BASE_HOST, path, 'nonexistent')
616 8aaf4f0d Georgios D. Tsoukalas
        response = self.client.get(path)
617 8aaf4f0d Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
618 8aaf4f0d Georgios D. Tsoukalas
        try:
619 8aaf4f0d Georgios D. Tsoukalas
            error = json.loads(response.content)
620 8aaf4f0d Georgios D. Tsoukalas
        except ValueError:
621 8aaf4f0d Georgios D. Tsoukalas
            self.assertTrue(False)