Statistics
| Branch: | Tag: | Revision:

root / astakosclient / astakosclient / tests.py @ 21190887

History | View | Annotate | Download (22.6 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 bc56a641 Ilias Tsitsimpis
import sys
44 57ba2dfc Ilias Tsitsimpis
import socket
45 454a1ad4 Ilias Tsitsimpis
import simplejson
46 57ba2dfc Ilias Tsitsimpis
47 57ba2dfc Ilias Tsitsimpis
import astakosclient
48 f93cc364 Ilias Tsitsimpis
from astakosclient import AstakosClient
49 f93cc364 Ilias Tsitsimpis
from astakosclient.errors import \
50 2377e7c2 Ilias Tsitsimpis
    AstakosClientException, Unauthorized, BadRequest, NotFound, \
51 794c94e6 Ilias Tsitsimpis
    NoUserName, NoUUID
52 57ba2dfc Ilias Tsitsimpis
53 57ba2dfc Ilias Tsitsimpis
# Use backported unittest functionality if Python < 2.7
54 bc56a641 Ilias Tsitsimpis
try:
55 bc56a641 Ilias Tsitsimpis
    import unittest2 as unittest
56 bc56a641 Ilias Tsitsimpis
except ImportError:
57 bc56a641 Ilias Tsitsimpis
    if sys.version_info < (2, 7):
58 bc56a641 Ilias Tsitsimpis
        raise Exception("The unittest2 package is required for Python < 2.7")
59 bc56a641 Ilias Tsitsimpis
    import unittest
60 57ba2dfc Ilias Tsitsimpis
61 57ba2dfc Ilias Tsitsimpis
62 57ba2dfc Ilias Tsitsimpis
# --------------------------------------------------------------------
63 57ba2dfc Ilias Tsitsimpis
# Helper functions
64 57ba2dfc Ilias Tsitsimpis
65 57ba2dfc Ilias Tsitsimpis
# ----------------------------
66 57ba2dfc Ilias Tsitsimpis
# This functions will be used as mocked requests
67 794c94e6 Ilias Tsitsimpis
def _request_offline(conn, method, url, **kwargs):
68 57ba2dfc Ilias Tsitsimpis
    """This request behaves as we were offline"""
69 57ba2dfc Ilias Tsitsimpis
    raise socket.gaierror
70 57ba2dfc Ilias Tsitsimpis
71 57ba2dfc Ilias Tsitsimpis
72 794c94e6 Ilias Tsitsimpis
def _request_status_302(conn, method, url, **kwargs):
73 57ba2dfc Ilias Tsitsimpis
    """This request returns 302"""
74 21190887 Ilias Tsitsimpis
    message = "FOUND"
75 57ba2dfc Ilias Tsitsimpis
    status = 302
76 57ba2dfc Ilias Tsitsimpis
    data = '<html>\r\n<head><title>302 Found</title></head>\r\n' \
77 57ba2dfc Ilias Tsitsimpis
        '<body bgcolor="white">\r\n<center><h1>302 Found</h1></center>\r\n' \
78 57ba2dfc Ilias Tsitsimpis
        '<hr><center>nginx/0.7.67</center>\r\n</body>\r\n</html>\r\n'
79 21190887 Ilias Tsitsimpis
    return (message, data, status)
80 57ba2dfc Ilias Tsitsimpis
81 57ba2dfc Ilias Tsitsimpis
82 794c94e6 Ilias Tsitsimpis
def _request_status_404(conn, method, url, **kwargs):
83 57ba2dfc Ilias Tsitsimpis
    """This request returns 404"""
84 21190887 Ilias Tsitsimpis
    message = "Not Found"
85 57ba2dfc Ilias Tsitsimpis
    status = 404
86 57ba2dfc Ilias Tsitsimpis
    data = '<html><head><title>404 Not Found</title></head>' \
87 57ba2dfc Ilias Tsitsimpis
        '<body><h1>Not Found</h1><p>The requested URL /foo was ' \
88 57ba2dfc Ilias Tsitsimpis
        'not found on this server.</p><hr><address>Apache Server ' \
89 57ba2dfc Ilias Tsitsimpis
        'at example.com Port 80</address></body></html>'
90 21190887 Ilias Tsitsimpis
    return (message, data, status)
91 57ba2dfc Ilias Tsitsimpis
92 57ba2dfc Ilias Tsitsimpis
93 794c94e6 Ilias Tsitsimpis
def _request_status_401(conn, method, url, **kwargs):
94 57ba2dfc Ilias Tsitsimpis
    """This request returns 401"""
95 21190887 Ilias Tsitsimpis
    message = "UNAUTHORIZED"
96 57ba2dfc Ilias Tsitsimpis
    status = 401
97 57ba2dfc Ilias Tsitsimpis
    data = "Invalid X-Auth-Token\n"
98 21190887 Ilias Tsitsimpis
    return (message, data, status)
99 57ba2dfc Ilias Tsitsimpis
100 57ba2dfc Ilias Tsitsimpis
101 794c94e6 Ilias Tsitsimpis
def _request_status_400(conn, method, url, **kwargs):
102 57ba2dfc Ilias Tsitsimpis
    """This request returns 400"""
103 21190887 Ilias Tsitsimpis
    message = "BAD REQUEST"
104 57ba2dfc Ilias Tsitsimpis
    status = 400
105 57ba2dfc Ilias Tsitsimpis
    data = "Method not allowed.\n"
106 21190887 Ilias Tsitsimpis
    return (message, data, status)
107 57ba2dfc Ilias Tsitsimpis
108 57ba2dfc Ilias Tsitsimpis
109 794c94e6 Ilias Tsitsimpis
def _request_ok(conn, method, url, **kwargs):
110 57ba2dfc Ilias Tsitsimpis
    """This request behaves like original Astakos does"""
111 66208bc7 Ilias Tsitsimpis
    if url[0:16] == "/im/authenticate":
112 794c94e6 Ilias Tsitsimpis
        return _req_authenticate(conn, method, url, **kwargs)
113 66208bc7 Ilias Tsitsimpis
    elif url[0:14] == "/user_catalogs":
114 794c94e6 Ilias Tsitsimpis
        return _req_catalogs(conn, method, url, **kwargs)
115 57ba2dfc Ilias Tsitsimpis
    else:
116 794c94e6 Ilias Tsitsimpis
        return _request_status_404(conn, method, url, **kwargs)
117 57ba2dfc Ilias Tsitsimpis
118 57ba2dfc Ilias Tsitsimpis
119 794c94e6 Ilias Tsitsimpis
def _req_authenticate(conn, method, url, **kwargs):
120 57ba2dfc Ilias Tsitsimpis
    """Check if user exists and return his profile"""
121 344d5c90 Ilias Tsitsimpis
    global user_1, user_2
122 57ba2dfc Ilias Tsitsimpis
123 d4789cd4 Ilias Tsitsimpis
    # Check input
124 57ba2dfc Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
125 794c94e6 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
126 57ba2dfc Ilias Tsitsimpis
127 57ba2dfc Ilias Tsitsimpis
    if method != "GET":
128 794c94e6 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
129 57ba2dfc Ilias Tsitsimpis
130 57ba2dfc Ilias Tsitsimpis
    token = kwargs['headers']['X-Auth-Token']
131 57ba2dfc Ilias Tsitsimpis
    if token == token_1:
132 344d5c90 Ilias Tsitsimpis
        user = dict(user_1)
133 57ba2dfc Ilias Tsitsimpis
    elif token == token_2:
134 344d5c90 Ilias Tsitsimpis
        user = dict(user_2)
135 57ba2dfc Ilias Tsitsimpis
    else:
136 57ba2dfc Ilias Tsitsimpis
        # No user found
137 794c94e6 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
138 57ba2dfc Ilias Tsitsimpis
139 d4789cd4 Ilias Tsitsimpis
    # Return
140 344d5c90 Ilias Tsitsimpis
    if "usage=1" not in url:
141 57ba2dfc Ilias Tsitsimpis
        # Strip `usage' key from `user'
142 344d5c90 Ilias Tsitsimpis
        del user['usage']
143 21190887 Ilias Tsitsimpis
    return ("", simplejson.dumps(user), 200)
144 57ba2dfc Ilias Tsitsimpis
145 57ba2dfc Ilias Tsitsimpis
146 794c94e6 Ilias Tsitsimpis
def _req_catalogs(conn, method, url, **kwargs):
147 57ba2dfc Ilias Tsitsimpis
    """Return user catalogs"""
148 d071e6f1 Ilias Tsitsimpis
    global token_1, token_2, user_1, user_2
149 d071e6f1 Ilias Tsitsimpis
150 d4789cd4 Ilias Tsitsimpis
    # Check input
151 d071e6f1 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
152 794c94e6 Ilias Tsitsimpis
        return _request_status_302(conn, method, url, **kwargs)
153 d071e6f1 Ilias Tsitsimpis
154 d071e6f1 Ilias Tsitsimpis
    if method != "POST":
155 794c94e6 Ilias Tsitsimpis
        return _request_status_400(conn, method, url, **kwargs)
156 d071e6f1 Ilias Tsitsimpis
157 d4789cd4 Ilias Tsitsimpis
    token = kwargs['headers']['X-Auth-Token']
158 d4789cd4 Ilias Tsitsimpis
    if token != token_1 and token != token_2:
159 794c94e6 Ilias Tsitsimpis
        return _request_status_401(conn, method, url, **kwargs)
160 d4789cd4 Ilias Tsitsimpis
161 d4789cd4 Ilias Tsitsimpis
    # Return
162 d4789cd4 Ilias Tsitsimpis
    body = simplejson.loads(kwargs['body'])
163 aaf0a42c Ilias Tsitsimpis
    if 'uuids' in body:
164 aaf0a42c Ilias Tsitsimpis
        # Return uuid_catalog
165 aaf0a42c Ilias Tsitsimpis
        uuids = body['uuids']
166 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
167 aaf0a42c Ilias Tsitsimpis
        if user_1['uuid'] in uuids:
168 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['uuid']] = user_1['username']
169 aaf0a42c Ilias Tsitsimpis
        if user_2['uuid'] in uuids:
