Statistics
| Branch: | Tag: | Revision:

root / astakosclient / astakosclient / tests.py @ 0d069390

History | View | Annotate | Download (40.8 kB)

1 57ba2dfc Ilias Tsitsimpis
#!/usr/bin/env python
2 57ba2dfc Ilias Tsitsimpis
#
3 57ba2dfc Ilias Tsitsimpis
# Copyright (C) 2012, 2013 GRNET S.A. All rights reserved.
4 57ba2dfc Ilias Tsitsimpis
#
5 57ba2dfc Ilias Tsitsimpis
# Redistribution and use in source and binary forms, with or
6 57ba2dfc Ilias Tsitsimpis
# without modification, are permitted provided that the following
7 57ba2dfc Ilias Tsitsimpis
# conditions are met:
8 57ba2dfc Ilias Tsitsimpis
#
9 57ba2dfc Ilias Tsitsimpis
#   1. Redistributions of source code must retain the above
10 57ba2dfc Ilias Tsitsimpis
#      copyright notice, this list of conditions and the following
11 57ba2dfc Ilias Tsitsimpis
#      disclaimer.
12 57ba2dfc Ilias Tsitsimpis
#
13 57ba2dfc Ilias Tsitsimpis
#   2. Redistributions in binary form must reproduce the above
14 57ba2dfc Ilias Tsitsimpis
#      copyright notice, this list of conditions and the following
15 57ba2dfc Ilias Tsitsimpis
#      disclaimer in the documentation and/or other materials
16 57ba2dfc Ilias Tsitsimpis
#      provided with the distribution.
17 57ba2dfc Ilias Tsitsimpis
#
18 57ba2dfc Ilias Tsitsimpis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 57ba2dfc Ilias Tsitsimpis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 57ba2dfc Ilias Tsitsimpis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 57ba2dfc Ilias Tsitsimpis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 57ba2dfc Ilias Tsitsimpis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 57ba2dfc Ilias Tsitsimpis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 57ba2dfc Ilias Tsitsimpis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 57ba2dfc Ilias Tsitsimpis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 57ba2dfc Ilias Tsitsimpis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 57ba2dfc Ilias Tsitsimpis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 57ba2dfc Ilias Tsitsimpis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 57ba2dfc Ilias Tsitsimpis
# POSSIBILITY OF SUCH DAMAGE.
30 57ba2dfc Ilias Tsitsimpis
#
31 57ba2dfc Ilias Tsitsimpis
# The views and conclusions contained in the software and
32 57ba2dfc Ilias Tsitsimpis
# documentation are those of the authors and should not be
33 57ba2dfc Ilias Tsitsimpis
# interpreted as representing official policies, either expressed
34 57ba2dfc Ilias Tsitsimpis
# or implied, of GRNET S.A.
35 57ba2dfc Ilias Tsitsimpis
36 57ba2dfc Ilias Tsitsimpis
"""Unit Tests for the astakos-client module
37 57ba2dfc Ilias Tsitsimpis

38 57ba2dfc Ilias Tsitsimpis
Provides unit tests for the code implementing
39 57ba2dfc Ilias Tsitsimpis
the astakos client library
40 57ba2dfc Ilias Tsitsimpis

41 57ba2dfc Ilias Tsitsimpis
"""
42 57ba2dfc Ilias Tsitsimpis
43 b173906e Ilias Tsitsimpis
import re
44 bc56a641 Ilias Tsitsimpis
import sys
45 57ba2dfc Ilias Tsitsimpis
import socket
46 454a1ad4 Ilias Tsitsimpis
import simplejson
47 57ba2dfc Ilias Tsitsimpis
48 57ba2dfc Ilias Tsitsimpis
import astakosclient
49 f93cc364 Ilias Tsitsimpis
from astakosclient import AstakosClient
50 f93cc364 Ilias Tsitsimpis
from astakosclient.errors import \
51 2377e7c2 Ilias Tsitsimpis
    AstakosClientException, Unauthorized, BadRequest, NotFound, \
52 fd420756 Ilias Tsitsimpis
    NoUserName, NoUUID, BadValue, QuotaLimit
53 57ba2dfc Ilias Tsitsimpis
54 57ba2dfc Ilias Tsitsimpis
# Use backported unittest functionality if Python < 2.7
55 bc56a641 Ilias Tsitsimpis
try:
56 bc56a641 Ilias Tsitsimpis
    import unittest2 as unittest
57 bc56a641 Ilias Tsitsimpis
except ImportError:
58 bc56a641 Ilias Tsitsimpis
    if sys.version_info < (2, 7):
59 bc56a641 Ilias Tsitsimpis
        raise Exception("The unittest2 package is required for Python < 2.7")
60 bc56a641 Ilias Tsitsimpis
    import unittest
61 57ba2dfc Ilias Tsitsimpis
62 57ba2dfc Ilias Tsitsimpis
63 57ba2dfc Ilias Tsitsimpis
# --------------------------------------------------------------------
64 57ba2dfc Ilias Tsitsimpis
# Helper functions
65 57ba2dfc Ilias Tsitsimpis
66 57ba2dfc Ilias Tsitsimpis
# ----------------------------
67 57ba2dfc Ilias Tsitsimpis
# This functions will be used as mocked requests
68 794c94e6 Ilias Tsitsimpis
def _request_offline(conn, method, url, **kwargs):
69 57ba2dfc Ilias Tsitsimpis
    """This request behaves as we were offline"""
70 57ba2dfc Ilias Tsitsimpis
    raise socket.gaierror
71 57ba2dfc Ilias Tsitsimpis
72 57ba2dfc Ilias Tsitsimpis
73 794c94e6 Ilias Tsitsimpis
def _request_status_302(conn, method, url, **kwargs):
74 57ba2dfc Ilias Tsitsimpis
    """This request returns 302"""
75 21190887 Ilias Tsitsimpis
    message = "FOUND"
76 57ba2dfc Ilias Tsitsimpis
    status = 302
77 57ba2dfc Ilias Tsitsimpis
    data = '<html>\r\n<head><title>302 Found</title></head>\r\n' \
78 57ba2dfc Ilias Tsitsimpis
        '<body bgcolor="white">\r\n<center><h1>302 Found</h1></center>\r\n' \
79 57ba2dfc Ilias Tsitsimpis
        '<hr><center>nginx/0.7.67</center>\r\n</body>\r\n</html>\r\n'
80 21190887 Ilias Tsitsimpis
    return (message, data, status)
81 57ba2dfc Ilias Tsitsimpis
82 57ba2dfc Ilias Tsitsimpis
83 794c94e6 Ilias Tsitsimpis
def _request_status_404(conn, method, url, **kwargs):
84 57ba2dfc Ilias Tsitsimpis
    """This request returns 404"""
85 21190887 Ilias Tsitsimpis
    message = "Not Found"
86 57ba2dfc Ilias Tsitsimpis
    status = 404
87 57ba2dfc Ilias Tsitsimpis
    data = '<html><head><title>404 Not Found</title></head>' \
88 57ba2dfc Ilias Tsitsimpis
        '<body><h1>Not Found</h1><p>The requested URL /foo was ' \
89 57ba2dfc Ilias Tsitsimpis
        'not found on this server.</p><hr><address>Apache Server ' \
90 57ba2dfc Ilias Tsitsimpis
        'at example.com Port 80</address></body></html>'
91 21190887 Ilias Tsitsimpis
    return (message, data, status)
92 57ba2dfc Ilias Tsitsimpis
93 57ba2dfc Ilias Tsitsimpis
94 108be31f Ilias Tsitsimpis
def _request_status_403(conn, method, url, **kwargs):
95 108be31f Ilias Tsitsimpis
    """This request returns 403"""
96 108be31f Ilias Tsitsimpis
    message = "UNAUTHORIZED"
97 108be31f Ilias Tsitsimpis
    status = 403
98 108be31f Ilias Tsitsimpis
    data = "Forbidden"
99 108be31f Ilias Tsitsimpis
    return (message, data, status)
100 108be31f Ilias Tsitsimpis
101 108be31f Ilias Tsitsimpis
102 794c94e6 Ilias Tsitsimpis
def _request_status_401(conn, method, url, **kwargs):
103 57ba2dfc Ilias Tsitsimpis
    """This request returns 401"""
104 21190887 Ilias Tsitsimpis
    message = "UNAUTHORIZED"
105 57ba2dfc Ilias Tsitsimpis
    status = 401
106 57ba2dfc Ilias Tsitsimpis
    data = "Invalid X-Auth-Token\n"
107 21190887 Ilias Tsitsimpis
    return (message, data, status)
108 57ba2dfc Ilias Tsitsimpis
109 57ba2dfc Ilias Tsitsimpis
110 794c94e6 Ilias Tsitsimpis
def _request_status_400(conn, method, url, **kwargs):
111 57ba2dfc Ilias Tsitsimpis
    """This request returns 400"""
112 21190887 Ilias Tsitsimpis
    message = "BAD REQUEST"
113 57ba2dfc Ilias Tsitsimpis
    status = 400
114 57ba2dfc Ilias Tsitsimpis
    data = "Method not allowed.\n"
115 21190887 Ilias Tsitsimpis
    return (message, data, status)
116 57ba2dfc Ilias Tsitsimpis
117 57ba2dfc Ilias Tsitsimpis
118 794c94e6 Ilias Tsitsimpis
def _request_ok(conn, method, url, **kwargs):
119 57ba2dfc Ilias Tsitsimpis
    """This request behaves like original Astakos does"""
120 b173906e Ilias Tsitsimpis
    if re.match('/?' + astakosclient.API_AUTHENTICATE, url) is not None:
121 b173906e Ilias Tsitsimpis
        print "here 1"
122 794c94e6 Ilias Tsitsimpis
        return _req_authenticate(conn, method, url, **kwargs)
123 b173906e Ilias Tsitsimpis
    elif re.match('/?' + astakosclient.API_USERCATALOGS, url) is not None:
124 b173906e Ilias Tsitsimpis
        print "here 2"
125 794c94e6 Ilias Tsitsimpis
        return _req_catalogs(conn, method, url, **kwargs)
126 b173906e Ilias Tsitsimpis
    elif re.match('/?' + astakosclient.API_RESOURCES, url) is not None:
127 b173906e Ilias Tsitsimpis
        print "here 3"
