root / snf-cyclades-app / synnefo / helpdesk / tests.py @ 9fd36718
History | View | Annotate | Download (7.3 kB)
1 | c4d1f3b7 | Kostas Papadimitriou | # Copyright 2011 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | c4d1f3b7 | Kostas Papadimitriou | #
|
3 | c4d1f3b7 | Kostas Papadimitriou | # Redistribution and use in source and binary forms, with or
|
4 | c4d1f3b7 | Kostas Papadimitriou | # without modification, are permitted provided that the following
|
5 | c4d1f3b7 | Kostas Papadimitriou | # conditions are met:
|
6 | c4d1f3b7 | Kostas Papadimitriou | #
|
7 | c4d1f3b7 | Kostas Papadimitriou | # 1. Redistributions of source code must retain the above
|
8 | c4d1f3b7 | Kostas Papadimitriou | # copyright notice, this list of conditions and the following
|
9 | c4d1f3b7 | Kostas Papadimitriou | # disclaimer.
|
10 | c4d1f3b7 | Kostas Papadimitriou | #
|
11 | c4d1f3b7 | Kostas Papadimitriou | # 2. Redistributions in binary form must reproduce the above
|
12 | c4d1f3b7 | Kostas Papadimitriou | # copyright notice, this list of conditions and the following
|
13 | c4d1f3b7 | Kostas Papadimitriou | # disclaimer in the documentation and/or other materials
|
14 | c4d1f3b7 | Kostas Papadimitriou | # provided with the distribution.
|
15 | c4d1f3b7 | Kostas Papadimitriou | #
|
16 | c4d1f3b7 | Kostas Papadimitriou | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | c4d1f3b7 | Kostas Papadimitriou | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | c4d1f3b7 | Kostas Papadimitriou | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | c4d1f3b7 | Kostas Papadimitriou | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | c4d1f3b7 | Kostas Papadimitriou | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | c4d1f3b7 | Kostas Papadimitriou | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | c4d1f3b7 | Kostas Papadimitriou | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | c4d1f3b7 | Kostas Papadimitriou | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | c4d1f3b7 | Kostas Papadimitriou | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | c4d1f3b7 | Kostas Papadimitriou | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | c4d1f3b7 | Kostas Papadimitriou | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | c4d1f3b7 | Kostas Papadimitriou | # POSSIBILITY OF SUCH DAMAGE.
|
28 | c4d1f3b7 | Kostas Papadimitriou | #
|
29 | c4d1f3b7 | Kostas Papadimitriou | # The views and conclusions contained in the software and
|
30 | c4d1f3b7 | Kostas Papadimitriou | # documentation are those of the authors and should not be
|
31 | c4d1f3b7 | Kostas Papadimitriou | # interpreted as representing official policies, either expressed
|
32 | c4d1f3b7 | Kostas Papadimitriou | # or implied, of GRNET S.A.
|
33 | c4d1f3b7 | Kostas Papadimitriou | #
|
34 | c4d1f3b7 | Kostas Papadimitriou | |
35 | c4d1f3b7 | Kostas Papadimitriou | from django.test import TestCase, Client |
36 | c4d1f3b7 | Kostas Papadimitriou | from django.conf import settings |
37 | c4d1f3b7 | Kostas Papadimitriou | from django.core.urlresolvers import reverse |
38 | c4d1f3b7 | Kostas Papadimitriou | |
39 | d59d86d4 | Kostas Papadimitriou | from synnefo.db import models |
40 | d59d86d4 | Kostas Papadimitriou | |
41 | c4d1f3b7 | Kostas Papadimitriou | class AaiClient(Client): |
42 | c4d1f3b7 | Kostas Papadimitriou | |
43 | c4d1f3b7 | Kostas Papadimitriou | def request(self, **request): |
44 | c4d1f3b7 | Kostas Papadimitriou | token = request.pop('user_token', '0000') |
45 | c4d1f3b7 | Kostas Papadimitriou | if token:
|
46 | c4d1f3b7 | Kostas Papadimitriou | request['HTTP_X_AUTH_TOKEN'] = token
|
47 | c4d1f3b7 | Kostas Papadimitriou | return super(AaiClient, self).request(**request) |
48 | c4d1f3b7 | Kostas Papadimitriou | |
49 | c4d1f3b7 | Kostas Papadimitriou | class HelpdeskTests(TestCase): |
50 | c4d1f3b7 | Kostas Papadimitriou | """
|
51 | c4d1f3b7 | Kostas Papadimitriou | Helpdesk tests. Test correctness of permissions and returned data.
|
52 | c4d1f3b7 | Kostas Papadimitriou | """
|
53 | c4d1f3b7 | Kostas Papadimitriou | |
54 | c4d1f3b7 | Kostas Papadimitriou | fixtures = ['helpdesk_test']
|
55 | c4d1f3b7 | Kostas Papadimitriou | |
56 | c4d1f3b7 | Kostas Papadimitriou | def setUp(self): |
57 | c4d1f3b7 | Kostas Papadimitriou | |
58 | c4d1f3b7 | Kostas Papadimitriou | def get_user_mock(request, *args, **kwargs): |
59 | c4d1f3b7 | Kostas Papadimitriou | if request.META.get('HTTP_X_AUTH_TOKEN', None) == '0000': |
60 | c4d1f3b7 | Kostas Papadimitriou | request.user_uniq = 'test'
|
61 | c4d1f3b7 | Kostas Papadimitriou | request.user = {'uniq': 'test'} |
62 | c4d1f3b7 | Kostas Papadimitriou | if request.META.get('HTTP_X_AUTH_TOKEN', None) == '0001': |
63 | c4d1f3b7 | Kostas Papadimitriou | request.user_uniq = 'test'
|
64 | c4d1f3b7 | Kostas Papadimitriou | request.user = {'uniq': 'test', 'groups':['default','helpdesk']} |
65 | c4d1f3b7 | Kostas Papadimitriou | |
66 | c4d1f3b7 | Kostas Papadimitriou | # mock the astakos authentication function
|
67 | c4d1f3b7 | Kostas Papadimitriou | from synnefo.lib import astakos |
68 | c4d1f3b7 | Kostas Papadimitriou | astakos.get_user = get_user_mock |
69 | c4d1f3b7 | Kostas Papadimitriou | |
70 | c4d1f3b7 | Kostas Papadimitriou | settings.SKIP_SSH_VALIDATION = True
|
71 | 9fd36718 | Kostas Papadimitriou | settings.HELPDESK_ENABLED = True
|
72 | c4d1f3b7 | Kostas Papadimitriou | self.client = AaiClient()
|
73 | c4d1f3b7 | Kostas Papadimitriou | self.user = 'test' |
74 | c4d1f3b7 | Kostas Papadimitriou | self.keys_url = reverse('ui_keys_collection') |
75 | c4d1f3b7 | Kostas Papadimitriou | |
76 | 9fd36718 | Kostas Papadimitriou | def test_enabled_setting(self): |
77 | 9fd36718 | Kostas Papadimitriou | settings.HELPDESK_ENABLED = False
|
78 | 9fd36718 | Kostas Papadimitriou | |
79 | 9fd36718 | Kostas Papadimitriou | # helpdesk is disabled
|
80 | 9fd36718 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-index'), user_token="0001") |
81 | 9fd36718 | Kostas Papadimitriou | self.assertEqual(r.status_code, 404) |
82 | 9fd36718 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']), |
83 | 9fd36718 | Kostas Papadimitriou | user_token="0001")
|
84 | 9fd36718 | Kostas Papadimitriou | self.assertEqual(r.status_code, 404) |
85 | 9fd36718 | Kostas Papadimitriou | |
86 | d59d86d4 | Kostas Papadimitriou | def test_ip_lookup(self): |
87 | d59d86d4 | Kostas Papadimitriou | # ip does not exist, proper message gets displayed
|
88 | d59d86d4 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', |
89 | d59d86d4 | Kostas Papadimitriou | args=["195.251.221.122"]), user_token='0001') |
90 | d59d86d4 | Kostas Papadimitriou | self.assertContains(r, 'User with IP') |
91 | d59d86d4 | Kostas Papadimitriou | |
92 | d59d86d4 | Kostas Papadimitriou | # ip exists, 'test' account discovered
|
93 | d59d86d4 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', |
94 | d59d86d4 | Kostas Papadimitriou | args=["195.251.222.211"]), user_token='0001') |
95 | d59d86d4 | Kostas Papadimitriou | self.assertEqual(r.context['account'], 'testuser2@test.com') |
96 | d59d86d4 | Kostas Papadimitriou | |
97 | c4d1f3b7 | Kostas Papadimitriou | def test_view_permissions(self): |
98 | c4d1f3b7 | Kostas Papadimitriou | |
99 | c4d1f3b7 | Kostas Papadimitriou | # anonymous user gets 403
|
100 | c4d1f3b7 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-index'), user_token=None) |
101 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 403) |
102 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']), |
103 | c4d1f3b7 | Kostas Papadimitriou | user_token=None)
|
104 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 403) |
105 | c4d1f3b7 | Kostas Papadimitriou | |
106 | c4d1f3b7 | Kostas Papadimitriou | # user not in helpdesk group gets 403
|
107 | c4d1f3b7 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-index')) |
108 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 403) |
109 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com'])) |
110 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 403) |
111 | c4d1f3b7 | Kostas Papadimitriou | |
112 | c4d1f3b7 | Kostas Papadimitriou | # user with helpdesk group gets 200
|
113 | c4d1f3b7 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-index'), user_token="0001") |
114 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 200) |
115 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']), |
116 | c4d1f3b7 | Kostas Papadimitriou | user_token="0001")
|
117 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(r.status_code, 200) |
118 | c4d1f3b7 | Kostas Papadimitriou | |
119 | c4d1f3b7 | Kostas Papadimitriou | def test_results_get_filtered(self): |
120 | c4d1f3b7 | Kostas Papadimitriou | """
|
121 | c4d1f3b7 | Kostas Papadimitriou | Test that view context data are filtered based on userid provided.
|
122 | c4d1f3b7 | Kostas Papadimitriou | Check helpdesk_test.json to see the existing database data.
|
123 | c4d1f3b7 | Kostas Papadimitriou | """
|
124 | c4d1f3b7 | Kostas Papadimitriou | |
125 | 9e3519e0 | Kostas Papadimitriou | # 'testuser@test.com' details, see helpdes/fixtures/helpdesk_test.json for
|
126 | 9e3519e0 | Kostas Papadimitriou | # more details
|
127 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']), |
128 | 9e3519e0 | Kostas Papadimitriou | user_token="0001")
|
129 | c4d1f3b7 | Kostas Papadimitriou | account = r.context['account']
|
130 | c4d1f3b7 | Kostas Papadimitriou | vms = r.context['vms']
|
131 | c4d1f3b7 | Kostas Papadimitriou | nets = r.context['networks']
|
132 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(account, "testuser@test.com") |
133 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(vms[0].name, "user1 vm") |
134 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(vms.count(), 1) |
135 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(len(nets), 2) |
136 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.context['account_exists'], True) |
137 | c4d1f3b7 | Kostas Papadimitriou | |
138 | c4d1f3b7 | Kostas Papadimitriou | |
139 | 9e3519e0 | Kostas Papadimitriou | # 'testuser2@test.com' details, see helpdes/fixtures/helpdesk_test.json for
|
140 | 9e3519e0 | Kostas Papadimitriou | # more details
|
141 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser2@test.com']), |
142 | c4d1f3b7 | Kostas Papadimitriou | user_token="0001")
|
143 | c4d1f3b7 | Kostas Papadimitriou | account = r.context['account']
|
144 | c4d1f3b7 | Kostas Papadimitriou | vms = r.context['vms']
|
145 | c4d1f3b7 | Kostas Papadimitriou | nets = r.context['networks']
|
146 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(account, "testuser2@test.com") |
147 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(vms[0].name, "user2 vm1") |
148 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(vms[1].name, "user2 vm2") |
149 | c4d1f3b7 | Kostas Papadimitriou | self.assertEqual(vms.count(), 2) |
150 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(len(nets), 1) |
151 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.context['account_exists'], True) |
152 | 9e3519e0 | Kostas Papadimitriou | |
153 | 9e3519e0 | Kostas Papadimitriou | # 'testuser5@test.com' does not exist, should be redirected to helpdesk home
|
154 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-details', args=['testuser5@test.com']), |
155 | 9e3519e0 | Kostas Papadimitriou | user_token="0001")
|
156 | 9e3519e0 | Kostas Papadimitriou | vms = r.context['vms']
|
157 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.context['account_exists'], False) |
158 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(vms.count(), 0) |
159 | 9e3519e0 | Kostas Papadimitriou | # 1 public network
|
160 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(len(nets), 1) |
161 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.context['account_exists'], False) |
162 | 9e3519e0 | Kostas Papadimitriou | |
163 | 9e3519e0 | Kostas Papadimitriou | def test_json_users(self): |
164 | 9e3519e0 | Kostas Papadimitriou | # invalid prefix gives 404 response
|
165 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test", |
166 | 9e3519e0 | Kostas Papadimitriou | user_token="0001")
|
167 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.status_code, 404) |
168 | c4d1f3b7 | Kostas Papadimitriou | |
169 | 9e3519e0 | Kostas Papadimitriou | # no users exist
|
170 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test@", |
171 | 9e3519e0 | Kostas Papadimitriou | user_token="0001")
|
172 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.status_code, 200) |
173 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.content, "[]") |
174 | 9e3519e0 | Kostas Papadimitriou | |
175 | ebda2ad4 | Kostas Papadimitriou | # 1 user exists
|
176 | 9e3519e0 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-userslist') + "?prefix=testuser@", |
177 | 9e3519e0 | Kostas Papadimitriou | user_token="0001")
|
178 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.status_code, 200) |
179 | 9e3519e0 | Kostas Papadimitriou | self.assertEqual(r.content, '["testuser@test.com"]') |
180 | ebda2ad4 | Kostas Papadimitriou | r = self.client.get(reverse('helpdesk-userslist') + "?prefix=testuser@t", |
181 | ebda2ad4 | Kostas Papadimitriou | user_token="0001")
|
182 | ebda2ad4 | Kostas Papadimitriou | self.assertEqual(r.status_code, 200) |
183 | ebda2ad4 | Kostas Papadimitriou | self.assertEqual(r.content, '["testuser@test.com"]') |