170 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['uuid']] = user_2['username']
171 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": catalogs}
172 aaf0a42c Ilias Tsitsimpis
    elif 'displaynames' in body:
173 aaf0a42c Ilias Tsitsimpis
        # Return displayname_catalog
174 aaf0a42c Ilias Tsitsimpis
        names = body['displaynames']
175 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
176 aaf0a42c Ilias Tsitsimpis
        if user_1['username'] in names:
177 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['username']] = user_1['uuid']
178 aaf0a42c Ilias Tsitsimpis
        if user_2['username'] in names:
179 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['username']] = user_2['uuid']
180 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": catalogs, "uuid_catalog": {}}
181 aaf0a42c Ilias Tsitsimpis
    else:
182 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": {}}
183 21190887 Ilias Tsitsimpis
    return ("", simplejson.dumps(return_catalog), 200)
184 57ba2dfc Ilias Tsitsimpis
185 57ba2dfc Ilias Tsitsimpis
186 57ba2dfc Ilias Tsitsimpis
# ----------------------------
187 57ba2dfc Ilias Tsitsimpis
# Mock the actual _doRequest
188 794c94e6 Ilias Tsitsimpis
def _mock_request(new_requests):
189 57ba2dfc Ilias Tsitsimpis
    """Mock the actual request
190 57ba2dfc Ilias Tsitsimpis

191 57ba2dfc Ilias Tsitsimpis
    Given a list of requests to use (in rotation),
192 57ba2dfc Ilias Tsitsimpis
    replace the original _doRequest function with
193 57ba2dfc Ilias Tsitsimpis
    a new one
194 57ba2dfc Ilias Tsitsimpis

195 57ba2dfc Ilias Tsitsimpis
    """