128 c4644612 Ilias Tsitsimpis
        return _req_resources(conn, method, url, **kwargs)
129 b173906e Ilias Tsitsimpis
    elif re.match('/?' + astakosclient.API_QUOTAS, url) is not None:
130 baeb2ba5 Ilias Tsitsimpis
        return _req_quotas(conn, method, url, **kwargs)
131 b173906e Ilias Tsitsimpis
    elif re.match('/?' + astakosclient.API_COMMISSIONS, url) is not None:
132 fd420756 Ilias Tsitsimpis
        return _req_commission(conn, method, url, **kwargs)
133 b173906e Ilias Tsitsimpis
    elif re.match('/?' + astakosclient.API_TOKENS, url) is not None:
134 108be31f Ilias Tsitsimpis
        return _req_endpoints(conn, method, url, **kwargs)
135 57ba2dfc Ilias Tsitsimpis
    else:
136 b173906e Ilias Tsitsimpis
        print "here 4"
137 794c94e6 Ilias Tsitsimpis
        return _request_status_404(conn, method, url, **kwargs)
138 57ba2dfc Ilias Tsitsimpis
139 57ba2dfc Ilias Tsitsimpis
140 794c94e6 Ilias Tsitsimpis
def _req_authenticate(conn, method, url, **kwargs):
141 57ba2dfc Ilias Tsitsimpis
    """Check if user exists and return his profile"""
142 c4644612 Ilias Tsitsimpis
    global user_1, user_2, token_1, token_2
143 57ba2dfc Ilias Tsitsimpis
144 d4789cd4 Ilias Tsitsimpis
    # Check input
145 57ba2dfc Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
146 794c94e6 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
147 57ba2dfc Ilias Tsitsimpis
    if method != "GET":
148 794c94e6 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
149 baeb2ba5 Ilias Tsitsimpis
    token = kwargs['headers'].get('X-Auth-Token')
150 57ba2dfc Ilias Tsitsimpis
    if token == token_1:
151 344d5c90 Ilias Tsitsimpis
        user = dict(user_1)
152 57ba2dfc Ilias Tsitsimpis
    elif token == token_2:
153 344d5c90 Ilias Tsitsimpis
        user = dict(user_2)
154 57ba2dfc Ilias Tsitsimpis
    else:
155 57ba2dfc Ilias Tsitsimpis
        # No user found
156 794c94e6 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
157 57ba2dfc Ilias Tsitsimpis
158 d4789cd4 Ilias Tsitsimpis
    # Return
159 344d5c90 Ilias Tsitsimpis
    if "usage=1" not in url:
160 57ba2dfc Ilias Tsitsimpis
        # Strip `usage' key from `user'
161 344d5c90 Ilias Tsitsimpis
        del user['usage']
162 21190887 Ilias Tsitsimpis
    return ("", simplejson.dumps(user), 200)
163 57ba2dfc Ilias Tsitsimpis
164 57ba2dfc Ilias Tsitsimpis
165 794c94e6 Ilias Tsitsimpis
def _req_catalogs(conn, method, url, **kwargs):
166 57ba2dfc Ilias Tsitsimpis
    """Return user catalogs"""
167 d071e6f1 Ilias Tsitsimpis
    global token_1, token_2, user_1, user_2
168 d071e6f1 Ilias Tsitsimpis
169 d4789cd4 Ilias Tsitsimpis
    # Check input
170 d071e6f1 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
171 794c94e6 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
172 d071e6f1 Ilias Tsitsimpis
    if method != "POST":
173 794c94e6 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
174 baeb2ba5 Ilias Tsitsimpis
    token = kwargs['headers'].get('X-Auth-Token')
175 d4789cd4 Ilias Tsitsimpis
    if token != token_1 and token != token_2:
176 794c94e6 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
177 d4789cd4 Ilias Tsitsimpis
178 d4789cd4 Ilias Tsitsimpis
    # Return
179 d4789cd4 Ilias Tsitsimpis
    body = simplejson.loads(kwargs['body'])
180 aaf0a42c Ilias Tsitsimpis
    if 'uuids' in body:
181 aaf0a42c Ilias Tsitsimpis
        # Return uuid_catalog
182 aaf0a42c Ilias Tsitsimpis
        uuids = body['uuids']
183 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
184 aaf0a42c Ilias Tsitsimpis
        if user_1['uuid'] in uuids:
185 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['uuid']] = user_1['username']
186 aaf0a42c Ilias Tsitsimpis
        if user_2['uuid'] in uuids:
187 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['uuid']] = user_2['username']
188 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": catalogs}
189 aaf0a42c Ilias Tsitsimpis
    elif 'displaynames' in body:
190 aaf0a42c Ilias Tsitsimpis
        # Return displayname_catalog
191 aaf0a42c Ilias Tsitsimpis
        names = body['displaynames']
192 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
193 aaf0a42c Ilias Tsitsimpis
        if user_1['username'] in names:
194 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['username']] = user_1['uuid']
195 aaf0a42c Ilias Tsitsimpis
        if user_2['username'] in names:
196 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['username']] = user_2['uuid']
197 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": catalogs, "uuid_catalog": {}}
198 aaf0a42c Ilias Tsitsimpis
    else:
199 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": {}}
200 21190887 Ilias Tsitsimpis
    return ("", simplejson.dumps(return_catalog), 200)
201 57ba2dfc Ilias Tsitsimpis
202 57ba2dfc Ilias Tsitsimpis
203 c4644612 Ilias Tsitsimpis
def _req_resources(conn, method, url, **kwargs):
204 c4644612 Ilias Tsitsimpis
    """Return quota resources"""
205 c4644612 Ilias Tsitsimpis
    global resources
206 c4644612 Ilias Tsitsimpis
207 c4644612 Ilias Tsitsimpis
    # Check input
208 c4644612 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
209 c4644612 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
210 c4644612 Ilias Tsitsimpis
    if method != "GET":
211 c4644612 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
212 c4644612 Ilias Tsitsimpis
213 c4644612 Ilias Tsitsimpis
    # Return
214 c4644612 Ilias Tsitsimpis
    return ("", simplejson.dumps(resources), 200)
215 c4644612 Ilias Tsitsimpis
216 c4644612 Ilias Tsitsimpis
217 baeb2ba5 Ilias Tsitsimpis
def _req_quotas(conn, method, url, **kwargs):
218 baeb2ba5 Ilias Tsitsimpis
    """Return quotas for user_1"""
219 baeb2ba5 Ilias Tsitsimpis
    global token_1, quotas
220 baeb2ba5 Ilias Tsitsimpis
221 baeb2ba5 Ilias Tsitsimpis
    # Check input
222 baeb2ba5 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
223 baeb2ba5 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
224 baeb2ba5 Ilias Tsitsimpis
    if method != "GET":
225 baeb2ba5 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
226 baeb2ba5 Ilias Tsitsimpis
    token = kwargs['headers'].get('X-Auth-Token')
227 baeb2ba5 Ilias Tsitsimpis
    if token != token_1:
228 baeb2ba5 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
229 baeb2ba5 Ilias Tsitsimpis
230 baeb2ba5 Ilias Tsitsimpis
    # Return
231 baeb2ba5 Ilias Tsitsimpis
    return ("", simplejson.dumps(quotas), 200)
232 baeb2ba5 Ilias Tsitsimpis
233 baeb2ba5 Ilias Tsitsimpis
234 fd420756 Ilias Tsitsimpis
def _req_commission(conn, method, url, **kwargs):
235 fd420756 Ilias Tsitsimpis
    """Perform a commission for user_1"""
236 7a0180ef Ilias Tsitsimpis
    global token_1, pending_commissions, \
237 7a0180ef Ilias Tsitsimpis
        commission_successful_response, commission_failure_response
238 fd420756 Ilias Tsitsimpis
239 fd420756 Ilias Tsitsimpis
    # Check input
240 fd420756 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
241 fd420756 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
242 fd420756 Ilias Tsitsimpis
    token = kwargs['headers'].get('X-Auth-Token')
243 fd420756 Ilias Tsitsimpis
    if token != token_1:
244 fd420756 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
245 fd420756 Ilias Tsitsimpis
246 7a0180ef Ilias Tsitsimpis
    if method == "POST":
247 7a0180ef Ilias Tsitsimpis
        if 'body' not in kwargs:
248 7a0180ef Ilias Tsitsimpis
            return _request_status_400(conn, method, url, **kwargs)
249 7a0180ef Ilias Tsitsimpis
        body = simplejson.loads(unicode(kwargs['body']))
250 b173906e Ilias Tsitsimpis
        if re.match('/?'+astakosclient.API_COMMISSIONS+'$', url) is not None:
251 805e294c Ilias Tsitsimpis
            # Issue Commission
252 805e294c Ilias Tsitsimpis
            # Check if we have enough resources to give
253 805e294c Ilias Tsitsimpis
            if body['provisions'][1]['quantity'] > 420000000:
254 805e294c Ilias Tsitsimpis
                return ("", simplejson.dumps(commission_failure_response), 413)
255 805e294c Ilias Tsitsimpis
            else:
256 805e294c Ilias Tsitsimpis
                return \
257 805e294c Ilias Tsitsimpis
                    ("", simplejson.dumps(commission_successful_response), 200)
258 7a0180ef Ilias Tsitsimpis
        else:
259 805e294c Ilias Tsitsimpis
            # Issue commission action
260 805e294c Ilias Tsitsimpis
            serial = url.split('/')[4]
261 81875157 Ilias Tsitsimpis
            if serial == "action":
262 81875157 Ilias Tsitsimpis
                # Resolve multiple actions
263 81875157 Ilias Tsitsimpis
                if body == resolve_commissions_req:
264 81875157 Ilias Tsitsimpis
                    return ("", simplejson.dumps(resolve_commissions_rep), 200)
265 81875157 Ilias Tsitsimpis
                else:
266 81875157 Ilias Tsitsimpis
                    return _request_status_400(conn, method, url, **kwargs)
267 81875157 Ilias Tsitsimpis
            else:
268 81875157 Ilias Tsitsimpis
                # Issue action for one commission
269 81875157 Ilias Tsitsimpis
                if serial != str(57):
270 81875157 Ilias Tsitsimpis
                    return _request_status_404(conn, method, url, **kwargs)
271 81875157 Ilias Tsitsimpis
                if len(body) != 1:
