Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (13.1 kB)

1 1ac3349d Kostas Papadimitriou
# Copyright 2011 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 1ac3349d Kostas Papadimitriou
36 1ac3349d Kostas Papadimitriou
37 1ac3349d Kostas Papadimitriou
ROOT = '/astakos/api/'
38 1ac3349d Kostas Papadimitriou
u = lambda url: ROOT + url
39 1ac3349d Kostas Papadimitriou
40 1ac3349d Kostas Papadimitriou
41 1ac3349d Kostas Papadimitriou
class QuotaAPITest(TestCase):
42 1ac3349d Kostas Papadimitriou
    def test_0(self):
43 1ac3349d Kostas Papadimitriou
        client = Client()
44 1ac3349d Kostas Papadimitriou
        # custom service resources
45 1ac3349d Kostas Papadimitriou
        service1 = Service.objects.create(
46 1ac3349d Kostas Papadimitriou
            name="service1", api_url="http://service1.api")
47 1ac3349d Kostas Papadimitriou
        resource11 = {"name": "service1.resource11",
48 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
49 1ac3349d Kostas Papadimitriou
                      "allow_in_projects": True}
50 1ac3349d Kostas Papadimitriou
        r, _ = resources.add_resource(service1, resource11)
51 1ac3349d Kostas Papadimitriou
        resources.update_resource(r, 100)
52 1ac3349d Kostas Papadimitriou
        resource12 = {"name": "service1.resource12",
53 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
54 1ac3349d Kostas Papadimitriou
                      "unit": "bytes"}
55 1ac3349d Kostas Papadimitriou
        r, _ = resources.add_resource(service1, resource12)
56 1ac3349d Kostas Papadimitriou
        resources.update_resource(r, 1024)
57 1ac3349d Kostas Papadimitriou
58 1ac3349d Kostas Papadimitriou
        # create user
59 1ac3349d Kostas Papadimitriou
        user = get_local_user('test@grnet.gr')
60 1ac3349d Kostas Papadimitriou
        quotas.qh_sync_user(user)
61 1ac3349d Kostas Papadimitriou
62 1ac3349d Kostas Papadimitriou
        # create another service
63 1ac3349d Kostas Papadimitriou
        service2 = Service.objects.create(
64 1ac3349d Kostas Papadimitriou
            name="service2", api_url="http://service2.api")
65 1ac3349d Kostas Papadimitriou
        resource21 = {"name": "service2.resource21",
66 1ac3349d Kostas Papadimitriou
                      "desc": "resource11 desc",
67 1ac3349d Kostas Papadimitriou
                      "allow_in_projects": False}
68 1ac3349d Kostas Papadimitriou
        r, _ = resources.add_resource(service2, resource21)
69 1ac3349d Kostas Papadimitriou
        resources.update_resource(r, 3)
70 1ac3349d Kostas Papadimitriou
71 1ac3349d Kostas Papadimitriou
        resource_names = [r['name'] for r in
72 1ac3349d Kostas Papadimitriou
                          [resource11, resource12, resource21]]
73 1ac3349d Kostas Papadimitriou
74 1ac3349d Kostas Papadimitriou
        # get resources
75 1ac3349d Kostas Papadimitriou
        r = client.get(u('resources'))
76 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
77 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
78 1ac3349d Kostas Papadimitriou
        for name in resource_names:
79 1ac3349d Kostas Papadimitriou
            assertIn(name, body)
80 1ac3349d Kostas Papadimitriou
81 1ac3349d Kostas Papadimitriou
        # get quota
82 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas'))
83 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 401)
84 1ac3349d Kostas Papadimitriou
85 1ac3349d Kostas Papadimitriou
        headers = {'HTTP_X_AUTH_TOKEN': user.auth_token}
86 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas/'), **headers)
87 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
88 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
89 1ac3349d Kostas Papadimitriou
        system_quota = body['system']
90 1ac3349d Kostas Papadimitriou
        assertIn('system', body)
91 1ac3349d Kostas Papadimitriou
        for name in resource_names:
92 1ac3349d Kostas Papadimitriou
            assertIn(name, system_quota)