196 57ba2dfc Ilias Tsitsimpis
    def _mock(conn, method, url, **kwargs):
197 57ba2dfc Ilias Tsitsimpis
        # Get first request
198 57ba2dfc Ilias Tsitsimpis
        request = _mock.requests[0]
199 57ba2dfc Ilias Tsitsimpis
        # Rotate requests
200 57ba2dfc Ilias Tsitsimpis
        _mock.requests = _mock.requests[1:] + _mock.requests[:1]
201 57ba2dfc Ilias Tsitsimpis
        # Use first request
202 b2a2fe7a Ilias Tsitsimpis
        return request(conn, method, url, **kwargs)
203 57ba2dfc Ilias Tsitsimpis
204 57ba2dfc Ilias Tsitsimpis
    _mock.requests = new_requests
205 57ba2dfc Ilias Tsitsimpis
    # Replace `_doRequest' with our `_mock'
206 794c94e6 Ilias Tsitsimpis
    astakosclient._do_request = _mock
207 57ba2dfc Ilias Tsitsimpis
208 57ba2dfc Ilias Tsitsimpis
209 57ba2dfc Ilias Tsitsimpis
# ----------------------------
210 57ba2dfc Ilias Tsitsimpis
# Local users
211 57ba2dfc Ilias Tsitsimpis
token_1 = "skzleaFlBl+fasFdaf24sx=="
212 344d5c90 Ilias Tsitsimpis
user_1 = \
213 454a1ad4 Ilias Tsitsimpis
    {"username": "user1@example.com",
214 454a1ad4 Ilias Tsitsimpis
     "auth_token_created": 1359386939000,
215 454a1ad4 Ilias Tsitsimpis
     "name": "Example User One",
216 454a1ad4 Ilias Tsitsimpis
     "email": ["user1@example.com"],
217 454a1ad4 Ilias Tsitsimpis
     "auth_token_expires": 1361978939000,
218 454a1ad4 Ilias Tsitsimpis
     "id": 108,
219 344d5c90 Ilias Tsitsimpis
     "uuid": "73917abc-abcd-477e-a1f1-1763abcdefab",
220 344d5c90 Ilias Tsitsimpis
     "usage": [
221 344d5c90 Ilias Tsitsimpis
         {"currValue": 42949672960,
222 344d5c90 Ilias Tsitsimpis
          "display_name": "System Disk",
223 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.disk"},
224 344d5c90 Ilias Tsitsimpis
         {"currValue": 4,
225 344d5c90 Ilias Tsitsimpis
          "display_name": "CPU",
226 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.cpu"},
227 344d5c90 Ilias Tsitsimpis
         {"currValue": 4294967296,
228 344d5c90 Ilias Tsitsimpis
          "display_name": "RAM",
229 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.ram"},
230 344d5c90 Ilias Tsitsimpis
         {"currValue": 3,
231 344d5c90 Ilias Tsitsimpis
          "display_name": "VM",
232 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.vm"},
233 344d5c90 Ilias Tsitsimpis
         {"currValue": 0,
234 344d5c90 Ilias Tsitsimpis
          "display_name": "private network",
235 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.network.private"},
236 344d5c90 Ilias Tsitsimpis
         {"currValue": 152,
237 344d5c90 Ilias Tsitsimpis
          "display_name": "Storage Space",
238 344d5c90 Ilias Tsitsimpis
          "name": "pithos+.diskspace"}]}
239 57ba2dfc Ilias Tsitsimpis
240 57ba2dfc Ilias Tsitsimpis
token_2 = "fasdfDSFdf98923DF+sdfk=="
241 344d5c90 Ilias Tsitsimpis
user_2 = \
242 454a1ad4 Ilias Tsitsimpis
    {"username": "user2@example.com",
243 454a1ad4 Ilias Tsitsimpis
     "auth_token_created": 1358386938997,
244 454a1ad4 Ilias Tsitsimpis
     "name": "Example User Two",
245 454a1ad4 Ilias Tsitsimpis
     "email": ["user1@example.com"],
246 454a1ad4 Ilias Tsitsimpis
     "auth_token_expires": 1461998939000,
247 454a1ad4 Ilias Tsitsimpis
     "id": 109,
248 344d5c90 Ilias Tsitsimpis
     "uuid": "73917bca-1234-5678-a1f1-1763abcdefab",
249 344d5c90 Ilias Tsitsimpis
     "usage": [
250 344d5c90 Ilias Tsitsimpis
         {"currValue": 68719476736,
251 344d5c90 Ilias Tsitsimpis
          "display_name": "System Disk",
252 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.disk"},
253 344d5c90 Ilias Tsitsimpis
         {"currValue": 1,
254 344d5c90 Ilias Tsitsimpis
          "display_name": "CPU",
255 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.cpu"},
256 344d5c90 Ilias Tsitsimpis
         {"currValue": 1073741824,
257 344d5c90 Ilias Tsitsimpis
          "display_name": "RAM",
258 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.ram"},
259 344d5c90 Ilias Tsitsimpis
         {"currValue": 2,
260 344d5c90 Ilias Tsitsimpis
          "display_name": "VM",
261 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.vm"},
262 344d5c90 Ilias Tsitsimpis
         {"currValue": 1,
263 344d5c90 Ilias Tsitsimpis
          "display_name": "private network",
264 344d5c90 Ilias Tsitsimpis
          "name": "cyclades.network.private"},
265 344d5c90 Ilias Tsitsimpis
         {"currValue": 2341634510,
266 344d5c90 Ilias Tsitsimpis
          "display_name": "Storage Space",
267 344d5c90 Ilias Tsitsimpis
          "name": "pithos+.diskspace"}]}
268 bc56a641 Ilias Tsitsimpis
269 bc56a641 Ilias Tsitsimpis
270 bc56a641 Ilias Tsitsimpis
# --------------------------------------------------------------------
271 bc56a641 Ilias Tsitsimpis
# The actual tests
272 bc56a641 Ilias Tsitsimpis
273 bc56a641 Ilias Tsitsimpis
class TestCallAstakos(unittest.TestCase):
274 bc56a641 Ilias Tsitsimpis
    """Test cases for function _callAstakos"""
275 bc56a641 Ilias Tsitsimpis
276 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
277 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we don't have internet access
278 b2a2fe7a Ilias Tsitsimpis
    def _offline(self, pool):
279 bc56a641 Ilias Tsitsimpis
        global token_1
280 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline])
281 bc56a641 Ilias Tsitsimpis
        try:
282 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
283 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/im/authenticate")
284 66208bc7 Ilias Tsitsimpis
        except AstakosClientException:
285 bc56a641 Ilias Tsitsimpis
            pass
286 bc56a641 Ilias Tsitsimpis
        else:
287 66208bc7 Ilias Tsitsimpis
            self.fail("Should have raised AstakosClientException")
288 bc56a641 Ilias Tsitsimpis
289 794c94e6 Ilias Tsitsimpis
    def test_offline(self):
290 b2a2fe7a Ilias Tsitsimpis
        """Test _offline without pool"""
291 b2a2fe7a Ilias Tsitsimpis
        self._offline(False)
292 b2a2fe7a Ilias Tsitsimpis
293 794c94e6 Ilias Tsitsimpis
    def test_offline_pool(self):
294 b2a2fe7a Ilias Tsitsimpis
        """Test _offline using pool"""
295 b2a2fe7a Ilias Tsitsimpis
        self._offline(True)
296 b2a2fe7a Ilias Tsitsimpis
297 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
298 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we send invalid token
299 794c94e6 Ilias Tsitsimpis
    def _invalid_token(self, pool):
300 b2a2fe7a Ilias Tsitsimpis
        token = "skaksaFlBl+fasFdaf24sx=="
301 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
302 b2a2fe7a Ilias Tsitsimpis
        try:
303 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
304 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token, "/im/authenticate")
305 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
306 8fe6475a Ilias Tsitsimpis
            pass
307 8fe6475a Ilias Tsitsimpis
        except Exception:
308 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
309 b2a2fe7a Ilias Tsitsimpis
        else:
310 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
311 b2a2fe7a Ilias Tsitsimpis
312 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
313 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token without pool"""
314 794c94e6 Ilias Tsitsimpis
        self._invalid_token(False)
315 b2a2fe7a Ilias Tsitsimpis
316 794c94e6 Ilias Tsitsimpis
    def test_invalid_token_pool(self):
317 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token using pool"""
318 794c94e6 Ilias Tsitsimpis
        self._invalid_token(True)
319 b2a2fe7a Ilias Tsitsimpis
320 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
321 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we send invalid url
322 794c94e6 Ilias Tsitsimpis
    def _invalid_url(self, pool):
323 bc56a641 Ilias Tsitsimpis
        global token_1
324 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
325 bc56a641 Ilias Tsitsimpis
        try:
326 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
327 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/im/misspelled")
328 f93cc364 Ilias Tsitsimpis
        except NotFound:
329 8fe6475a Ilias Tsitsimpis
            pass
330 8fe6475a Ilias Tsitsimpis
        except Exception:
331 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 404 (Not Found)")
332 b2a2fe7a Ilias Tsitsimpis
        else:
333 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 404 (Not Found)")
334 b2a2fe7a Ilias Tsitsimpis
335 794c94e6 Ilias Tsitsimpis
    def test_invalid_url(self):
336 794c94e6 Ilias Tsitsimpis
        """Test _invalid_url without pool"""
337 794c94e6 Ilias Tsitsimpis
        self._invalid_url(False)
338 b2a2fe7a Ilias Tsitsimpis
339 794c94e6 Ilias Tsitsimpis
    def test_invalid_url_pool(self):
340 794c94e6 Ilias Tsitsimpis
        """Test _invalid_url using pool"""
341 794c94e6 Ilias Tsitsimpis
        self._invalid_url(True)
342 b2a2fe7a Ilias Tsitsimpis
343 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
344 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use an unsupported scheme
345 794c94e6 Ilias Tsitsimpis
    def _unsupported_scheme(self, pool):
346 b2a2fe7a Ilias Tsitsimpis
        global token_1
347 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
348 b2a2fe7a Ilias Tsitsimpis
        try:
349 98752f06 Ilias Tsitsimpis
            client = AstakosClient("ftp://example.com", use_pool=pool)
350 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/im/authenticate")
351 b2a2fe7a Ilias Tsitsimpis
        except ValueError:
352 bc56a641 Ilias Tsitsimpis
            pass
353 bc56a641 Ilias Tsitsimpis
        except Exception:
354 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have raise ValueError Exception")
355 bc56a641 Ilias Tsitsimpis
        else:
356 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have raise ValueError Exception")
357 b2a2fe7a Ilias Tsitsimpis
358 794c94e6 Ilias Tsitsimpis
    def test_unsupported_scheme(self):
359 794c94e6 Ilias Tsitsimpis
        """Test _unsupported_scheme without pool"""
360 794c94e6 Ilias Tsitsimpis
        self._unsupported_scheme(False)
361 b2a2fe7a Ilias Tsitsimpis
362 794c94e6 Ilias Tsitsimpis
    def test_unsupported_scheme_pool(self):
363 794c94e6 Ilias Tsitsimpis
        """Test _unsupported_scheme using pool"""
364 794c94e6 Ilias Tsitsimpis
        self._unsupported_scheme(True)
365 b2a2fe7a Ilias Tsitsimpis
366 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
367 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use http instead of https
368 794c94e6 Ilias Tsitsimpis
    def _http_scheme(self, pool):
369 b2a2fe7a Ilias Tsitsimpis
        global token_1
370 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
371 b2a2fe7a Ilias Tsitsimpis
        try:
372 98752f06 Ilias Tsitsimpis
            client = AstakosClient("http://example.com", use_pool=pool)
373 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/im/authenticate")
374 66208bc7 Ilias Tsitsimpis
        except AstakosClientException as err:
375 66208bc7 Ilias Tsitsimpis
            if err.status != 302:
376 b2a2fe7a Ilias Tsitsimpis
                self.fail("Should have returned 302 (Found)")
377 b2a2fe7a Ilias Tsitsimpis
        else:
378 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 302 (Found)")
379 b2a2fe7a Ilias Tsitsimpis
380 794c94e6 Ilias Tsitsimpis
    def test_http_scheme(self):
381 794c94e6 Ilias Tsitsimpis
        """Test _http_scheme without pool"""
382 794c94e6 Ilias Tsitsimpis
        self._http_scheme(False)
383 b2a2fe7a Ilias Tsitsimpis
384 794c94e6 Ilias Tsitsimpis
    def test_http_scheme_pool(self):
385 794c94e6 Ilias Tsitsimpis
        """Test _http_scheme using pool"""
386 794c94e6 Ilias Tsitsimpis
        self._http_scheme(True)
387 b2a2fe7a Ilias Tsitsimpis
388 b2a2fe7a Ilias Tsitsimpis
    # ----------------------------------
389 b2a2fe7a Ilias Tsitsimpis
    # Test the response we get if we use authenticate with POST
390 794c94e6 Ilias Tsitsimpis
    def _post_authenticate(self, pool):
391 b2a2fe7a Ilias Tsitsimpis
        global token_1
392 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
393 b2a2fe7a Ilias Tsitsimpis
        try:
394 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
395 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/im/authenticate", method="POST")
396 f93cc364 Ilias Tsitsimpis
        except BadRequest:
397 8fe6475a Ilias Tsitsimpis
            pass
398 8fe6475a Ilias Tsitsimpis
        except Exception:
399 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
400 b2a2fe7a Ilias Tsitsimpis
        else:
401 b2a2fe7a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
402 b2a2fe7a Ilias Tsitsimpis
403 794c94e6 Ilias Tsitsimpis
    def test_post_authenticate(self):
404 794c94e6 Ilias Tsitsimpis
        """Test _post_authenticate without pool"""
405 794c94e6 Ilias Tsitsimpis
        self._post_authenticate(False)
406 b2a2fe7a Ilias Tsitsimpis
407 794c94e6 Ilias Tsitsimpis
    def test_post_authenticate_pool(self):
408 794c94e6 Ilias Tsitsimpis
        """Test _post_authenticate using pool"""
409 794c94e6 Ilias Tsitsimpis
        self._post_authenticate(True)
410 bc56a641 Ilias Tsitsimpis
411 d071e6f1 Ilias Tsitsimpis
    # ----------------------------------
412 d071e6f1 Ilias Tsitsimpis
    # Test the response if we request user_catalogs with GET
413 794c94e6 Ilias Tsitsimpis
    def _get_user_catalogs(self, pool):
414 d071e6f1 Ilias Tsitsimpis
        global token_1
415 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
416 d071e6f1 Ilias Tsitsimpis
        try:
417 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
418 794c94e6 Ilias Tsitsimpis
            client._call_astakos(token_1, "/user_catalogs")
419 f93cc364 Ilias Tsitsimpis
        except BadRequest:
420 8fe6475a Ilias Tsitsimpis
            pass
421 8fe6475a Ilias Tsitsimpis
        except Exception:
422 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
423 d071e6f1 Ilias Tsitsimpis
        else:
424 d071e6f1 Ilias Tsitsimpis
            self.fail("Should have returned 400 (Method not allowed)")
425 d071e6f1 Ilias Tsitsimpis
426 794c94e6 Ilias Tsitsimpis
    def test_get_user_catalogs(self):
427 794c94e6 Ilias Tsitsimpis
        """Test _get_user_catalogs without pool"""
428 794c94e6 Ilias Tsitsimpis
        self._get_user_catalogs(False)
429 d071e6f1 Ilias Tsitsimpis
430 794c94e6 Ilias Tsitsimpis
    def test_get_user_catalogs_pool(self):
431 794c94e6 Ilias Tsitsimpis
        """Test _get_user_catalogs using pool"""
432 794c94e6 Ilias Tsitsimpis
        self._get_user_catalogs(True)
433 d071e6f1 Ilias Tsitsimpis
434 bc56a641 Ilias Tsitsimpis
435 864eb390 Ilias Tsitsimpis
class TestAuthenticate(unittest.TestCase):
436 f74d2b69 Ilias Tsitsimpis
    """Test cases for function getUserInfo"""
437 864eb390 Ilias Tsitsimpis
438 864eb390 Ilias Tsitsimpis
    # ----------------------------------
439 864eb390 Ilias Tsitsimpis
    # Test the response we get if we don't have internet access
440 794c94e6 Ilias Tsitsimpis
    def test_offline(self):
441 864eb390 Ilias Tsitsimpis
        """Test offline after 3 retries"""
442 864eb390 Ilias Tsitsimpis
        global token_1
443 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline])
444 864eb390 Ilias Tsitsimpis
        try:
445 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=3)
446 794c94e6 Ilias Tsitsimpis
            client.get_user_info(token_1)
447 864eb390 Ilias Tsitsimpis
        except AstakosClientException:
448 864eb390 Ilias Tsitsimpis
            pass
449 864eb390 Ilias Tsitsimpis
        else:
450 864eb390 Ilias Tsitsimpis
            self.fail("Should have raised AstakosClientException exception")
451 864eb390 Ilias Tsitsimpis
452 864eb390 Ilias Tsitsimpis
    # ----------------------------------
453 864eb390 Ilias Tsitsimpis
    # Test the response we get for invalid token
454 794c94e6 Ilias Tsitsimpis
    def _invalid_token(self, pool):
455 864eb390 Ilias Tsitsimpis
        token = "skaksaFlBl+fasFdaf24sx=="
456 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
457 864eb390 Ilias Tsitsimpis
        try:
458 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
459 794c94e6 Ilias Tsitsimpis
            client.get_user_info(token)
460 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
461 8fe6475a Ilias Tsitsimpis
            pass
462 8fe6475a Ilias Tsitsimpis
        except Exception:
463 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
464 864eb390 Ilias Tsitsimpis
        else:
465 d4789cd4 Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
466 864eb390 Ilias Tsitsimpis
467 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
468 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token without pool"""
469 794c94e6 Ilias Tsitsimpis
        self._invalid_token(False)
470 864eb390 Ilias Tsitsimpis
471 794c94e6 Ilias Tsitsimpis
    def test_invalid_token_pool(self):
472 794c94e6 Ilias Tsitsimpis
        """Test _invalid_token using pool"""
473 794c94e6 Ilias Tsitsimpis
        self._invalid_token(True)
474 864eb390 Ilias Tsitsimpis
475 864eb390 Ilias Tsitsimpis
    #- ---------------------------------
476 864eb390 Ilias Tsitsimpis
    # Test response for user 1
477 794c94e6 Ilias Tsitsimpis
    def _auth_user(self, token, user_info, usage, pool):
478 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
479 864eb390 Ilias Tsitsimpis
        try:
480 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", use_pool=pool)
481 794c94e6 Ilias Tsitsimpis
            auth_info = client.get_user_info(token, usage=usage)
482 864eb390 Ilias Tsitsimpis
        except:
483 864eb390 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
484 864eb390 Ilias Tsitsimpis
        self.assertEqual(user_info, auth_info)
485 864eb390 Ilias Tsitsimpis
486 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one(self):
487 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 without pool, without usage"""
488 864eb390 Ilias Tsitsimpis
        global token_1, user_1
489 864eb390 Ilias Tsitsimpis
        user_info = dict(user_1)
490 864eb390 Ilias Tsitsimpis
        del user_info['usage']
491 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_info, False, False)
492 864eb390 Ilias Tsitsimpis
493 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one_usage(self):
494 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 without pool, with usage"""
495 864eb390 Ilias Tsitsimpis
        global token_1, user_1
496 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_1, True, False)
497 864eb390 Ilias Tsitsimpis
498 794c94e6 Ilias Tsitsimpis
    def test_auth_user_one_usage_pool(self):
499 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 1 using pool, with usage"""
500 864eb390 Ilias Tsitsimpis
        global token_1, user_1
501 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_1, user_1, True, True)
502 864eb390 Ilias Tsitsimpis
503 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two(self):
504 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 without pool, without usage"""
505 864eb390 Ilias Tsitsimpis
        global token_2, user_2
506 864eb390 Ilias Tsitsimpis
        user_info = dict(user_2)
507 864eb390 Ilias Tsitsimpis
        del user_info['usage']
508 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_info, False, False)
509 864eb390 Ilias Tsitsimpis
510 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two_usage(self):
511 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 without pool, with usage"""
512 864eb390 Ilias Tsitsimpis
        global token_2, user_2
513 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_2, True, False)
514 864eb390 Ilias Tsitsimpis
515 794c94e6 Ilias Tsitsimpis
    def test_auth_user_two_usage_pool(self):