272 81875157 Ilias Tsitsimpis
                    return _request_status_400(conn, method, url, **kwargs)
273 81875157 Ilias Tsitsimpis
                if "accept" not in body.keys() and "reject" not in body.keys():
274 81875157 Ilias Tsitsimpis
                    return _request_status_400(conn, method, url, **kwargs)
275 81875157 Ilias Tsitsimpis
                return ("", "", 200)
276 805e294c Ilias Tsitsimpis
277 7a0180ef Ilias Tsitsimpis
    elif method == "GET":
278 b173906e Ilias Tsitsimpis
        if re.match('/?'+astakosclient.API_COMMISSIONS+'$', url) is not None:
279 994f37b6 Ilias Tsitsimpis
            # Return pending commission
280 994f37b6 Ilias Tsitsimpis
            return ("", simplejson.dumps(pending_commissions), 200)
281 994f37b6 Ilias Tsitsimpis
        else:
282 994f37b6 Ilias Tsitsimpis
            # Return commissions's description
283 b173906e Ilias Tsitsimpis
            serial = re.sub('/?' + astakosclient.API_COMMISSIONS, '', url)[1:]
284 994f37b6 Ilias Tsitsimpis
            if serial == str(57):
285 994f37b6 Ilias Tsitsimpis
                return ("", simplejson.dumps(commission_description), 200)
286 994f37b6 Ilias Tsitsimpis
            else:
287 994f37b6 Ilias Tsitsimpis
                return _request_status_404(conn, method, url, **kwargs)
288 fd420756 Ilias Tsitsimpis
    else:
289 7a0180ef Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
290 fd420756 Ilias Tsitsimpis
291 fd420756 Ilias Tsitsimpis
292 108be31f Ilias Tsitsimpis
def _req_endpoints(conn, method, url, **kwargs):
293 108be31f Ilias Tsitsimpis
    """Request endpoints"""
294 108be31f Ilias Tsitsimpis
    global token_1, endpoints
295 108be31f Ilias Tsitsimpis
296 108be31f Ilias Tsitsimpis
    # Check input
297 108be31f Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
298 108be31f Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
299 b173906e Ilias Tsitsimpis
    if method != "POST":
300 b173906e Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
301 108be31f Ilias Tsitsimpis
302 108be31f Ilias Tsitsimpis
    token_head = kwargs['headers'].get('X-Auth-Token')
303 b173906e Ilias Tsitsimpis
    if method != "POST":
304 b173906e Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
305 b173906e Ilias Tsitsimpis
    body = simplejson.loads(kwargs['body'])
306 b173906e Ilias Tsitsimpis
    token_body = body['auth']['token']['id']
307 b173906e Ilias Tsitsimpis
    if token_head != token_body:
308 b173906e Ilias Tsitsimpis
        return _request_status_403(conn, method, url, **kwargs)
309 b173906e Ilias Tsitsimpis
    if token_body != token_1:
310 b173906e Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
311 b173906e Ilias Tsitsimpis
    # Return
312 b173906e Ilias Tsitsimpis
    return ("", simplejson.dumps(user_info_endpoints), 200)
313 108be31f Ilias Tsitsimpis
314 108be31f Ilias Tsitsimpis
315 57ba2dfc Ilias Tsitsimpis
# ----------------------------
316 57ba2dfc Ilias Tsitsimpis
# Mock the actual _doRequest
317 794c94e6 Ilias Tsitsimpis
def _mock_request(new_requests):
318 57ba2dfc Ilias Tsitsimpis
    """Mock the actual request
319 57ba2dfc Ilias Tsitsimpis

320 57ba2dfc Ilias Tsitsimpis
    Given a list of requests to use (in rotation),
321 57ba2dfc Ilias Tsitsimpis
    replace the original _doRequest function with
322 57ba2dfc Ilias Tsitsimpis
    a new one
323 57ba2dfc Ilias Tsitsimpis

324 57ba2dfc Ilias Tsitsimpis
    """
325 57ba2dfc Ilias Tsitsimpis
    def _mock(conn, method, url, **kwargs):
326 57ba2dfc Ilias Tsitsimpis
        # Get first request
327 57ba2dfc Ilias Tsitsimpis
        request = _mock.requests[0]
328 57ba2dfc Ilias Tsitsimpis
        # Rotate requests
329 57ba2dfc Ilias Tsitsimpis
        _mock.requests = _mock.requests[1:] + _mock.requests[:1]
330 57ba2dfc Ilias Tsitsimpis
        # Use first request
331 b2a2fe7a Ilias Tsitsimpis
        return request(conn, method, url, **kwargs)
332 57ba2dfc Ilias Tsitsimpis
333 57ba2dfc Ilias Tsitsimpis
    _mock.requests = new_requests
334 57ba2dfc Ilias Tsitsimpis
    # Replace `_doRequest' with our `_mock'
335 794c94e6 Ilias Tsitsimpis
    astakosclient._do_request = _mock