93 1ac3349d Kostas Papadimitriou
94 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas'))
95 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 401)
96 1ac3349d Kostas Papadimitriou
97 1ac3349d Kostas Papadimitriou
        s1_headers = {'HTTP_X_AUTH_TOKEN': service1.auth_token}
98 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas'), **s1_headers)
99 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
100 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
101 1ac3349d Kostas Papadimitriou
        assertIn(user.uuid, body)
102 1ac3349d Kostas Papadimitriou
103 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions'), **s1_headers)
104 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
105 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
106 1ac3349d Kostas Papadimitriou
        self.assertEqual(body, [])
107 1ac3349d Kostas Papadimitriou
108 1ac3349d Kostas Papadimitriou
        # issue some commissions
109 1ac3349d Kostas Papadimitriou
        commission_request = {
110 1ac3349d Kostas Papadimitriou
            "force": False,
111 1ac3349d Kostas Papadimitriou
            "auto_accept": False,
112 1ac3349d Kostas Papadimitriou
            "name": "my commission",
113 1ac3349d Kostas Papadimitriou
            "provisions": [
114 1ac3349d Kostas Papadimitriou
                {
115 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
116 1ac3349d Kostas Papadimitriou
                    "source": "system",
117 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
118 1ac3349d Kostas Papadimitriou
                    "quantity": 1
119 1ac3349d Kostas Papadimitriou
                },
120 1ac3349d Kostas Papadimitriou
                {
121 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
122 1ac3349d Kostas Papadimitriou
                    "source": "system",
123 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
124 1ac3349d Kostas Papadimitriou
                    "quantity": 30000
125 1ac3349d Kostas Papadimitriou
                }]}
126 1ac3349d Kostas Papadimitriou
127 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
128 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
129 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
130 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 413)
131 1ac3349d Kostas Papadimitriou
132 1ac3349d Kostas Papadimitriou
        commission_request = {
133 1ac3349d Kostas Papadimitriou
            "force": False,
134 1ac3349d Kostas Papadimitriou
            "auto_accept": False,
135 1ac3349d Kostas Papadimitriou
            "name": "my commission",
136 1ac3349d Kostas Papadimitriou
            "provisions": [
137 1ac3349d Kostas Papadimitriou
                {
138 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
139 1ac3349d Kostas Papadimitriou
                    "source": "system",
140 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
141 1ac3349d Kostas Papadimitriou
                    "quantity": 1
142 1ac3349d Kostas Papadimitriou
                },
143 1ac3349d Kostas Papadimitriou
                {
144 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
145 1ac3349d Kostas Papadimitriou
                    "source": "system",
146 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
147 1ac3349d Kostas Papadimitriou
                    "quantity": 100
148 1ac3349d Kostas Papadimitriou
                }]}
149 1ac3349d Kostas Papadimitriou
150 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
151 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
152 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
153 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
154 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
155 1ac3349d Kostas Papadimitriou
        serial = body['serial']
156 1ac3349d Kostas Papadimitriou
        self.assertEqual(serial, 1)
157 1ac3349d Kostas Papadimitriou
158 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
159 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
160 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
161 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
162 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
163 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], 2)
164 1ac3349d Kostas Papadimitriou
165 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
166 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
167 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
168 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
169 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
170 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], 3)
171 1ac3349d Kostas Papadimitriou
172 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions'), **s1_headers)
173 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
174 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
175 1ac3349d Kostas Papadimitriou
        self.assertEqual(body, [1, 2, 3])
176 1ac3349d Kostas Papadimitriou
177 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
178 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
179 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
180 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['serial'], serial)
181 1ac3349d Kostas Papadimitriou
        assertIn('issue_time', body)
182 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['provisions'], commission_request['provisions'])
183 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['name'], commission_request['name'])
184 1ac3349d Kostas Papadimitriou
185 1ac3349d Kostas Papadimitriou
        r = client.get(u('service_quotas?user=' + user.uuid), **s1_headers)
186 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
187 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
188 1ac3349d Kostas Papadimitriou
        user_quota = body[user.uuid]
189 1ac3349d Kostas Papadimitriou
        system_quota = user_quota['system']