516 794c94e6 Ilias Tsitsimpis
        """Test _auth_user for User 2 using pool, with usage"""
517 864eb390 Ilias Tsitsimpis
        global token_2, user_2
518 794c94e6 Ilias Tsitsimpis
        self._auth_user(token_2, user_2, True, True)
519 864eb390 Ilias Tsitsimpis
520 864eb390 Ilias Tsitsimpis
    # ----------------------------------
521 864eb390 Ilias Tsitsimpis
    # Test retry functionality
522 794c94e6 Ilias Tsitsimpis
    def test_offline_retry(self):
523 f74d2b69 Ilias Tsitsimpis
        """Test retry functionality for getUserInfo"""
524 864eb390 Ilias Tsitsimpis
        global token_1, user_1
525 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_offline, _request_ok])
526 864eb390 Ilias Tsitsimpis
        try:
527 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=2)
528 794c94e6 Ilias Tsitsimpis
            auth_info = client.get_user_info(token_1, usage=True)
529 864eb390 Ilias Tsitsimpis
        except:
530 864eb390 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
531 864eb390 Ilias Tsitsimpis
        self.assertEqual(user_1, auth_info)
532 454a1ad4 Ilias Tsitsimpis
533 454a1ad4 Ilias Tsitsimpis
534 d4789cd4 Ilias Tsitsimpis
class TestDisplayNames(unittest.TestCase):
535 d4789cd4 Ilias Tsitsimpis
    """Test cases for functions getDisplayNames/getDisplayName"""