336 57ba2dfc Ilias Tsitsimpis
337 57ba2dfc Ilias Tsitsimpis
338 57ba2dfc Ilias Tsitsimpis
# ----------------------------
339 57ba2dfc Ilias Tsitsimpis
# Local users
340 26498848 Giorgos Korfiatis
token_1 = "skzleaFlBl+fasFdaf24sx"
341 344d5c90 Ilias Tsitsimpis
user_1 = \
342 454a1ad4 Ilias Tsitsimpis
    {"username": "user1@example.com",
343 454a1ad4 Ilias Tsitsimpis
     "auth_token_created": 1359386939000,
344 454a1ad4 Ilias Tsitsimpis
     "name": "Example User One",
345 454a1ad4 Ilias Tsitsimpis
     "email": ["user1@example.com"],
346 454a1ad4 Ilias Tsitsimpis
     "auth_token_expires": 1361978939000,
347 454a1ad4 Ilias Tsitsimpis
     "id": 108,
348 344d5c90 Ilias Tsitsimpis
     "uuid": "73917abc-abcd-477e-a1f1-1763abcdefab",
349 344d5c90 Ilias Tsitsimpis
     "usage": [
350 344d5c90 Ilias Tsitsimpis
         {"currValue": 42949672960,
351 344d5c90 Ilias Tsitsimpis
          "display_name": "System Disk",
352 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.disk"},
353 344d5c90 Ilias Tsitsimpis
         {"currValue": 4,
354 344d5c90 Ilias Tsitsimpis
          "display_name": "CPU",
355 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.cpu"},
356 344d5c90 Ilias Tsitsimpis
         {"currValue": 4294967296,
357 344d5c90 Ilias Tsitsimpis
          "display_name": "RAM",
358 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.ram"},
359 344d5c90 Ilias Tsitsimpis
         {"currValue": 3,
360 344d5c90 Ilias Tsitsimpis
          "display_name": "VM",
361 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.vm"},
362 344d5c90 Ilias Tsitsimpis
         {"currValue": 0,
363 344d5c90 Ilias Tsitsimpis
          "display_name": "private network",
364 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.network.private"},
365 344d5c90 Ilias Tsitsimpis
         {"currValue": 152,
366 344d5c90 Ilias Tsitsimpis
          "display_name": "Storage Space",
367 344d5c90 Ilias Tsitsimpis
          "name": "pithos+.diskspace"}]}
368 57ba2dfc Ilias Tsitsimpis
369 26498848 Giorgos Korfiatis
token_2 = "fasdfDSFdf98923DF+sdfk"
370 344d5c90 Ilias Tsitsimpis
user_2 = \
371 454a1ad4 Ilias Tsitsimpis
    {"username": "user2@example.com",
372 454a1ad4 Ilias Tsitsimpis
     "auth_token_created": 1358386938997,
373 454a1ad4 Ilias Tsitsimpis
     "name": "Example User Two",
374 454a1ad4 Ilias Tsitsimpis
     "email": ["user1@example.com"],
375 454a1ad4 Ilias Tsitsimpis
     "auth_token_expires": 1461998939000,
376 454a1ad4 Ilias Tsitsimpis
     "id": 109,
377 344d5c90 Ilias Tsitsimpis
     "uuid": "73917bca-1234-5678-a1f1-1763abcdefab",
378 344d5c90 Ilias Tsitsimpis
     "usage": [
379 344d5c90 Ilias Tsitsimpis
         {"currValue": 68719476736,
380 344d5c90 Ilias Tsitsimpis
          "display_name": "System Disk",
381 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.disk"},
382 344d5c90 Ilias Tsitsimpis
         {"currValue": 1,
383 344d5c90 Ilias Tsitsimpis
          "display_name": "CPU",
384 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.cpu"},
385 344d5c90 Ilias Tsitsimpis
         {"currValue": 1073741824,
386 344d5c90 Ilias Tsitsimpis
          "display_name": "RAM",
387 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.ram"},
388 344d5c90 Ilias Tsitsimpis
         {"currValue": 2,
389 344d5c90 Ilias Tsitsimpis
          "display_name": "VM",
390 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.vm"},
391 344d5c90 Ilias Tsitsimpis
         {"currValue": 1,
392 344d5c90 Ilias Tsitsimpis
          "display_name": "private network",
393 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.network.private"},
394 344d5c90 Ilias Tsitsimpis
         {"currValue": 2341634510,
395 344d5c90 Ilias Tsitsimpis
          "display_name": "Storage Space",
396 344d5c90 Ilias Tsitsimpis
          "name": "pithos+.diskspace"}]}
397 bc56a641 Ilias Tsitsimpis
398 c4644612 Ilias Tsitsimpis
resources = {
399 c4644612 Ilias Tsitsimpis
    "cyclades.vm": {
400 c4644612 Ilias Tsitsimpis
        "unit": None,
401 c4644612 Ilias Tsitsimpis
        "description": "Number of virtual machines",
402 c4644612 Ilias Tsitsimpis
        "service": "cyclades"},
403 c4644612 Ilias Tsitsimpis
    "cyclades.ram": {
404 c4644612 Ilias Tsitsimpis
        "unit": "bytes",
405 c4644612 Ilias Tsitsimpis
        "description": "Virtual machine memory",
406 c4644612 Ilias Tsitsimpis
        "service": "cyclades"}}
407 c4644612 Ilias Tsitsimpis
408 25a04cdd Ilias Tsitsimpis
user_info_endpoints = \
409 25a04cdd Ilias Tsitsimpis
    {'serviceCatalog': [
410 25a04cdd Ilias Tsitsimpis
        {'endpoints': [{
411 25a04cdd Ilias Tsitsimpis
            'SNF:uiURL': 'https://node1.example.com/ui/',
412 25a04cdd Ilias Tsitsimpis
            'adminURL': 'https://node1.example.com/v1',
413 25a04cdd Ilias Tsitsimpis
            'internalUrl': 'https://node1.example.com/v1',
414 25a04cdd Ilias Tsitsimpis
            'publicURL': 'https://node1.example.com/v1',
415 25a04cdd Ilias Tsitsimpis
            'region': 'cyclades'}],
416 25a04cdd Ilias Tsitsimpis
         'name': 'cyclades',
417 25a04cdd Ilias Tsitsimpis
         'type': 'compute'},
418 25a04cdd Ilias Tsitsimpis
        {'endpoints': [{
419 25a04cdd Ilias Tsitsimpis
            'SNF:uiURL': 'https://node2.example.com/ui/',
420 25a04cdd Ilias Tsitsimpis
            'adminURL': 'https://node2.example.com/v1',
421 25a04cdd Ilias Tsitsimpis
            'internalUrl': 'https://node2.example.com/v1',
422 25a04cdd Ilias Tsitsimpis
            'publicURL': 'https://node2.example.com/v1',
423 25a04cdd Ilias Tsitsimpis
            'region': 'pithos'}],
424 25a04cdd Ilias Tsitsimpis
         'name': 'pithos',
425 25a04cdd Ilias Tsitsimpis
         'type': 'storage'}],
426 25a04cdd Ilias Tsitsimpis
     'token': {
427 25a04cdd Ilias Tsitsimpis
         'expires': '2013-06-19T15:23:59.975572+00:00',
428 25a04cdd Ilias Tsitsimpis
         'id': token_1,
429 25a04cdd Ilias Tsitsimpis
         'tenant': {
430 25a04cdd Ilias Tsitsimpis
             'id': user_1,
431 25a04cdd Ilias Tsitsimpis
             'name': 'Firstname Lastname'}},
432 25a04cdd Ilias Tsitsimpis
     'user': {
433 25a04cdd Ilias Tsitsimpis
         'id': user_1,
434 25a04cdd Ilias Tsitsimpis
         'name': 'Firstname Lastname',
435 25a04cdd Ilias Tsitsimpis
         'roles': [{'id': 1, 'name': 'default'}],
436 25a04cdd Ilias Tsitsimpis
         'roles_links': []}}
437 25a04cdd Ilias Tsitsimpis
438 baeb2ba5 Ilias Tsitsimpis
quotas = {
439 baeb2ba5 Ilias Tsitsimpis
    "system": {
440 baeb2ba5 Ilias Tsitsimpis
        "cyclades.ram": {
441 480974e6 Giorgos Korfiatis
            "pending": 0,
442 baeb2ba5 Ilias Tsitsimpis
            "limit": 1073741824,
443 480974e6 Giorgos Korfiatis
            "usage": 536870912},
444 baeb2ba5 Ilias Tsitsimpis
        "cyclades.vm": {
445 480974e6 Giorgos Korfiatis
            "pending": 0,
446 baeb2ba5 Ilias Tsitsimpis
            "limit": 2,
447 480974e6 Giorgos Korfiatis
            "usage": 2}},
448 baeb2ba5 Ilias Tsitsimpis
    "project:1": {
449 baeb2ba5 Ilias Tsitsimpis
        "cyclades.ram": {
450 480974e6 Giorgos Korfiatis
            "pending": 0,
451 baeb2ba5 Ilias Tsitsimpis
            "limit": 2147483648,
452 480974e6 Giorgos Korfiatis
            "usage": 2147483648},
453 baeb2ba5 Ilias Tsitsimpis
        "cyclades.vm": {
454 480974e6 Giorgos Korfiatis
            "pending": 1,
455 baeb2ba5 Ilias Tsitsimpis
            "limit": 5,
456 480974e6 Giorgos Korfiatis
            "usage": 2}}}
457 baeb2ba5 Ilias Tsitsimpis
458 fd420756 Ilias Tsitsimpis
commission_request = {
459 fd420756 Ilias Tsitsimpis
    "force": False,
460 fd420756 Ilias Tsitsimpis
    "auto_accept": False,
461 3a1bed03 Giorgos Korfiatis
    "name": "my commission",
462 fd420756 Ilias Tsitsimpis
    "provisions": [
463 fd420756 Ilias Tsitsimpis
        {
464 fd420756 Ilias Tsitsimpis
            "holder": "c02f315b-7d84-45bc-a383-552a3f97d2ad",
465 fd420756 Ilias Tsitsimpis
            "source": "system",
466 fd420756 Ilias Tsitsimpis
            "resource": "cyclades.vm",
467 fd420756 Ilias Tsitsimpis
            "quantity": 1
468 fd420756 Ilias Tsitsimpis
        },
469 fd420756 Ilias Tsitsimpis
        {
470 fd420756 Ilias Tsitsimpis
            "holder": "c02f315b-7d84-45bc-a383-552a3f97d2ad",
471 fd420756 Ilias Tsitsimpis
            "source": "system",
472 fd420756 Ilias Tsitsimpis
            "resource": "cyclades.ram",
473 fd420756 Ilias Tsitsimpis
            "quantity": 30000
474 fd420756 Ilias Tsitsimpis
        }]}
475 fd420756 Ilias Tsitsimpis
476 fd420756 Ilias Tsitsimpis
commission_successful_response = {"serial": 57}
477 fd420756 Ilias Tsitsimpis
478 fd420756 Ilias Tsitsimpis
commission_failure_response = {
479 fd420756 Ilias Tsitsimpis
    "overLimit": {
480 fd420756 Ilias Tsitsimpis
        "message": "a human-readable error message",
481 fd420756 Ilias Tsitsimpis
        "code": 413,
482 fd420756 Ilias Tsitsimpis
        "data": {
483 fd420756 Ilias Tsitsimpis
            "provision": {
484 fd420756 Ilias Tsitsimpis
                "holder": "c02f315b-7d84-45bc-a383-552a3f97d2ad",
485 fd420756 Ilias Tsitsimpis
                "source": "system",
486 fd420756 Ilias Tsitsimpis
                "resource": "cyclades.ram",
487 fd420756 Ilias Tsitsimpis
                "quantity": 520000000},
488 fd420756 Ilias Tsitsimpis
            "name": "NoCapacityError",
489 e311d555 Giorgos Korfiatis
            "limit": 600000000,
490 e311d555 Giorgos Korfiatis
            "usage": 180000000}}}
491 fd420756 Ilias Tsitsimpis
492 7a0180ef Ilias Tsitsimpis
pending_commissions = [100, 200]
493 7a0180ef Ilias Tsitsimpis
494 994f37b6 Ilias Tsitsimpis
commission_description = {
495 994f37b6 Ilias Tsitsimpis
    "serial": 57,
496 164e64d5 Giorgos Korfiatis
    "issue_time": "2013-04-08T10:19:15.0373+00:00",
497 3a1bed03 Giorgos Korfiatis
    "name": "a commission",
498 994f37b6 Ilias Tsitsimpis
    "provisions": [
499 994f37b6 Ilias Tsitsimpis
        {
500 994f37b6 Ilias Tsitsimpis
            "holder": "c02f315b-7d84-45bc-a383-552a3f97d2ad",
501 994f37b6 Ilias Tsitsimpis
            "source": "system",
502 994f37b6 Ilias Tsitsimpis
            "resource": "cyclades.vm",
503 994f37b6 Ilias Tsitsimpis
            "quantity": 1
504 994f37b6 Ilias Tsitsimpis
        },
505 994f37b6 Ilias Tsitsimpis
        {
506 994f37b6 Ilias Tsitsimpis
            "holder": "c02f315b-7d84-45bc-a383-552a3f97d2ad",
507 994f37b6 Ilias Tsitsimpis
            "source": "system",
508 994f37b6 Ilias Tsitsimpis
            "resource": "cyclades.ram",
509 994f37b6 Ilias Tsitsimpis
            "quantity": 536870912
510 994f37b6 Ilias Tsitsimpis
        }]}
511 994f37b6 Ilias Tsitsimpis
512 81875157 Ilias Tsitsimpis
resolve_commissions_req = {
513 81875157 Ilias Tsitsimpis
    "accept": [56, 57],
514 81875157 Ilias Tsitsimpis
    "reject": [56, 58, 59]}
515 81875157 Ilias Tsitsimpis
516 81875157 Ilias Tsitsimpis
resolve_commissions_rep = {
517 81875157 Ilias Tsitsimpis
    "accepted": [57],
518 81875157 Ilias Tsitsimpis
    "rejected": [59],
519 81875157 Ilias Tsitsimpis
    "failed": [
520 81875157 Ilias Tsitsimpis
        [56, {
521 81875157 Ilias Tsitsimpis
            "badRequest": {
522 81875157 Ilias Tsitsimpis
                "message": "cannot both accept and reject serial 56",
523 81875157 Ilias Tsitsimpis
                "code": 400}}],
524 81875157 Ilias Tsitsimpis
        [58, {
525 81875157 Ilias Tsitsimpis
            "itemNotFound": {
526 81875157 Ilias Tsitsimpis
                "message": "serial 58 does not exist",
527 81875157 Ilias Tsitsimpis
                "code": 404}}]]}
528 81875157 Ilias Tsitsimpis
529 bc56a641 Ilias Tsitsimpis
530 bc56a641 Ilias Tsitsimpis
# --------------------------------------------------------------------
531 bc56a641 Ilias Tsitsimpis
# The actual tests
532 bc56a641 Ilias Tsitsimpis
533 bc56a641 Ilias Tsitsimpis
class TestCallAstakos(unittest.TestCase):
534 bc56a641 Ilias Tsitsimpis
    """Test cases for function _callAstakos"""
535 bc56a641 Ilias Tsitsimpis
536 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
537 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we don't have internet access
538 b2a2fe7a Ilias Tsitsimpis
    def _offline(self, pool):
539 bc56a641 Ilias Tsitsimpis
        global token_1
540 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline])
541 bc56a641 Ilias Tsitsimpis
        try:
542 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
543 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(token_1, astakosclient.API_AUTHENTICATE)
544 66208bc7 Ilias Tsitsimpis
        except AstakosClientException:
545 bc56a641 Ilias Tsitsimpis
            pass
546 bc56a641 Ilias Tsitsimpis
        else:
547 66208bc7 Ilias Tsitsimpis
            self.fail("Should have raised AstakosClientException")
548 bc56a641 Ilias Tsitsimpis
549 794c94e6 Ilias Tsitsimpis
    def test_offline(self):
550 b2a2fe7a Ilias Tsitsimpis
        """Test _offline without pool"""
551 b2a2fe7a Ilias Tsitsimpis
        self._offline(False)
552 b2a2fe7a Ilias Tsitsimpis
553 794c94e6 Ilias Tsitsimpis
    def test_offline_pool(self):
554 b2a2fe7a Ilias Tsitsimpis
        """Test _offline using pool"""
555 b2a2fe7a Ilias Tsitsimpis
        self._offline(True)
556 b2a2fe7a Ilias Tsitsimpis
557 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
558 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we send invalid token
559 794c94e6 Ilias Tsitsimpis
    def _invalid_token(self, pool):
560 26498848 Giorgos Korfiatis
        token = "skaksaFlBl+fasFdaf24sx"
561 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
562 b2a2fe7a Ilias Tsitsimpis
        try:
563 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
564 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(token, astakosclient.API_AUTHENTICATE)
565 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
566 8fe6475a Ilias Tsitsimpis
            pass
567 8fe6475a Ilias Tsitsimpis
        except Exception:
568 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
569 b2a2fe7a Ilias Tsitsimpis
        else:
570 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
571 b2a2fe7a Ilias Tsitsimpis
572 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
573 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token without pool"""
574 794c94e6 Ilias Tsitsimpis
        self._invalid_token(False)
575 b2a2fe7a Ilias Tsitsimpis
576 794c94e6 Ilias Tsitsimpis
    def test_invalid_token_pool(self):
577 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token using pool"""
578 794c94e6 Ilias Tsitsimpis
        self._invalid_token(True)
579 b2a2fe7a Ilias Tsitsimpis
580 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
581 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we send invalid url
582 794c94e6 Ilias Tsitsimpis
    def _invalid_url(self, pool):
583 bc56a641 Ilias Tsitsimpis
        global token_1
584 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
585 bc56a641 Ilias Tsitsimpis
        try:
586 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
587 79b5d61b Sofia Papagiannaki
            client._call_astakos(token_1, "/astakos/api/misspelled")
588 f93cc364 Ilias Tsitsimpis
        except NotFound:
589 8fe6475a Ilias Tsitsimpis
            pass
590 8fe6475a Ilias Tsitsimpis
        except Exception:
591 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 404 (Not Found)")
592 b2a2fe7a Ilias Tsitsimpis
        else:
593 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 404 (Not Found)")
594 b2a2fe7a Ilias Tsitsimpis
595 794c94e6 Ilias Tsitsimpis
    def test_invalid_url(self):
596 794c94e6 Ilias Tsitsimpis
        """Test _invalid_url without pool"""
597 794c94e6 Ilias Tsitsimpis
        self._invalid_url(False)
598 b2a2fe7a Ilias Tsitsimpis
599 794c94e6 Ilias Tsitsimpis
    def test_invalid_url_pool(self):
600 794c94e6 Ilias Tsitsimpis
        """Test _invalid_url using pool"""
601 794c94e6 Ilias Tsitsimpis
        self._invalid_url(True)
602 b2a2fe7a Ilias Tsitsimpis
603 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
604 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use an unsupported scheme
605 794c94e6 Ilias Tsitsimpis
    def _unsupported_scheme(self, pool):
606 b2a2fe7a Ilias Tsitsimpis
        global token_1
607 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
608 b2a2fe7a Ilias Tsitsimpis
        try:
609 98752f06 Ilias Tsitsimpis
            client = AstakosClient("ftp://example.com", use_pool=pool)
610 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(token_1, astakosclient.API_AUTHENTICATE)
611 83f9157b Ilias Tsitsimpis
        except BadValue:
612 bc56a641 Ilias Tsitsimpis
            pass
613 bc56a641 Ilias Tsitsimpis
        except Exception:
614 83f9157b Ilias Tsitsimpis
            self.fail("Should have raise BadValue Exception")
615 bc56a641 Ilias Tsitsimpis
        else:
616 83f9157b Ilias Tsitsimpis
            self.fail("Should have raise BadValue Exception")
617 b2a2fe7a Ilias Tsitsimpis
618 794c94e6 Ilias Tsitsimpis
    def test_unsupported_scheme(self):
619 794c94e6 Ilias Tsitsimpis
        """Test _unsupported_scheme without pool"""
620 794c94e6 Ilias Tsitsimpis
        self._unsupported_scheme(False)
621 b2a2fe7a Ilias Tsitsimpis
622 794c94e6 Ilias Tsitsimpis
    def test_unsupported_scheme_pool(self):
623 794c94e6 Ilias Tsitsimpis
        """Test _unsupported_scheme using pool"""
624 794c94e6 Ilias Tsitsimpis
        self._unsupported_scheme(True)
625 b2a2fe7a Ilias Tsitsimpis
626 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
627 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use http instead of https
628 794c94e6 Ilias Tsitsimpis
    def _http_scheme(self, pool):
629 b2a2fe7a Ilias Tsitsimpis
        global token_1
630 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
631 b2a2fe7a Ilias Tsitsimpis
        try:
632 98752f06 Ilias Tsitsimpis
            client = AstakosClient("http://example.com", use_pool=pool)
633 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(token_1, astakosclient.API_AUTHENTICATE)
634 66208bc7 Ilias Tsitsimpis
        except AstakosClientException as err:
635 66208bc7 Ilias Tsitsimpis
            if err.status != 302:
636 b2a2fe7a Ilias Tsitsimpis
                self.fail("Should have returned 302 (Found)")
637 b2a2fe7a Ilias Tsitsimpis
        else:
638 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 302 (Found)")
639 b2a2fe7a Ilias Tsitsimpis
640 794c94e6 Ilias Tsitsimpis
    def test_http_scheme(self):
641 794c94e6 Ilias Tsitsimpis
        """Test _http_scheme without pool"""
642 794c94e6 Ilias Tsitsimpis
        self._http_scheme(False)
643 b2a2fe7a Ilias Tsitsimpis
644 794c94e6 Ilias Tsitsimpis
    def test_http_scheme_pool(self):
645 794c94e6 Ilias Tsitsimpis
        """Test _http_scheme using pool"""
646 794c94e6 Ilias Tsitsimpis
        self._http_scheme(True)
647 b2a2fe7a Ilias Tsitsimpis
648 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
649 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use authenticate with POST
650 794c94e6 Ilias Tsitsimpis
    def _post_authenticate(self, pool):
651 b2a2fe7a Ilias Tsitsimpis
        global token_1
652 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
653 b2a2fe7a Ilias Tsitsimpis
        try:
654 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
655 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(
656 7b5a37fd Ilias Tsitsimpis
                token_1, astakosclient.API_AUTHENTICATE, method="POST")
657 f93cc364 Ilias Tsitsimpis
        except BadRequest:
658 8fe6475a Ilias Tsitsimpis
            pass
659 8fe6475a Ilias Tsitsimpis
        except Exception:
660 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
661 b2a2fe7a Ilias Tsitsimpis
        else:
662 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
663 b2a2fe7a Ilias Tsitsimpis
664 794c94e6 Ilias Tsitsimpis
    def test_post_authenticate(self):
665 794c94e6 Ilias Tsitsimpis
        """Test _post_authenticate without pool"""
666 794c94e6 Ilias Tsitsimpis
        self._post_authenticate(False)
667 b2a2fe7a Ilias Tsitsimpis
668 794c94e6 Ilias Tsitsimpis
    def test_post_authenticate_pool(self):
669 794c94e6 Ilias Tsitsimpis
        """Test _post_authenticate using pool"""
670 794c94e6 Ilias Tsitsimpis
        self._post_authenticate(True)
671 bc56a641 Ilias Tsitsimpis
672 d071e6f1 Ilias Tsitsimpis
    # ----------------------------------
673 d071e6f1 Ilias Tsitsimpis
    # Test the response if we request user_catalogs with GET
674 794c94e6 Ilias Tsitsimpis
    def _get_user_catalogs(self, pool):
675 d071e6f1 Ilias Tsitsimpis
        global token_1
676 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
677 d071e6f1 Ilias Tsitsimpis
        try:
678 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
679 7b5a37fd Ilias Tsitsimpis
            client._call_astakos(token_1, astakosclient.API_USERCATALOGS)
680 f93cc364 Ilias Tsitsimpis
        except BadRequest:
681 8fe6475a Ilias Tsitsimpis
            pass
682 8fe6475a Ilias Tsitsimpis
        except Exception:
683 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
684 d071e6f1 Ilias Tsitsimpis
        else:
685 d071e6f1 Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
686 d071e6f1 Ilias Tsitsimpis
687 794c94e6 Ilias Tsitsimpis
    def test_get_user_catalogs(self):
688 794c94e6 Ilias Tsitsimpis
        """Test _get_user_catalogs without pool"""
689 794c94e6 Ilias Tsitsimpis
        self._get_user_catalogs(False)
690 d071e6f1 Ilias Tsitsimpis
691 794c94e6 Ilias Tsitsimpis
    def test_get_user_catalogs_pool(self):
692 794c94e6 Ilias Tsitsimpis
        """Test _get_user_catalogs using pool"""
693 794c94e6 Ilias Tsitsimpis
        self._get_user_catalogs(True)
694 d071e6f1 Ilias Tsitsimpis
695 bc56a641 Ilias Tsitsimpis
696 864eb390 Ilias Tsitsimpis
class TestAuthenticate(unittest.TestCase):
697 f74d2b69 Ilias Tsitsimpis
    """Test cases for function getUserInfo"""
698 864eb390 Ilias Tsitsimpis
699 864eb390 Ilias Tsitsimpis
    # ----------------------------------
700 864eb390 Ilias Tsitsimpis
    # Test the response we get if we don't have internet access
701 794c94e6 Ilias Tsitsimpis
    def test_offline(self):
702 864eb390 Ilias Tsitsimpis
        """Test offline after 3 retries"""
703 864eb390 Ilias Tsitsimpis
        global token_1
704 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline])
705 864eb390 Ilias Tsitsimpis
        try:
706 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=3)
707 794c94e6 Ilias Tsitsimpis
            client.get_user_info(token_1)
708 864eb390 Ilias Tsitsimpis
        except AstakosClientException:
709 864eb390 Ilias Tsitsimpis
            pass
710 864eb390 Ilias Tsitsimpis
        else:
711 864eb390 Ilias Tsitsimpis
            self.fail("Should have raised AstakosClientException exception")
712 864eb390 Ilias Tsitsimpis
713 864eb390 Ilias Tsitsimpis
    # ----------------------------------
714 864eb390 Ilias Tsitsimpis
    # Test the response we get for invalid token
715 794c94e6 Ilias Tsitsimpis
    def _invalid_token(self, pool):
716 26498848 Giorgos Korfiatis
        token = "skaksaFlBl+fasFdaf24sx"
717 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
718 864eb390 Ilias Tsitsimpis
        try:
719 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
720 794c94e6 Ilias Tsitsimpis
            client.get_user_info(token)
721 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
722 8fe6475a Ilias Tsitsimpis
            pass
723 8fe6475a Ilias Tsitsimpis
        except Exception:
724 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
725 864eb390 Ilias Tsitsimpis
        else:
726 d4789cd4 Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
727 864eb390 Ilias Tsitsimpis
728 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
729 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token without pool"""
730 794c94e6 Ilias Tsitsimpis
        self._invalid_token(False)
731 864eb390 Ilias Tsitsimpis
732 794c94e6 Ilias Tsitsimpis
    def test_invalid_token_pool(self):
733 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token using pool"""
734 794c94e6 Ilias Tsitsimpis
        self._invalid_token(True)
735 864eb390 Ilias Tsitsimpis
736 864eb390 Ilias Tsitsimpis
    #- ---------------------------------
737 864eb390 Ilias Tsitsimpis
    # Test response for user 1
738 794c94e6 Ilias Tsitsimpis
    def _auth_user(self, token, user_info, usage, pool):
739 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
740 864eb390 Ilias Tsitsimpis
        try:
741 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
742 794c94e6 Ilias Tsitsimpis
            auth_info = client.get_user_info(token, usage=usage)
743 864eb390 Ilias Tsitsimpis
        except:
744 864eb390 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
745 864eb390 Ilias Tsitsimpis
        self.assertEqual(user_info, auth_info)
746 864eb390 Ilias Tsitsimpis
747 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one(self):
748 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 without pool, without usage"""
749 864eb390 Ilias Tsitsimpis
        global token_1, user_1
750 864eb390 Ilias Tsitsimpis
        user_info = dict(user_1)
751 864eb390 Ilias Tsitsimpis
        del user_info['usage']
752 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_info, False, False)
753 864eb390 Ilias Tsitsimpis
754 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one_usage(self):
755 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 without pool, with usage"""
756 864eb390 Ilias Tsitsimpis
        global token_1, user_1
757 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_1, True, False)
758 864eb390 Ilias Tsitsimpis
759 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one_usage_pool(self):
760 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 using pool, with usage"""
761 864eb390 Ilias Tsitsimpis
        global token_1, user_1
762 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_1, True, True)
763 864eb390 Ilias Tsitsimpis
764 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two(self):
765 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 without pool, without usage"""
766 864eb390 Ilias Tsitsimpis
        global token_2, user_2
767 864eb390 Ilias Tsitsimpis
        user_info = dict(user_2)
768 864eb390 Ilias Tsitsimpis
        del user_info['usage']
769 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_info, False, False)
770 864eb390 Ilias Tsitsimpis
771 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two_usage(self):
772 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 without pool, with usage"""
773 864eb390 Ilias Tsitsimpis
        global token_2, user_2
774 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_2, True, False)
775 864eb390 Ilias Tsitsimpis
776 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two_usage_pool(self):
777 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 using pool, with usage"""
778 864eb390 Ilias Tsitsimpis
        global token_2, user_2
779 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_2, True, True)
780 864eb390 Ilias Tsitsimpis
781 864eb390 Ilias Tsitsimpis
    # ----------------------------------
782 864eb390 Ilias Tsitsimpis
    # Test retry functionality
783 794c94e6 Ilias Tsitsimpis
    def test_offline_retry(self):
784 f74d2b69 Ilias Tsitsimpis
        """Test retry functionality for getUserInfo"""
785 864eb390 Ilias Tsitsimpis
        global token_1, user_1
786 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_offline, _request_ok])
787 864eb390 Ilias Tsitsimpis
        try:
788 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=2)
789 794c94e6 Ilias Tsitsimpis
            auth_info = client.get_user_info(token_1, usage=True)
790 864eb390 Ilias Tsitsimpis
        except:
791 864eb390 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
792 864eb390 Ilias Tsitsimpis
        self.assertEqual(user_1, auth_info)
793 454a1ad4 Ilias Tsitsimpis
794 454a1ad4 Ilias Tsitsimpis
795 d4789cd4 Ilias Tsitsimpis
class TestDisplayNames(unittest.TestCase):
796 d4789cd4 Ilias Tsitsimpis
    """Test cases for functions getDisplayNames/getDisplayName"""
797 d4789cd4 Ilias Tsitsimpis
798 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
799 d4789cd4 Ilias Tsitsimpis
    # Test the response we get for invalid token
800 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
801 d4789cd4 Ilias Tsitsimpis
        """Test the response we get for invalid token (without pool)"""
802 d4789cd4 Ilias Tsitsimpis
        global user_1
803 26498848 Giorgos Korfiatis
        token = "skaksaFlBl+fasFdaf24sx"
804 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
805 d4789cd4 Ilias Tsitsimpis
        try:
806 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
807 794c94e6 Ilias Tsitsimpis
            client.get_usernames(token, [user_1['uuid']])
