36e50d6fdae6064e5a85c9608220033a44cc1105
[kamaki] / kamaki / clients / test / astakos.py
1 # Copyright 2013 GRNET S.A. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or
4 # without modification, are permitted provided that the following
5 # conditions are met:
6 #
7 #   1. Redistributions of source code must retain the above
8 #      copyright notice, this list of conditions and the following
9 #      disclaimer.
10 #
11 #   2. Redistributions in binary form must reproduce the above
12 #      copyright notice, this list of conditions and the following
13 #      disclaimer in the documentation and/or other materials
14 #      provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
28 #
29 # The views and conclusions contained in the software and
30 # documentation are those of the authors and should not be
31 # interpreted as representing official policies, either expressed
32 # or implied, of GRNET S.A.
33
34 from mock import patch
35
36 from unittest import TestCase
37 from kamaki.clients.astakos import AstakosClient
38
39
40 example = dict(
41         name='Simple Name',
42         username='User Full Name',
43         auth_token_expires='1362583796000',
44         auth_token_created='1359991796000',
45         email=['user@example.gr'],
46         id=42,
47         uuid='aus3r-uu1d-f0r-73s71ng-as7ak0s')
48
49 example0 = dict(
50         name='Simple Name 0',
51         username='User Full Name 0',
52         auth_token_expires='1362583796001',
53         auth_token_created='1359991796001',
54         email=['user0@example.gr'],
55         id=32,
56         uuid='an07h2r-us3r-uu1d-f0r-as7ak0s')
57
58
59 class FR(object):
60     json = example
61     headers = {}
62     content = json
63     status = None
64     status_code = 200
65
66     def release(self):
67         pass
68
69 khttp = 'kamaki.clients.connection.kamakicon.KamakiHTTPConnection'
70
71
72 class Astakos(TestCase):
73
74     cached = False
75
76     def setUp(self):
77         self.url = 'https://astakos.example.com'
78         self.token = 'ast@k0sT0k3n=='
79         self.client = AstakosClient(self.url, self.token)
80
81     def tearDown(self):
82         FR.json = example
83
84     @patch('%s.perform_request' % khttp, return_value=FR())
85     def _authenticate(self, PR):
86         r = self.client.authenticate()
87         self.cached = True
88         return r
89
90     def test_authenticate(self):
91         r = self._authenticate()
92         self.assertEqual(self.client.http_client.url, self.url)
93         self.assertEqual(self.client.http_client.path, '/im/authenticate')
94         for term, val in example.items():
95             self.assertTrue(term in r)
96             self.assertEqual(val, r[term])
97
98     def test_info(self):
99         if not self.cached:
100             self._authenticate()
101             return self.test_info()
102         self.assertTrue(set(
103             example.keys()).issubset(self.client.info().keys()))
104
105     def test_get(self):
106         if not self.cached:
107             self._authenticate()
108             return self.test_get()
109         for term, val in example.items():
110             self.assertEqual(self.client.term(term, self.token), val)
111         self.assertTrue(example['email'][0] in self.client.term('email'))
112
113     def test_list(self):
114         if not self.cached:
115             self._authenticate
116         FR.json = example0
117         self._authenticate()
118         r = self.client.list()
119         self.assertTrue(len(r) == 1)
120         self.assertEqual(r[0]['auth_token'], self.token)