536 d4789cd4 Ilias Tsitsimpis
537 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
538 d4789cd4 Ilias Tsitsimpis
    # Test the response we get for invalid token
539 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
540 d4789cd4 Ilias Tsitsimpis
        """Test the response we get for invalid token (without pool)"""
541 d4789cd4 Ilias Tsitsimpis
        global user_1
542 d4789cd4 Ilias Tsitsimpis
        token = "skaksaFlBl+fasFdaf24sx=="
543 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
544 d4789cd4 Ilias Tsitsimpis
        try:
545 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
546 794c94e6 Ilias Tsitsimpis
            client.get_usernames(token, [user_1['uuid']])
547 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
548 8fe6475a Ilias Tsitsimpis
            pass
549 8fe6475a Ilias Tsitsimpis
        except Exception:
550 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
551 d4789cd4 Ilias Tsitsimpis
        else:
552 d4789cd4 Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
553 d4789cd4 Ilias Tsitsimpis
554 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
555 d4789cd4 Ilias Tsitsimpis
    # Get Info for both users
556 794c94e6 Ilias Tsitsimpis
    def test_usernames(self):
557 794c94e6 Ilias Tsitsimpis
        """Test get_usernames with both users"""
558 d4789cd4 Ilias Tsitsimpis
        global token_1, user_1, user_2