190 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
191 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 3)
192 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 3)
193 1ac3349d Kostas Papadimitriou
194 1ac3349d Kostas Papadimitriou
        # resolve pending commissions
195 1ac3349d Kostas Papadimitriou
        resolve_data = {
196 1ac3349d Kostas Papadimitriou
            "accept": [1, 3],
197 1ac3349d Kostas Papadimitriou
            "reject": [2, 3, 4],
198 1ac3349d Kostas Papadimitriou
        }
199 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(resolve_data)
200 1ac3349d Kostas Papadimitriou
201 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/action'), post_data,
202 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **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
        self.assertEqual(body['accepted'], [1])
206 1ac3349d Kostas Papadimitriou
        self.assertEqual(body['rejected'], [2])
207 1ac3349d Kostas Papadimitriou
        failed = body['failed']
208 1ac3349d Kostas Papadimitriou
        self.assertEqual(len(failed), 2)
209 1ac3349d Kostas Papadimitriou
210 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
211 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
212 1ac3349d Kostas Papadimitriou
213 1ac3349d Kostas Papadimitriou
        # auto accept
214 1ac3349d Kostas Papadimitriou
        commission_request = {
215 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
216 1ac3349d Kostas Papadimitriou
            "name": "my commission",
217 1ac3349d Kostas Papadimitriou
            "provisions": [
218 1ac3349d Kostas Papadimitriou
                {
219 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
220 1ac3349d Kostas Papadimitriou
                    "source": "system",
221 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
222 1ac3349d Kostas Papadimitriou
                    "quantity": 1
223 1ac3349d Kostas Papadimitriou
                },
224 1ac3349d Kostas Papadimitriou
                {
225 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
226 1ac3349d Kostas Papadimitriou
                    "source": "system",
227 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
228 1ac3349d Kostas Papadimitriou
                    "quantity": 100
229 1ac3349d Kostas Papadimitriou
                }]}
230 1ac3349d Kostas Papadimitriou
231 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
232 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
233 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
234 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
235 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
236 1ac3349d Kostas Papadimitriou
        serial = body['serial']
237 1ac3349d Kostas Papadimitriou
        self.assertEqual(serial, 4)
238 1ac3349d Kostas Papadimitriou
239 1ac3349d Kostas Papadimitriou
        r = client.get(u('commissions/' + str(serial)), **s1_headers)
240 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
241 1ac3349d Kostas Papadimitriou
242 1ac3349d Kostas Papadimitriou
        # malformed
243 1ac3349d Kostas Papadimitriou
        commission_request = {
244 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
245 1ac3349d Kostas Papadimitriou
            "name": "my commission",
246 1ac3349d Kostas Papadimitriou
            "provisions": [
247 1ac3349d Kostas Papadimitriou
                {
248 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
249 1ac3349d Kostas Papadimitriou
                    "source": "system",
250 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
251 1ac3349d Kostas Papadimitriou
                }
252 1ac3349d Kostas Papadimitriou
            ]}
253 1ac3349d Kostas Papadimitriou
254 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
255 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
256 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
257 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
258 1ac3349d Kostas Papadimitriou
259 1ac3349d Kostas Papadimitriou
        commission_request = {
260 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
261 1ac3349d Kostas Papadimitriou
            "name": "my commission",
262 1ac3349d Kostas Papadimitriou
            "provisions": "dummy"}
263 1ac3349d Kostas Papadimitriou
264 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
265 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
266 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
267 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
268 1ac3349d Kostas Papadimitriou
269 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), commission_request,
270 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
271 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 400)
272 1ac3349d Kostas Papadimitriou
273 1ac3349d Kostas Papadimitriou
        # no holding
274 1ac3349d Kostas Papadimitriou
        commission_request = {
275 1ac3349d Kostas Papadimitriou
            "auto_accept": True,
276 1ac3349d Kostas Papadimitriou
            "name": "my commission",
277 1ac3349d Kostas Papadimitriou
            "provisions": [
278 1ac3349d Kostas Papadimitriou
                {
279 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
280 1ac3349d Kostas Papadimitriou
                    "source": "system",
281 1ac3349d Kostas Papadimitriou
                    "resource": "non existent",
282 1ac3349d Kostas Papadimitriou
                    "quantity": 1
283 1ac3349d Kostas Papadimitriou
                },
284 1ac3349d Kostas Papadimitriou
                {
285 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
286 1ac3349d Kostas Papadimitriou
                    "source": "system",
287 1ac3349d Kostas Papadimitriou
                    "resource": resource12['name'],
288 1ac3349d Kostas Papadimitriou
                    "quantity": 100
289 1ac3349d Kostas Papadimitriou
                }]}
