Statistics
| Branch: | Tag: | Revision:

root / aai / tests.py @ ac3c3a4b

History | View | Annotate | Download (5.3 kB)

1
#
2
# Unit Tests for aai
3
#
4
# Provides automated tests for aai module. The tests
5
#
6
# Copyright 2011 Greek Research and Technology Network
7
#
8

    
9
from django.test import TestCase
10
from django.test.client import Client
11
from django.conf import settings
12

    
13
from synnefo.aai.shibboleth import Tokens, NoUniqueToken
14
from synnefo.db.models import SynnefoUser
15

    
16
from datetime import datetime, timedelta
17

    
18
class AuthTestCase(TestCase):
19
    fixtures = ['api_test_data', 'auth_test_data']
20
    apibase = '/api/v1.1'
21

    
22
    def setUp(self):
23
        self.client = Client()
24

    
25
    def test_shibboleth_correct_request(self):
26
        """test request that should succeed and register a user
27
        """
28
        response = self.client.get(self.apibase + '/servers', {},
29
                                   **{Tokens.SIB_NAME: 'Jimmy',
30
                                      Tokens.SIB_EPPN: 'jh@gmail.com',
31
                                      Tokens.SIB_CN: 'Jimmy Hendrix',
32
                                      Tokens.SIB_SESSION_ID: '123321',
33
                                      'TEST-AAI' : 'true'})
34
        user = None
35
        try:
36
            user = SynnefoUser.objects.get(uniq = "jh@gmail.com")
37
        except SynnefoUser.DoesNotExist:
38
            self.assertNotEqual(user, None)
39
        self.assertNotEqual(user, None)
40
        self.assertEquals(response.status_code, 302)
41
        self.assertEquals(response['Location'], settings.APP_INSTALL_URL)
42
        self.assertTrue('X-Auth-Token' in response)
43
        self.assertEquals(response['X-Auth-Token'], user.auth_token)
44

    
45
        response = self.client.get(self.apibase + '/servers', {},
46
                                   **{Tokens.SIB_NAME: 'Jimmy',
47
                                      Tokens.SIB_EPPN: 'jh@gmail.com',
48
                                      Tokens.SIB_CN: 'Jimmy Hendrix',
49
                                      Tokens.SIB_SESSION_ID: '123321',
50
                                      'TEST-AAI' : 'true'})
51

    
52
        user1 = None
53
        try:
54
            user1 = SynnefoUser.objects.get(uniq = "jh@gmail.com")
55
        except SynnefoUser.DoesNotExist:
56
            self.assertNotEqual(user1, None)
57

    
58
        self.assertEquals(user1.auth_token , user.auth_token)
59
        self.assertTrue(response['Location'].endswith, '/servers')
60

    
61
    def test_shibboleth_no_uniq_request(self):
62
        """test a request with no unique field
63
        """
64
        response = self.client.get(self.apibase + '/servers', {},
65
                                    **{Tokens.SIB_NAME: 'Jimmy',
66
                                    Tokens.SIB_CN: 'Jimmy Hendrix',
67
                                    'TEST-AAI' : 'true'})
68
        self._test_redirect(response)
69

    
70
    def test_shibboleth_expired_token(self):
71
        """ test request from expired token
72
        """
73
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
74
        self.assertNotEqual(user.auth_token_created, None)
75
        self._update_user_ts(user)
76
        response = self.client.get(self.apibase + '/servers', {},
77
                                   **{'X-Auth-Token': user.auth_token,
78
                                      'TEST-AAI' : 'true'})
79
        self._test_redirect(response)
80

    
81
    def test_shibboleth_redirect(self):
82
        """ test redirect to Sibboleth page
83
        """
84
        response = self.client.get(self.apibase + '/servers', {}, **{'TEST-AAI' : 'true'})
85
        self._test_redirect(response)
86

    
87
    def test_shibboleth_auth(self):
88
        """ test authentication with X-Auth-Token
89
        """
90
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
91
        response = self.client.get(self.apibase + '/servers', {},
92
                                   **{'X-Auth-Token': user.auth_token,
93
                                      'TEST-AAI' : 'true'})
94
        self.assertTrue(response.status_code, 200)
95
        self.assertTrue('Vary' in response)
96
        self.assertTrue('X-Auth-Token' in response['Vary'])
97

    
98
    def test_fail_oapi_auth(self):
99
        """ test authentication from not registered user using OpenAPI
100
        """
101
        response = self.client.get(self.apibase + '/servers', {},
102
                                   **{'X-Auth-User': 'notme',
103
                                      'X-Auth-Key': '0xdeadbabe',
104
                                      'TEST-AAI' : 'true'})
105
        self.assertEquals(response.status_code, 401)
106

    
107
    def test_oapi_auth(self):
108
        """authentication with user registration
109
        """
110
        response = self.client.get(self.apibase + '/', {},
111
                                   **{'X-Auth-User': 'testdbuser',
112
                                      'X-Auth-Key': 'test@synnefo.gr',
113
                                      'TEST-AAI' : 'true'})
114
        self.assertEquals(response.status_code, 204)
115
        self.assertNotEqual(response['X-Auth-Token'], None)
116
        self.assertEquals(response['X-Server-Management-Url'], '')
117
        self.assertEquals(response['X-Storage-Url'], '')
118
        self.assertEquals(response['X-CDN-Management-Url'], '')
119

    
120
    def _test_redirect(self, response):
121
        self.assertEquals(response.status_code, 302)
122
        self.assertTrue('Location' in response)
123
        self.assertTrue(response['Location'].endswith(settings.LOGIN_PATH))
124

    
125
    def _update_user_ts(self, user):
126
        user.auth_token_created = (datetime.now() -
127
                                   timedelta(hours = settings.AUTH_TOKEN_DURATION))
128
        user.save()
129

    
130