559 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
560 d4789cd4 Ilias Tsitsimpis
        try:
561 98752f06 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
562 794c94e6 Ilias Tsitsimpis
            catalog = client.get_usernames(
563 98752f06 Ilias Tsitsimpis
                token_1, [user_1['uuid'], user_2['uuid']])
564 d4789cd4 Ilias Tsitsimpis
        except:
565 d4789cd4 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
566 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(catalog[user_1['uuid']], user_1['username'])
567 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(catalog[user_2['uuid']], user_2['username'])
568 d4789cd4 Ilias Tsitsimpis
569 d4789cd4 Ilias Tsitsimpis
    # ----------------------------------
570 d4789cd4 Ilias Tsitsimpis
    # Get info for user 1
571 794c94e6 Ilias Tsitsimpis
    def test_username_user_one(self):
572 794c94e6 Ilias Tsitsimpis
        """Test get_username for User One"""
573 d4789cd4 Ilias Tsitsimpis
        global token_2, user_1
574 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_ok])
575 d4789cd4 Ilias Tsitsimpis
        try:
576 d4789cd4 Ilias Tsitsimpis
            client = AstakosClient(
577 98752f06 Ilias Tsitsimpis
                "https://example.com", use_pool=True, retry=2)
578 794c94e6 Ilias Tsitsimpis
            info = client.get_username(token_2, user_1['uuid'])