290 1ac3349d Kostas Papadimitriou
291 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
292 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
293 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
294 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
295 1ac3349d Kostas Papadimitriou
296 1ac3349d Kostas Papadimitriou
        # release
297 1ac3349d Kostas Papadimitriou
        commission_request = {
298 1ac3349d Kostas Papadimitriou
            "provisions": [
299 1ac3349d Kostas Papadimitriou
                {
300 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
301 1ac3349d Kostas Papadimitriou
                    "source": "system",
302 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
303 1ac3349d Kostas Papadimitriou
                    "quantity": -1
304 1ac3349d Kostas Papadimitriou
                }
305 1ac3349d Kostas Papadimitriou
            ]}
306 1ac3349d Kostas Papadimitriou
307 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
308 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
309 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
310 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
311 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
312 1ac3349d Kostas Papadimitriou
        serial = body['serial']
313 1ac3349d Kostas Papadimitriou
314 1ac3349d Kostas Papadimitriou
        accept_data = {'accept': ""}
315 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
316 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
317 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
318 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
319 1ac3349d Kostas Papadimitriou
320 1ac3349d Kostas Papadimitriou
        reject_data = {'reject': ""}
321 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(accept_data)
322 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions/' + str(serial) + '/action'), post_data,
323 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
324 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 404)
325 1ac3349d Kostas Papadimitriou
326 1ac3349d Kostas Papadimitriou
        # force
327 1ac3349d Kostas Papadimitriou
        commission_request = {
328 1ac3349d Kostas Papadimitriou
            "force": True,
329 1ac3349d Kostas Papadimitriou
            "provisions": [
330 1ac3349d Kostas Papadimitriou
                {
331 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
332 1ac3349d Kostas Papadimitriou
                    "source": "system",
333 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
334 1ac3349d Kostas Papadimitriou
                    "quantity": 100
335 1ac3349d Kostas Papadimitriou
                }]}
336 1ac3349d Kostas Papadimitriou
337 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
338 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
339 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
340 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 201)
341 1ac3349d Kostas Papadimitriou
342 1ac3349d Kostas Papadimitriou
        commission_request = {
343 1ac3349d Kostas Papadimitriou
            "force": True,
344 1ac3349d Kostas Papadimitriou
            "provisions": [
345 1ac3349d Kostas Papadimitriou
                {
346 1ac3349d Kostas Papadimitriou
                    "holder": user.uuid,
347 1ac3349d Kostas Papadimitriou
                    "source": "system",
348 1ac3349d Kostas Papadimitriou
                    "resource": resource11['name'],
349 1ac3349d Kostas Papadimitriou
                    "quantity": -200
350 1ac3349d Kostas Papadimitriou
                }]}
351 1ac3349d Kostas Papadimitriou
352 1ac3349d Kostas Papadimitriou
        post_data = json.dumps(commission_request)
353 1ac3349d Kostas Papadimitriou
        r = client.post(u('commissions'), post_data,
354 1ac3349d Kostas Papadimitriou
                        content_type='application/json', **s1_headers)
355 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 413)
356 1ac3349d Kostas Papadimitriou
357 1ac3349d Kostas Papadimitriou
        r = client.get(u('quotas'), **headers)
358 1ac3349d Kostas Papadimitriou
        self.assertEqual(r.status_code, 200)
359 1ac3349d Kostas Papadimitriou
        body = json.loads(r.content)
360 1ac3349d Kostas Papadimitriou
        system_quota = body['system']
361 1ac3349d Kostas Papadimitriou
        r11 = system_quota[resource11['name']]
362 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['usage'], 102)
363 1ac3349d Kostas Papadimitriou
        self.assertEqual(r11['pending'], 101)