808 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
809 8fe6475a Ilias Tsitsimpis
            pass
810 8fe6475a Ilias Tsitsimpis
        except Exception:
811 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
812 d4789cd4 Ilias Tsitsimpis
        else:
813 d4789cd4 Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
814 d4789cd4 Ilias Tsitsimpis
815 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
816 d4789cd4 Ilias Tsitsimpis
    # Get Info for both users
817 794c94e6 Ilias Tsitsimpis
    def test_usernames(self):
818 794c94e6 Ilias Tsitsimpis
        """Test get_usernames with both users"""
819 d4789cd4 Ilias Tsitsimpis
        global token_1, user_1, user_2
820 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
821 d4789cd4 Ilias Tsitsimpis
        try:
822 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
823 794c94e6 Ilias Tsitsimpis
            catalog = client.get_usernames(
824 98752f06 Ilias Tsitsimpis
                token_1, [user_1['uuid'], user_2['uuid']])
825 d4789cd4 Ilias Tsitsimpis
        except:
826 d4789cd4 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
827 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(catalog[user_1['uuid']], user_1['username'])
828 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(catalog[user_2['uuid']], user_2['username'])
829 d4789cd4 Ilias Tsitsimpis
830 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
831 d4789cd4 Ilias Tsitsimpis
    # Get info for user 1
832 794c94e6 Ilias Tsitsimpis
    def test_username_user_one(self):
833 794c94e6 Ilias Tsitsimpis
        """Test get_username for User One"""
834 d4789cd4 Ilias Tsitsimpis
        global token_2, user_1
835 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_ok])
836 d4789cd4 Ilias Tsitsimpis
        try:
837 d4789cd4 Ilias Tsitsimpis
            client = AstakosClient(
838 98752f06 Ilias Tsitsimpis
                "https://example.com", use_pool=True, retry=2)
839 794c94e6 Ilias Tsitsimpis
            info = client.get_username(token_2, user_1['uuid'])
840 d4789cd4 Ilias Tsitsimpis
        except:
841 d4789cd4 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
842 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(info, user_1['username'])
843 d4789cd4 Ilias Tsitsimpis
844 2377e7c2 Ilias Tsitsimpis
    # ----------------------------------
845 2377e7c2 Ilias Tsitsimpis
    # Get info with wrong uuid
846 794c94e6 Ilias Tsitsimpis
    def test_no_username(self):
847 2377e7c2 Ilias Tsitsimpis
        global token_1
848 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
849 2377e7c2 Ilias Tsitsimpis
        try:
850 2377e7c2 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
851 794c94e6 Ilias Tsitsimpis
            client.get_username(token_1, "1234")
852 794c94e6 Ilias Tsitsimpis
        except NoUserName:
853 2377e7c2 Ilias Tsitsimpis
            pass
854 2377e7c2 Ilias Tsitsimpis
        except:
855 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoDisplayName exception")
856 2377e7c2 Ilias Tsitsimpis
        else:
857 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoDisplayName exception")
858 2377e7c2 Ilias Tsitsimpis
859 d4789cd4 Ilias Tsitsimpis
860 aaf0a42c Ilias Tsitsimpis
class TestGetUUIDs(unittest.TestCase):
861 aaf0a42c Ilias Tsitsimpis
    """Test cases for functions getUUIDs/getUUID"""
862 aaf0a42c Ilias Tsitsimpis
863 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
864 aaf0a42c Ilias Tsitsimpis
    # Test the response we get for invalid token
865 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
866 aaf0a42c Ilias Tsitsimpis
        """Test the response we get for invalid token (using pool)"""
867 aaf0a42c Ilias Tsitsimpis
        global user_1
868 26498848 Giorgos Korfiatis
        token = "skaksaFlBl+fasFdaf24sx"
869 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
870 aaf0a42c Ilias Tsitsimpis
        try:
871 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
872 794c94e6 Ilias Tsitsimpis
            client.get_uuids(token, [user_1['username']])
873 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
874 8fe6475a Ilias Tsitsimpis
            pass
875 8fe6475a Ilias Tsitsimpis
        except Exception:
876 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
877 aaf0a42c Ilias Tsitsimpis
        else:
878 aaf0a42c Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
879 aaf0a42c Ilias Tsitsimpis
880 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
881 aaf0a42c Ilias Tsitsimpis
    # Get info for both users
882 794c94e6 Ilias Tsitsimpis
    def test_uuids(self):
883 794c94e6 Ilias Tsitsimpis
        """Test get_uuids with both users"""
