Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-client / astakosclient / tests.py @ 2377e7c2

History | View | Annotate | Download (22.3 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 2377e7c2 Ilias Tsitsimpis
    NoDisplayName, 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 57ba2dfc Ilias Tsitsimpis
def _requestOffline(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 57ba2dfc Ilias Tsitsimpis
def _requestStatus302(conn, method, url, **kwargs):
73 57ba2dfc Ilias Tsitsimpis
    """This request returns 302"""
74 57ba2dfc Ilias Tsitsimpis
    status = 302
75 57ba2dfc Ilias Tsitsimpis
    data = '<html>\r\n<head><title>302 Found</title></head>\r\n' \
76 57ba2dfc Ilias Tsitsimpis
        '<body bgcolor="white">\r\n<center><h1>302 Found</h1></center>\r\n' \
77 57ba2dfc Ilias Tsitsimpis
        '<hr><center>nginx/0.7.67</center>\r\n</body>\r\n</html>\r\n'
78 66208bc7 Ilias Tsitsimpis
    return (data, status)
79 57ba2dfc Ilias Tsitsimpis
80 57ba2dfc Ilias Tsitsimpis
81 57ba2dfc Ilias Tsitsimpis
def _requestStatus404(conn, method, url, **kwargs):
82 57ba2dfc Ilias Tsitsimpis
    """This request returns 404"""
83 57ba2dfc Ilias Tsitsimpis
    status = 404
84 57ba2dfc Ilias Tsitsimpis
    data = '<html><head><title>404 Not Found</title></head>' \
85 57ba2dfc Ilias Tsitsimpis
        '<body><h1>Not Found</h1><p>The requested URL /foo was ' \
86 57ba2dfc Ilias Tsitsimpis
        'not found on this server.</p><hr><address>Apache Server ' \
87 57ba2dfc Ilias Tsitsimpis
        'at example.com Port 80</address></body></html>'
88 66208bc7 Ilias Tsitsimpis
    return (data, status)
89 57ba2dfc Ilias Tsitsimpis
90 57ba2dfc Ilias Tsitsimpis
91 57ba2dfc Ilias Tsitsimpis
def _requestStatus401(conn, method, url, **kwargs):
92 57ba2dfc Ilias Tsitsimpis
    """This request returns 401"""
93 57ba2dfc Ilias Tsitsimpis
    status = 401
94 57ba2dfc Ilias Tsitsimpis
    data = "Invalid X-Auth-Token\n"
95 66208bc7 Ilias Tsitsimpis
    return (data, status)
96 57ba2dfc Ilias Tsitsimpis
97 57ba2dfc Ilias Tsitsimpis
98 57ba2dfc Ilias Tsitsimpis
def _requestStatus400(conn, method, url, **kwargs):
99 57ba2dfc Ilias Tsitsimpis
    """This request returns 400"""
100 57ba2dfc Ilias Tsitsimpis
    status = 400
101 57ba2dfc Ilias Tsitsimpis
    data = "Method not allowed.\n"
102 66208bc7 Ilias Tsitsimpis
    return (data, status)
103 57ba2dfc Ilias Tsitsimpis
104 57ba2dfc Ilias Tsitsimpis
105 57ba2dfc Ilias Tsitsimpis
def _requestOk(conn, method, url, **kwargs):
106 57ba2dfc Ilias Tsitsimpis
    """This request behaves like original Astakos does"""
107 66208bc7 Ilias Tsitsimpis
    if url[0:16] == "/im/authenticate":
108 57ba2dfc Ilias Tsitsimpis
        return _reqAuthenticate(conn, method, url, **kwargs)
109 66208bc7 Ilias Tsitsimpis
    elif url[0:14] == "/user_catalogs":
110 57ba2dfc Ilias Tsitsimpis
        return _reqCatalogs(conn, method, url, **kwargs)
111 57ba2dfc Ilias Tsitsimpis
    else:
112 57ba2dfc Ilias Tsitsimpis
        return _requestStatus404(conn, method, url, **kwargs)
113 57ba2dfc Ilias Tsitsimpis
114 57ba2dfc Ilias Tsitsimpis
115 57ba2dfc Ilias Tsitsimpis
def _reqAuthenticate(conn, method, url, **kwargs):
116 57ba2dfc Ilias Tsitsimpis
    """Check if user exists and return his profile"""
117 344d5c90 Ilias Tsitsimpis
    global user_1, user_2
118 57ba2dfc Ilias Tsitsimpis
119 d4789cd4 Ilias Tsitsimpis
    # Check input
120 57ba2dfc Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
121 57ba2dfc Ilias Tsitsimpis
        return _requestStatus302(conn, method, url, **kwargs)
122 57ba2dfc Ilias Tsitsimpis
123 57ba2dfc Ilias Tsitsimpis
    if method != "GET":
124 57ba2dfc Ilias Tsitsimpis
        return _requestStatus400(conn, method, url, **kwargs)
125 57ba2dfc Ilias Tsitsimpis
126 57ba2dfc Ilias Tsitsimpis
    token = kwargs['headers']['X-Auth-Token']
127 57ba2dfc Ilias Tsitsimpis
    if token == token_1:
128 344d5c90 Ilias Tsitsimpis
        user = dict(user_1)
129 57ba2dfc Ilias Tsitsimpis
    elif token == token_2:
130 344d5c90 Ilias Tsitsimpis
        user = dict(user_2)
131 57ba2dfc Ilias Tsitsimpis
    else:
132 57ba2dfc Ilias Tsitsimpis
        # No user found
133 57ba2dfc Ilias Tsitsimpis
        return _requestStatus401(conn, method, url, **kwargs)
134 57ba2dfc Ilias Tsitsimpis
135 d4789cd4 Ilias Tsitsimpis
    # Return
136 344d5c90 Ilias Tsitsimpis
    if "usage=1" not in url:
137 57ba2dfc Ilias Tsitsimpis
        # Strip `usage' key from `user'
138 344d5c90 Ilias Tsitsimpis
        del user['usage']
139 66208bc7 Ilias Tsitsimpis
    return (simplejson.dumps(user), 200)
140 57ba2dfc Ilias Tsitsimpis
141 57ba2dfc Ilias Tsitsimpis
142 57ba2dfc Ilias Tsitsimpis
def _reqCatalogs(conn, method, url, **kwargs):
143 57ba2dfc Ilias Tsitsimpis
    """Return user catalogs"""
144 d071e6f1 Ilias Tsitsimpis
    global token_1, token_2, user_1, user_2
145 d071e6f1 Ilias Tsitsimpis
146 d4789cd4 Ilias Tsitsimpis
    # Check input
147 d071e6f1 Ilias Tsitsimpis
    if conn.__class__.__name__ != "HTTPSConnection":
148 d071e6f1 Ilias Tsitsimpis
        return _requestStatus302(conn, method, url, **kwargs)
149 d071e6f1 Ilias Tsitsimpis
150 d071e6f1 Ilias Tsitsimpis
    if method != "POST":
151 d071e6f1 Ilias Tsitsimpis
        return _requestStatus400(conn, method, url, **kwargs)
152 d071e6f1 Ilias Tsitsimpis
153 d4789cd4 Ilias Tsitsimpis
    token = kwargs['headers']['X-Auth-Token']
154 d4789cd4 Ilias Tsitsimpis
    if token != token_1 and token != token_2:
155 d4789cd4 Ilias Tsitsimpis
        return _requestStatus401(conn, method, url, **kwargs)
156 d4789cd4 Ilias Tsitsimpis
157 d4789cd4 Ilias Tsitsimpis
    # Return
158 d4789cd4 Ilias Tsitsimpis
    body = simplejson.loads(kwargs['body'])
159 aaf0a42c Ilias Tsitsimpis
    if 'uuids' in body:
160 aaf0a42c Ilias Tsitsimpis
        # Return uuid_catalog
161 aaf0a42c Ilias Tsitsimpis
        uuids = body['uuids']
162 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
163 aaf0a42c Ilias Tsitsimpis
        if user_1['uuid'] in uuids:
164 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['uuid']] = user_1['username']
165 aaf0a42c Ilias Tsitsimpis
        if user_2['uuid'] in uuids:
166 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['uuid']] = user_2['username']
167 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": catalogs}
168 aaf0a42c Ilias Tsitsimpis
    elif 'displaynames' in body:
169 aaf0a42c Ilias Tsitsimpis
        # Return displayname_catalog
170 aaf0a42c Ilias Tsitsimpis
        names = body['displaynames']
171 aaf0a42c Ilias Tsitsimpis
        catalogs = {}
172 aaf0a42c Ilias Tsitsimpis
        if user_1['username'] in names:
173 aaf0a42c Ilias Tsitsimpis
            catalogs[user_1['username']] = user_1['uuid']
174 aaf0a42c Ilias Tsitsimpis
        if user_2['username'] in names:
175 aaf0a42c Ilias Tsitsimpis
            catalogs[user_2['username']] = user_2['uuid']
176 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": catalogs, "uuid_catalog": {}}
177 aaf0a42c Ilias Tsitsimpis
    else:
178 aaf0a42c Ilias Tsitsimpis
        return_catalog = {"displayname_catalog": {}, "uuid_catalog": {}}
179 d4789cd4 Ilias Tsitsimpis
    return (simplejson.dumps(return_catalog), 200)
180 57ba2dfc Ilias Tsitsimpis
181 57ba2dfc Ilias Tsitsimpis
182 57ba2dfc Ilias Tsitsimpis
# ----------------------------
183 57ba2dfc Ilias Tsitsimpis
# Mock the actual _doRequest
184 57ba2dfc Ilias Tsitsimpis
def _mockRequest(new_requests):
185 57ba2dfc Ilias Tsitsimpis
    """Mock the actual request
186 57ba2dfc Ilias Tsitsimpis

187 57ba2dfc Ilias Tsitsimpis
    Given a list of requests to use (in rotation),
188 57ba2dfc Ilias Tsitsimpis
    replace the original _doRequest function with
189 57ba2dfc Ilias Tsitsimpis
    a new one
190 57ba2dfc Ilias Tsitsimpis

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