579 d4789cd4 Ilias Tsitsimpis
        except:
580 d4789cd4 Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
581 d4789cd4 Ilias Tsitsimpis
        self.assertEqual(info, user_1['username'])
582 d4789cd4 Ilias Tsitsimpis
583 2377e7c2 Ilias Tsitsimpis
    # ----------------------------------
584 2377e7c2 Ilias Tsitsimpis
    # Get info with wrong uuid
585 794c94e6 Ilias Tsitsimpis
    def test_no_username(self):
586 2377e7c2 Ilias Tsitsimpis
        global token_1
587 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
588 2377e7c2 Ilias Tsitsimpis
        try:
589 2377e7c2 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
590 794c94e6 Ilias Tsitsimpis
            client.get_username(token_1, "1234")
591 794c94e6 Ilias Tsitsimpis
        except NoUserName:
592 2377e7c2 Ilias Tsitsimpis
            pass
593 2377e7c2 Ilias Tsitsimpis
        except:
594 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoDisplayName exception")
595 2377e7c2 Ilias Tsitsimpis
        else:
596 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoDisplayName exception")
597 2377e7c2 Ilias Tsitsimpis
598 d4789cd4 Ilias Tsitsimpis
599 aaf0a42c Ilias Tsitsimpis
class TestGetUUIDs(unittest.TestCase):
600 aaf0a42c Ilias Tsitsimpis
    """Test cases for functions getUUIDs/getUUID"""