884 aaf0a42c Ilias Tsitsimpis
        global token_1, user_1, user_2
885 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
886 aaf0a42c Ilias Tsitsimpis
        try:
887 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
888 794c94e6 Ilias Tsitsimpis
            catalog = client.get_uuids(
889 aaf0a42c Ilias Tsitsimpis
                token_1, [user_1['username'], user_2['username']])
890 aaf0a42c Ilias Tsitsimpis
        except:
891 aaf0a42c Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
892 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(catalog[user_1['username']], user_1['uuid'])
893 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(catalog[user_2['username']], user_2['uuid'])
894 aaf0a42c Ilias Tsitsimpis
895 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
896 aaf0a42c Ilias Tsitsimpis
    # Get uuid for user 2
897 794c94e6 Ilias Tsitsimpis
    def test_get_uuid_user_two(self):
898 794c94e6 Ilias Tsitsimpis
        """Test get_uuid for User Two"""
899 aaf0a42c Ilias Tsitsimpis
        global token_1, user_2
900 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_ok])
901 aaf0a42c Ilias Tsitsimpis
        try:
902 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=1)
903 794c94e6 Ilias Tsitsimpis
            info = client.get_uuid(token_2, user_1['username'])
904 aaf0a42c Ilias Tsitsimpis
        except:
905 aaf0a42c Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
906 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(info, user_1['uuid'])
907 aaf0a42c Ilias Tsitsimpis
908 2377e7c2 Ilias Tsitsimpis
    # ----------------------------------
909 2377e7c2 Ilias Tsitsimpis
    # Get uuid with wrong username
910 794c94e6 Ilias Tsitsimpis
    def test_no_uuid(self):
911 2377e7c2 Ilias Tsitsimpis
        global token_1
912 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
913 2377e7c2 Ilias Tsitsimpis
        try:
914 2377e7c2 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
915 794c94e6 Ilias Tsitsimpis
            client.get_uuid(token_1, "1234")
916 2377e7c2 Ilias Tsitsimpis
        except NoUUID:
917 2377e7c2 Ilias Tsitsimpis
            pass
918 2377e7c2 Ilias Tsitsimpis
        except:
919 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoUUID exception")
920 2377e7c2 Ilias Tsitsimpis
        else:
921 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoUUID exception")
922 2377e7c2 Ilias Tsitsimpis
923 aaf0a42c Ilias Tsitsimpis
924 c4644612 Ilias Tsitsimpis
class TestResources(unittest.TestCase):
925 c4644612 Ilias Tsitsimpis
    """Test cases for function get_resources"""
926 c4644612 Ilias Tsitsimpis
927 c4644612 Ilias Tsitsimpis
    # ----------------------------------
928 c4644612 Ilias Tsitsimpis
    def test_get_resources(self):
929 baeb2ba5 Ilias Tsitsimpis
        """Test function call of get_resources"""
930 c4644612 Ilias Tsitsimpis
        global resources
931 c4644612 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_ok])
932 c4644612 Ilias Tsitsimpis
        try:
933 c4644612 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=1)
934 c4644612 Ilias Tsitsimpis
            result = client.get_resources()
935 c4644612 Ilias Tsitsimpis
        except Exception as err:
936 c4644612 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
937 c4644612 Ilias Tsitsimpis
        self.assertEqual(resources, result)
938 c4644612 Ilias Tsitsimpis
939 c4644612 Ilias Tsitsimpis
940 baeb2ba5 Ilias Tsitsimpis
class TestQuotas(unittest.TestCase):
941 baeb2ba5 Ilias Tsitsimpis
    """Test cases for function get_quotas"""
942 baeb2ba5 Ilias Tsitsimpis
943 baeb2ba5 Ilias Tsitsimpis
    # ----------------------------------
944 baeb2ba5 Ilias Tsitsimpis
    def test_get_quotas(self):
945 baeb2ba5 Ilias Tsitsimpis
        """Test function call of get_quotas"""
946 baeb2ba5 Ilias Tsitsimpis
        global quotas, token_1
947 baeb2ba5 Ilias Tsitsimpis
        _mock_request([_request_ok])
948 baeb2ba5 Ilias Tsitsimpis
        try:
949 baeb2ba5 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
950 baeb2ba5 Ilias Tsitsimpis
            result = client.get_quotas(token_1)
951 baeb2ba5 Ilias Tsitsimpis
        except Exception as err:
952 baeb2ba5 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
953 baeb2ba5 Ilias Tsitsimpis
        self.assertEqual(quotas, result)
954 baeb2ba5 Ilias Tsitsimpis
955 baeb2ba5 Ilias Tsitsimpis
    # -----------------------------------
956 baeb2ba5 Ilias Tsitsimpis
    def test_get_quotas_unauthorized(self):
957 baeb2ba5 Ilias Tsitsimpis
        """Test function call of get_quotas with wrong token"""
958 baeb2ba5 Ilias Tsitsimpis
        global token_2
959 baeb2ba5 Ilias Tsitsimpis
        _mock_request([_request_ok])
960 baeb2ba5 Ilias Tsitsimpis
        try:
961 baeb2ba5 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
962 baeb2ba5 Ilias Tsitsimpis
            client.get_quotas(token_2)
963 baeb2ba5 Ilias Tsitsimpis
        except Unauthorized:
964 baeb2ba5 Ilias Tsitsimpis
            pass
965 baeb2ba5 Ilias Tsitsimpis
        except Exception as err:
966 baeb2ba5 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
967 baeb2ba5 Ilias Tsitsimpis
        else:
968 baeb2ba5 Ilias Tsitsimpis
            self.fail("Should have raised Unauthorized Exception")
969 baeb2ba5 Ilias Tsitsimpis
970 baeb2ba5 Ilias Tsitsimpis
    # ----------------------------------
971 baeb2ba5 Ilias Tsitsimpis
    def test_get_quotas_without_token(self):
972 fd420756 Ilias Tsitsimpis
        """Test function call of get_quotas without token"""
973 baeb2ba5 Ilias Tsitsimpis
        _mock_request([_request_ok])
974 baeb2ba5 Ilias Tsitsimpis
        try:
975 baeb2ba5 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
976 baeb2ba5 Ilias Tsitsimpis
            client.get_quotas(None)
977 baeb2ba5 Ilias Tsitsimpis
        except Unauthorized:
978 baeb2ba5 Ilias Tsitsimpis
            pass
979 baeb2ba5 Ilias Tsitsimpis
        except Exception as err:
980 baeb2ba5 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
981 baeb2ba5 Ilias Tsitsimpis
        else:
982 baeb2ba5 Ilias Tsitsimpis
            self.fail("Should have raised Unauthorized Exception")
983 baeb2ba5 Ilias Tsitsimpis
984 baeb2ba5 Ilias Tsitsimpis
985 fd420756 Ilias Tsitsimpis
class TestCommissions(unittest.TestCase):
986 b5008ef0 Ilias Tsitsimpis
    """Test cases for quota commissions"""
987 fd420756 Ilias Tsitsimpis
988 fd420756 Ilias Tsitsimpis
    # ----------------------------------
989 7a0180ef Ilias Tsitsimpis
    def test_issue_commission(self):
990 12eab714 Ilias Tsitsimpis
        """Test function call of issue_commission"""
991 fd420756 Ilias Tsitsimpis
        global token_1, commission_request, commission_successful_reqsponse
992 fd420756 Ilias Tsitsimpis
        _mock_request([_request_ok])
993 fd420756 Ilias Tsitsimpis
        try:
994 fd420756 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
995 fd420756 Ilias Tsitsimpis
            response = client.issue_commission(token_1, commission_request)
996 fd420756 Ilias Tsitsimpis
        except Exception as err:
997 fd420756 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
998 fd420756 Ilias Tsitsimpis
        self.assertEqual(response, commission_successful_response['serial'])
999 fd420756 Ilias Tsitsimpis
1000 fd420756 Ilias Tsitsimpis
    # ----------------------------------
1001 7a0180ef Ilias Tsitsimpis
    def test_issue_commission_quota_limit(self):
1002 12eab714 Ilias Tsitsimpis
        """Test function call of issue_commission with limit exceeded"""
1003 fd420756 Ilias Tsitsimpis
        global token_1, commission_request, commission_failure_response
1004 fd420756 Ilias Tsitsimpis
        _mock_request([_request_ok])
1005 fd420756 Ilias Tsitsimpis
        new_request = dict(commission_request)
1006 fd420756 Ilias Tsitsimpis
        new_request['provisions'][1]['quantity'] = 520000000
1007 fd420756 Ilias Tsitsimpis
        try:
1008 fd420756 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1009 fd420756 Ilias Tsitsimpis
            client.issue_commission(token_1, new_request)
1010 fd420756 Ilias Tsitsimpis
        except QuotaLimit:
1011 fd420756 Ilias Tsitsimpis
            pass
1012 fd420756 Ilias Tsitsimpis
        except Exception as err:
1013 fd420756 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1014 fd420756 Ilias Tsitsimpis
        else:
1015 fd420756 Ilias Tsitsimpis
            self.fail("Should have raised QuotaLimit Exception")
1016 fd420756 Ilias Tsitsimpis
1017 7a0180ef Ilias Tsitsimpis
    # ----------------------------------
1018 12eab714 Ilias Tsitsimpis
    def test_issue_one_commission(self):
1019 12eab714 Ilias Tsitsimpis
        """Test function call of issue_one_commission"""
1020 12eab714 Ilias Tsitsimpis
        global token_1, commission_successful_response
1021 12eab714 Ilias Tsitsimpis
        _mock_request([_request_ok])
1022 12eab714 Ilias Tsitsimpis
        try:
1023 12eab714 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1024 12eab714 Ilias Tsitsimpis
            response = client.issue_one_commission(
1025 12eab714 Ilias Tsitsimpis
                token_1, "c02f315b-7d84-45bc-a383-552a3f97d2ad",
1026 567f49a2 Giorgos Korfiatis
                "system", {"cyclades.vm": 1, "cyclades.ram": 30000})
1027 12eab714 Ilias Tsitsimpis
        except Exception as err:
1028 12eab714 Ilias Tsitsimpis
            self.fail("Shouldn't have raised Exception %s" % err)
1029 12eab714 Ilias Tsitsimpis
        self.assertEqual(response, commission_successful_response['serial'])
