Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / helpdesk / tests.py @ 9e3519e0

History | View | Annotate | Download (6.2 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
class AaiClient(Client):
40

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

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

    
52
    fixtures = ['helpdesk_test']
53

    
54
    def setUp(self):
55

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

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

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

    
73
    def test_view_permissions(self):
74

    
75
        # anonymous user gets 403
76
        r = self.client.get(reverse('helpdesk-index'), user_token=None)
77
        self.assertEqual(r.status_code, 403)
78
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']),
79
                user_token=None)
80
        self.assertEqual(r.status_code, 403)
81

    
82
        # user not in helpdesk group gets 403
83
        r = self.client.get(reverse('helpdesk-index'))
84
        self.assertEqual(r.status_code, 403)
85
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']))
86
        self.assertEqual(r.status_code, 403)
87

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

    
95
    def test_results_get_filtered(self):
96
        """
97
        Test that view context data are filtered based on userid provided.
98
        Check helpdesk_test.json to see the existing database data.
99
        """
100

    
101
        # 'testuser@test.com' details, see helpdes/fixtures/helpdesk_test.json for
102
        # more details
103
        r = self.client.get(reverse('helpdesk-details', args=['testuser@test.com']),
104
                user_token="0001")
105
        account = r.context['account']
106
        vms = r.context['vms']
107
        nets = r.context['networks']
108
        self.assertEqual(account, "testuser@test.com")
109
        self.assertEqual(vms[0].name, "user1 vm")
110
        self.assertEqual(vms.count(), 1)
111
        self.assertEqual(len(nets), 2)
112
        self.assertEqual(r.context['account_exists'], True)
113

    
114

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

    
129
        # 'testuser5@test.com' does not exist, should be redirected to helpdesk home
130
        r = self.client.get(reverse('helpdesk-details', args=['testuser5@test.com']),
131
                user_token="0001")
132
        vms = r.context['vms']
133
        self.assertEqual(r.context['account_exists'], False)
134
        self.assertEqual(vms.count(), 0)
135
        # 1 public network
136
        self.assertEqual(len(nets), 1)
137
        self.assertEqual(r.context['account_exists'], False)
138

    
139
    def test_json_users(self):
140
        # invalid prefix gives 404 response
141
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test",
142
                user_token="0001")
143
        self.assertEqual(r.status_code, 404)
144

    
145
        # no users exist
146
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=test@",
147
                user_token="0001")
148
        self.assertEqual(r.status_code, 200)
149
        self.assertEqual(r.content, "[]")
150

    
151
        # 1 user exist
152
        r = self.client.get(reverse('helpdesk-userslist') + "?prefix=testuser@",
153
                user_token="0001")
154
        self.assertEqual(r.status_code, 200)
155
        self.assertEqual(r.content, '["testuser@test.com"]')
156