Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / helpdesk / tests.py @ 080d1457

History | View | Annotate | Download (6.9 kB)

1
# Copyright 2011 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

    
35
from django.test import TestCase, Client
36
from django.conf import settings
37
from django.core.urlresolvers import reverse
38

    
39
from synnefo.db import models
40

    
41
class AaiClient(Client):
42

    
43
    def request(self, **request):
44
        token = request.pop('user_token', '0000')
45
        if token:
46
            request['HTTP_X_AUTH_TOKEN'] = token
47
        return super(AaiClient, self).request(**request)
48

    
49
class HelpdeskTests(TestCase):
50
    """
51
    Helpdesk tests. Test correctness of permissions and returned data.
52
    """
53

    
54
    fixtures = ['helpdesk_test']
55

    
56
    def setUp(self):
57

    
58
        def get_user_mock(request, *args, **kwargs):
59
            if request.META.get('HTTP_X_AUTH_TOKEN', None) == '0000':
60
                request.user_uniq = 'test'
61
                request.user = {'uniq': 'test'}
62
            if request.META.get('HTTP_X_AUTH_TOKEN', None) == '0001':
63
                request.user_uniq = 'test'
64
                request.user = {'uniq': 'test', 'groups':['default','helpdesk']}
65

    
66
        # mock the astakos authentication function
67
        from synnefo.lib import astakos
68
        astakos.get_user = get_user_mock
69

    
70
        settings.SKIP_SSH_VALIDATION = True
71
        self.client = AaiClient()
72
        self.user = 'test'
73
        self.keys_url = reverse('ui_keys_collection')
74

    
75
    def test_ip_lookup(self):
76
        # ip does not exist, proper message gets displayed
77
        r = self.client.get(reverse('helpdesk-details',
78
            args=["195.251.221.122"]), user_token='0001')
79
        self.assertContains(r, 'User with IP')
80

    
81
        # ip exists, 'test' account discovered
82
        r = self.client.get(reverse('helpdesk-details',
83
            args=["195.251.222.211"]), user_token='0001')
84
        self.assertEqual(r.context['account'], 'testuser2@test.com')
85

    
86
    def test_view_permissions(self):
87

    
88
        # anonymous user gets 403
89
        r = self.client.get(reverse('helpdesk-index'), user_token=None)
90
        self.assertEqual(r.status_code, 403)
91
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']),
92
                user_token=None)
93
        self.assertEqual(r.status_code, 403)
94

    
95
        # user not in helpdesk group gets 403
96
        r = self.client.get(reverse('helpdesk-index'))
97
        self.assertEqual(r.status_code, 403)
98
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']))
99
        self.assertEqual(r.status_code, 403)
100

    
101
        # user with helpdesk group gets 200
102
        r = self.client.get(reverse('helpdesk-index'), user_token="0001")
103
        self.assertEqual(r.status_code, 200)
104
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']),
105
                user_token="0001")
106
        self.assertEqual(r.status_code, 200)
107

    
108
    def test_results_get_filtered(self):
109
        """
110
        Test that view context data are filtered based on userid provided.
111
        Check helpdesk_test.json to see the existing database data.
112
        """
113

    
114
        # 'testuser@test.com' details, see helpdes/fixtures/helpdesk_test.json for
115
        # more details
116
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']),
117
                user_token="0001")
118
        account = r.context['account']
119
        vms = r.context['vms']
120
        nets = r.context['networks']
121
        self.assertEqual(account, "testuser@test.com")
122
        self.assertEqual(vms[0].name, "user1 vm")
123
        self.assertEqual(vms.count(), 1)
124
        self.assertEqual(len(nets), 2)
125
        self.assertEqual(r.context['account_exists'], True)
126

    
127

    
128
        # 'testuser2@test.com' details, see helpdes/fixtures/helpdesk_test.json for
129
        # more details
130
        r = self.client.get(reverse('helpdesk-details', args=['testuser2@test.com']),
131
                user_token="0001")
132
        account = r.context['account']
133
        vms = r.context['vms']
134
        nets = r.context['networks']
135
        self.assertEqual(account, "testuser2@test.com")
136
        self.assertEqual(vms[0].name, "user2 vm1")
137
        self.assertEqual(vms[1].name, "user2 vm2")
138
        self.assertEqual(vms.count(), 2)
139
        self.assertEqual(len(nets), 1)
140
        self.assertEqual(r.context['account_exists'], True)
141

    
142
        # 'testuser5@test.com' does not exist, should be redirected to helpdesk home
143
        r = self.client.get(reverse('helpdesk-details', args=['testuser5@test.com']),
144
                user_token="0001")
145
        vms = r.context['vms']
146
        self.assertEqual(r.context['account_exists'], False)
147
        self.assertEqual(vms.count(), 0)
148
        # 1 public network
149
        self.assertEqual(len(nets), 1)
150
        self.assertEqual(r.context['account_exists'], False)
151

    
152
    def test_json_users(self):
153
        # invalid prefix gives 404 response
154
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test",
155
                user_token="0001")
156
        self.assertEqual(r.status_code, 404)
157

    
158
        # no users exist
159
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test@",
160
                user_token="0001")
161
        self.assertEqual(r.status_code, 200)
162
        self.assertEqual(r.content, "[]")
163

    
164
        # 1 user exists
165
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=testuser@",
166
                user_token="0001")
167
        self.assertEqual(r.status_code, 200)
168
        self.assertEqual(r.content, '["testuser@test.com"]')
169
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=testuser@t",
170
                user_token="0001")
171
        self.assertEqual(r.status_code, 200)
172
        self.assertEqual(r.content, '["testuser@test.com"]')
173