601 aaf0a42c Ilias Tsitsimpis
602 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
603 aaf0a42c Ilias Tsitsimpis
    # Test the response we get for invalid token
604 794c94e6 Ilias Tsitsimpis
    def test_invalid_token(self):
605 aaf0a42c Ilias Tsitsimpis
        """Test the response we get for invalid token (using pool)"""
606 aaf0a42c Ilias Tsitsimpis
        global user_1
607 aaf0a42c Ilias Tsitsimpis
        token = "skaksaFlBl+fasFdaf24sx=="
608 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
609 aaf0a42c Ilias Tsitsimpis
        try:
610 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
611 794c94e6 Ilias Tsitsimpis
            client.get_uuids(token, [user_1['username']])
612 f93cc364 Ilias Tsitsimpis
        except Unauthorized:
613 8fe6475a Ilias Tsitsimpis
            pass
614 8fe6475a Ilias Tsitsimpis
        except Exception:
615 8fe6475a Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
616 aaf0a42c Ilias Tsitsimpis
        else:
617 aaf0a42c Ilias Tsitsimpis
            self.fail("Should have returned 401 (Invalid X-Auth-Token)")
618 aaf0a42c Ilias Tsitsimpis
619 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
620 aaf0a42c Ilias Tsitsimpis
    # Get info for both users
621 794c94e6 Ilias Tsitsimpis
    def test_uuids(self):
622 794c94e6 Ilias Tsitsimpis
        """Test get_uuids with both users"""
623 aaf0a42c Ilias Tsitsimpis
        global token_1, user_1, user_2
624 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
625 aaf0a42c Ilias Tsitsimpis
        try:
626 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
627 794c94e6 Ilias Tsitsimpis
            catalog = client.get_uuids(
628 aaf0a42c Ilias Tsitsimpis
                token_1, [user_1['username'], user_2['username']])
629 aaf0a42c Ilias Tsitsimpis
        except:
630 aaf0a42c Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
631 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(catalog[user_1['username']], user_1['uuid'])
632 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(catalog[user_2['username']], user_2['uuid'])
633 aaf0a42c Ilias Tsitsimpis
634 aaf0a42c Ilias Tsitsimpis
    # ----------------------------------
635 aaf0a42c Ilias Tsitsimpis
    # Get uuid for user 2
636 794c94e6 Ilias Tsitsimpis
    def test_get_uuid_user_two(self):
637 794c94e6 Ilias Tsitsimpis
        """Test get_uuid for User Two"""
638 aaf0a42c Ilias Tsitsimpis
        global token_1, user_2
639 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_offline, _request_ok])
640 aaf0a42c Ilias Tsitsimpis
        try:
641 aaf0a42c Ilias Tsitsimpis
            client = AstakosClient("https://example.com", retry=1)
642 794c94e6 Ilias Tsitsimpis
            info = client.get_uuid(token_2, user_1['username'])
643 aaf0a42c Ilias Tsitsimpis
        except:
644 aaf0a42c Ilias Tsitsimpis
            self.fail("Shouldn't raise an Exception")
645 aaf0a42c Ilias Tsitsimpis
        self.assertEqual(info, user_1['uuid'])
646 aaf0a42c Ilias Tsitsimpis
647 2377e7c2 Ilias Tsitsimpis
    # ----------------------------------
648 2377e7c2 Ilias Tsitsimpis
    # Get uuid with wrong username
649 794c94e6 Ilias Tsitsimpis
    def test_no_uuid(self):
650 2377e7c2 Ilias Tsitsimpis
        global token_1
651 794c94e6 Ilias Tsitsimpis
        _mock_request([_request_ok])
652 2377e7c2 Ilias Tsitsimpis
        try:
653 2377e7c2 Ilias Tsitsimpis
            client = AstakosClient("https://example.com")
654 794c94e6 Ilias Tsitsimpis
            client.get_uuid(token_1, "1234")
655 2377e7c2 Ilias Tsitsimpis
        except NoUUID:
656 2377e7c2 Ilias Tsitsimpis
            pass
657 2377e7c2 Ilias Tsitsimpis
        except:
658 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoUUID exception")
659 2377e7c2 Ilias Tsitsimpis
        else:
660 2377e7c2 Ilias Tsitsimpis
            self.fail("Should have raised NoUUID exception")
661 2377e7c2 Ilias Tsitsimpis
662 aaf0a42c Ilias Tsitsimpis
663 bc56a641 Ilias Tsitsimpis
# ----------------------------
664 bc56a641 Ilias Tsitsimpis
# Run tests
665 bc56a641 Ilias Tsitsimpis
if __name__ == "__main__":
666 bc56a641 Ilias Tsitsimpis
    unittest.main()