1030 12eab714 Ilias Tsitsimpis
1031 12eab714 Ilias Tsitsimpis
    # ----------------------------------
1032 7a0180ef Ilias Tsitsimpis
    def test_get_pending_commissions(self):
1033 7a0180ef Ilias Tsitsimpis
        """Test function call of get_pending_commissions"""
1034 7a0180ef Ilias Tsitsimpis
        global token_1, pending_commissions
1035 7a0180ef Ilias Tsitsimpis
        _mock_request([_request_ok])
1036 7a0180ef Ilias Tsitsimpis
        try:
1037 7a0180ef Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1038 7a0180ef Ilias Tsitsimpis
            response = client.get_pending_commissions(token_1)
1039 7a0180ef Ilias Tsitsimpis
        except Exception as err:
1040 7a0180ef Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1041 7a0180ef Ilias Tsitsimpis
        self.assertEqual(response, pending_commissions)
1042 7a0180ef Ilias Tsitsimpis
1043 994f37b6 Ilias Tsitsimpis
    # ----------------------------------
1044 994f37b6 Ilias Tsitsimpis
    def test_get_commission_info(self):
1045 994f37b6 Ilias Tsitsimpis
        """Test function call of get_commission_info"""
1046 994f37b6 Ilias Tsitsimpis
        global token_1, commission_description
1047 994f37b6 Ilias Tsitsimpis
        _mock_request([_request_ok])
1048 994f37b6 Ilias Tsitsimpis
        try:
1049 8975f6f6 Christos Stavrakakis
            client = AstakosClient("https://example.com", use_pool=True,
1050 8975f6f6 Christos Stavrakakis
                                   pool_size=2)
1051 994f37b6 Ilias Tsitsimpis
            response = client.get_commission_info(token_1, 57)
1052 994f37b6 Ilias Tsitsimpis
        except Exception as err:
1053 994f37b6 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1054 994f37b6 Ilias Tsitsimpis
        self.assertEqual(response, commission_description)
1055 994f37b6 Ilias Tsitsimpis
1056 994f37b6 Ilias Tsitsimpis
    # ----------------------------------
1057 994f37b6 Ilias Tsitsimpis
    def test_get_commission_info_not_found(self):
1058 994f37b6 Ilias Tsitsimpis
        """Test function call of get_commission_info with invalid serial"""
1059 994f37b6 Ilias Tsitsimpis
        global token_1
1060 994f37b6 Ilias Tsitsimpis
        _mock_request([_request_ok])
1061 994f37b6 Ilias Tsitsimpis
        try:
1062 994f37b6 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1063 994f37b6 Ilias Tsitsimpis
            client.get_commission_info(token_1, "57lala")
1064 994f37b6 Ilias Tsitsimpis
        except NotFound:
1065 994f37b6 Ilias Tsitsimpis
            pass
1066 994f37b6 Ilias Tsitsimpis
        except Exception as err:
1067 994f37b6 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1068 994f37b6 Ilias Tsitsimpis
        else:
1069 994f37b6 Ilias Tsitsimpis
            self.fail("Should have raised NotFound")
1070 994f37b6 Ilias Tsitsimpis
1071 994f37b6 Ilias Tsitsimpis
    # ----------------------------------
1072 994f37b6 Ilias Tsitsimpis
    def test_get_commission_info_without_serial(self):
1073 994f37b6 Ilias Tsitsimpis
        """Test function call of get_commission_info without serial"""
1074 994f37b6 Ilias Tsitsimpis
        global token_1
1075 994f37b6 Ilias Tsitsimpis
        _mock_request([_request_ok])
1076 994f37b6 Ilias Tsitsimpis
        try:
1077 994f37b6 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1078 994f37b6 Ilias Tsitsimpis
            client.get_commission_info(token_1, None)
1079 994f37b6 Ilias Tsitsimpis
        except BadValue:
1080 994f37b6 Ilias Tsitsimpis
            pass
1081 994f37b6 Ilias Tsitsimpis
        except Exception as err:
1082 994f37b6 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1083 994f37b6 Ilias Tsitsimpis
        else:
1084 994f37b6 Ilias Tsitsimpis
            self.fail("Should have raise BadValue")
1085 994f37b6 Ilias Tsitsimpis
1086 805e294c Ilias Tsitsimpis
    # ----------------------------------
1087 b5008ef0 Ilias Tsitsimpis
    def test_commision_action(self):
1088 b5008ef0 Ilias Tsitsimpis
        """Test function call of commision_action with wrong action"""
1089 805e294c Ilias Tsitsimpis
        global token_1
1090 805e294c Ilias Tsitsimpis
        _mock_request([_request_ok])
1091 805e294c Ilias Tsitsimpis
        try:
1092 805e294c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1093 b5008ef0 Ilias Tsitsimpis
            client.commission_action(token_1, 57, "lala")
1094 805e294c Ilias Tsitsimpis
        except BadRequest:
1095 805e294c Ilias Tsitsimpis
            pass
1096 805e294c Ilias Tsitsimpis
        except Exception as err:
1097 805e294c Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1098 805e294c Ilias Tsitsimpis
        else:
1099 805e294c Ilias Tsitsimpis
            self.fail("Should have raised BadRequest")
1100 805e294c Ilias Tsitsimpis
1101 805e294c Ilias Tsitsimpis
    # ----------------------------------
1102 b5008ef0 Ilias Tsitsimpis
    def test_accept_commission(self):
1103 b5008ef0 Ilias Tsitsimpis
        """Test function call of accept_commission"""
1104 805e294c Ilias Tsitsimpis
        global token_1
1105 805e294c Ilias Tsitsimpis
        _mock_request([_request_ok])
1106 805e294c Ilias Tsitsimpis
        try:
1107 805e294c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1108 b5008ef0 Ilias Tsitsimpis
            client.accept_commission(token_1, 57)
1109 805e294c Ilias Tsitsimpis
        except Exception as err:
1110 805e294c Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1111 805e294c Ilias Tsitsimpis
1112 805e294c Ilias Tsitsimpis
    # ----------------------------------
1113 b5008ef0 Ilias Tsitsimpis
    def test_reject_commission(self):
1114 b5008ef0 Ilias Tsitsimpis
        """Test function call of reject_commission"""
1115 805e294c Ilias Tsitsimpis
        global token_1
1116 805e294c Ilias Tsitsimpis
        _mock_request([_request_ok])
1117 805e294c Ilias Tsitsimpis
        try:
1118 805e294c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1119 b5008ef0 Ilias Tsitsimpis
            client.reject_commission(token_1, 57)
1120 805e294c Ilias Tsitsimpis
        except Exception as err:
1121 805e294c Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1122 805e294c Ilias Tsitsimpis
1123 7b7392a6 Ilias Tsitsimpis
    # ----------------------------------
1124 7b7392a6 Ilias Tsitsimpis
    def test_accept_commission_not_found(self):
1125 7b7392a6 Ilias Tsitsimpis
        """Test function call of accept_commission with wrong serial"""
1126 7b7392a6 Ilias Tsitsimpis
        global token_1
1127 7b7392a6 Ilias Tsitsimpis
        _mock_request([_request_ok])
1128 7b7392a6 Ilias Tsitsimpis
        try:
1129 7b7392a6 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1130 7b7392a6 Ilias Tsitsimpis
            client.reject_commission(token_1, 20)
1131 7b7392a6 Ilias Tsitsimpis
        except NotFound:
1132 7b7392a6 Ilias Tsitsimpis
            pass
1133 7b7392a6 Ilias Tsitsimpis
        except Exception as err:
1134 7b7392a6 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1135 7b7392a6 Ilias Tsitsimpis
        else:
1136 7b7392a6 Ilias Tsitsimpis
            self.fail("Should have raised NotFound")
1137 7b7392a6 Ilias Tsitsimpis
1138 81875157 Ilias Tsitsimpis
    # ----------------------------------
1139 81875157 Ilias Tsitsimpis
    def test_resolve_commissions(self):
1140 81875157 Ilias Tsitsimpis
        """Test function call of resolve_commissions"""
1141 81875157 Ilias Tsitsimpis
        global token_1
1142 81875157 Ilias Tsitsimpis
        _mock_request([_request_ok])
1143 81875157 Ilias Tsitsimpis
        try:
1144 81875157 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1145 8975f6f6 Christos Stavrakakis
            result = client.resolve_commissions(token_1, [56, 57],
1146 8975f6f6 Christos Stavrakakis
                                                [56, 58, 59])
1147 81875157 Ilias Tsitsimpis
        except Exception as err:
1148 81875157 Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1149 81875157 Ilias Tsitsimpis
        self.assertEqual(result, resolve_commissions_rep)
1150 81875157 Ilias Tsitsimpis
1151 fd420756 Ilias Tsitsimpis
1152 108be31f Ilias Tsitsimpis
class TestEndPoints(unittest.TestCase):
1153 108be31f Ilias Tsitsimpis
    """Test cases for endpoints requests"""
1154 108be31f Ilias Tsitsimpis
1155 108be31f Ilias Tsitsimpis
    # ----------------------------------
1156 108be31f Ilias Tsitsimpis
    def test_get_endpoints(self):
1157 108be31f Ilias Tsitsimpis
        """Test function call of get_endpoints"""
1158 25a04cdd Ilias Tsitsimpis
        global token_1, user_info_endpoints
1159 25a04cdd Ilias Tsitsimpis
        _mock_request([_request_ok])
1160 25a04cdd Ilias Tsitsimpis
        try:
1161 25a04cdd Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
1162 b173906e Ilias Tsitsimpis
            response = client.get_endpoints(token_1)
1163 25a04cdd Ilias Tsitsimpis
        except Exception as err:
1164 25a04cdd Ilias Tsitsimpis
            self.fail("Shouldn't raise Exception %s" % err)
1165 25a04cdd Ilias Tsitsimpis
        self.assertEqual(response, user_info_endpoints)
1166 25a04cdd Ilias Tsitsimpis
1167 108be31f Ilias Tsitsimpis
1168 bc56a641 Ilias Tsitsimpis
# ----------------------------
1169 bc56a641 Ilias Tsitsimpis
# Run tests
1170 bc56a641 Ilias Tsitsimpis
if __name__ == "__main__":
1171 bc56a641 Ilias Tsitsimpis
    unittest.main()