Statistics
| Branch: | Tag: | Revision:

root / aai / tests.py @ ac3c3a4b

History | View | Annotate | Download (5.3 kB)

1 5fb55fba Georgios Gousios
#
2 8f377cd6 Georgios Gousios
# Unit Tests for aai
3 5fb55fba Georgios Gousios
#
4 8f377cd6 Georgios Gousios
# Provides automated tests for aai module. The tests
5 5fb55fba Georgios Gousios
#
6 5fb55fba Georgios Gousios
# Copyright 2011 Greek Research and Technology Network
7 5fb55fba Georgios Gousios
#
8 5fb55fba Georgios Gousios
9 5fb55fba Georgios Gousios
from django.test import TestCase
10 5fb55fba Georgios Gousios
from django.test.client import Client
11 faa26af8 Georgios Gousios
from django.conf import settings
12 5fb55fba Georgios Gousios
13 8f377cd6 Georgios Gousios
from synnefo.aai.shibboleth import Tokens, NoUniqueToken
14 dd53338a Georgios Gousios
from synnefo.db.models import SynnefoUser
15 dd53338a Georgios Gousios
16 faa26af8 Georgios Gousios
from datetime import datetime, timedelta
17 faa26af8 Georgios Gousios
18 5fb55fba Georgios Gousios
class AuthTestCase(TestCase):
19 faa26af8 Georgios Gousios
    fixtures = ['api_test_data', 'auth_test_data']
20 dd53338a Georgios Gousios
    apibase = '/api/v1.1'
21 5fb55fba Georgios Gousios
22 5fb55fba Georgios Gousios
    def setUp(self):
23 5fb55fba Georgios Gousios
        self.client = Client()
24 5fb55fba Georgios Gousios
25 1896d262 Georgios Gousios
    def test_shibboleth_correct_request(self):
26 1896d262 Georgios Gousios
        """test request that should succeed and register a user
27 420f2c20 Georgios Gousios
        """
28 dd53338a Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
29 ac3c3a4b Georgios Gousios
                                   **{Tokens.SIB_NAME: 'Jimmy',
30 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_EPPN: 'jh@gmail.com',
31 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_CN: 'Jimmy Hendrix',
32 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_SESSION_ID: '123321',
33 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
34 dd53338a Georgios Gousios
        user = None
35 dd53338a Georgios Gousios
        try:
36 dd53338a Georgios Gousios
            user = SynnefoUser.objects.get(uniq = "jh@gmail.com")
37 dd53338a Georgios Gousios
        except SynnefoUser.DoesNotExist:
38 dd53338a Georgios Gousios
            self.assertNotEqual(user, None)
39 dd53338a Georgios Gousios
        self.assertNotEqual(user, None)
40 57e59589 Georgios Gousios
        self.assertEquals(response.status_code, 302)
41 ac3c3a4b Georgios Gousios
        self.assertEquals(response['Location'], settings.APP_INSTALL_URL)
42 57e59589 Georgios Gousios
        self.assertTrue('X-Auth-Token' in response)
43 57e59589 Georgios Gousios
        self.assertEquals(response['X-Auth-Token'], user.auth_token)
44 420f2c20 Georgios Gousios
45 ac3c3a4b Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
46 ac3c3a4b Georgios Gousios
                                   **{Tokens.SIB_NAME: 'Jimmy',
47 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_EPPN: 'jh@gmail.com',
48 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_CN: 'Jimmy Hendrix',
49 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_SESSION_ID: '123321',
50 ac3c3a4b Georgios Gousios
                                      'TEST-AAI' : 'true'})
51 ac3c3a4b Georgios Gousios
52 ac3c3a4b Georgios Gousios
        user1 = None
53 ac3c3a4b Georgios Gousios
        try:
54 ac3c3a4b Georgios Gousios
            user1 = SynnefoUser.objects.get(uniq = "jh@gmail.com")
55 ac3c3a4b Georgios Gousios
        except SynnefoUser.DoesNotExist:
56 ac3c3a4b Georgios Gousios
            self.assertNotEqual(user1, None)
57 ac3c3a4b Georgios Gousios
58 ac3c3a4b Georgios Gousios
        self.assertEquals(user1.auth_token , user.auth_token)
59 ac3c3a4b Georgios Gousios
        self.assertTrue(response['Location'].endswith, '/servers')
60 ac3c3a4b Georgios Gousios
61 1896d262 Georgios Gousios
    def test_shibboleth_no_uniq_request(self):
62 1896d262 Georgios Gousios
        """test a request with no unique field
63 1896d262 Georgios Gousios
        """
64 faa26af8 Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
65 ac3c3a4b Georgios Gousios
                                    **{Tokens.SIB_NAME: 'Jimmy',
66 ac3c3a4b Georgios Gousios
                                    Tokens.SIB_CN: 'Jimmy Hendrix',
67 8f377cd6 Georgios Gousios
                                    'TEST-AAI' : 'true'})
68 faa26af8 Georgios Gousios
        self._test_redirect(response)
69 1896d262 Georgios Gousios
70 71a2be7d Georgios Gousios
    def test_shibboleth_expired_token(self):
71 71a2be7d Georgios Gousios
        """ test request from expired token
72 71a2be7d Georgios Gousios
        """
73 faa26af8 Georgios Gousios
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
74 faa26af8 Georgios Gousios
        self.assertNotEqual(user.auth_token_created, None)
75 25380811 Georgios Gousios
        self._update_user_ts(user)
76 faa26af8 Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
77 8f377cd6 Georgios Gousios
                                   **{'X-Auth-Token': user.auth_token,
78 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
79 faa26af8 Georgios Gousios
        self._test_redirect(response)
80 71a2be7d Georgios Gousios
81 57e59589 Georgios Gousios
    def test_shibboleth_redirect(self):
82 57e59589 Georgios Gousios
        """ test redirect to Sibboleth page
83 1896d262 Georgios Gousios
        """
84 8f377cd6 Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {}, **{'TEST-AAI' : 'true'})
85 57e59589 Georgios Gousios
        self._test_redirect(response)
86 57e59589 Georgios Gousios
87 57e59589 Georgios Gousios
    def test_shibboleth_auth(self):
88 57e59589 Georgios Gousios
        """ test authentication with X-Auth-Token
89 57e59589 Georgios Gousios
        """
90 faa26af8 Georgios Gousios
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
91 57e59589 Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
92 8f377cd6 Georgios Gousios
                                   **{'X-Auth-Token': user.auth_token,
93 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
94 57e59589 Georgios Gousios
        self.assertTrue(response.status_code, 200)
95 57e59589 Georgios Gousios
        self.assertTrue('Vary' in response)
96 57e59589 Georgios Gousios
        self.assertTrue('X-Auth-Token' in response['Vary'])
97 1896d262 Georgios Gousios
98 1896d262 Georgios Gousios
    def test_fail_oapi_auth(self):
99 1896d262 Georgios Gousios
        """ test authentication from not registered user using OpenAPI
100 5fb55fba Georgios Gousios
        """
101 dd53338a Georgios Gousios
        response = self.client.get(self.apibase + '/servers', {},
102 dd53338a Georgios Gousios
                                   **{'X-Auth-User': 'notme',
103 8f377cd6 Georgios Gousios
                                      'X-Auth-Key': '0xdeadbabe',
104 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
105 5fb55fba Georgios Gousios
        self.assertEquals(response.status_code, 401)
106 5fb55fba Georgios Gousios
107 1896d262 Georgios Gousios
    def test_oapi_auth(self):
108 1896d262 Georgios Gousios
        """authentication with user registration
109 1896d262 Georgios Gousios
        """
110 dd53338a Georgios Gousios
        response = self.client.get(self.apibase + '/', {},
111 25380811 Georgios Gousios
                                   **{'X-Auth-User': 'testdbuser',
112 8f377cd6 Georgios Gousios
                                      'X-Auth-Key': 'test@synnefo.gr',
113 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
114 5fb55fba Georgios Gousios
        self.assertEquals(response.status_code, 204)
115 5fb55fba Georgios Gousios
        self.assertNotEqual(response['X-Auth-Token'], None)
116 5fb55fba Georgios Gousios
        self.assertEquals(response['X-Server-Management-Url'], '')
117 5fb55fba Georgios Gousios
        self.assertEquals(response['X-Storage-Url'], '')
118 5fb55fba Georgios Gousios
        self.assertEquals(response['X-CDN-Management-Url'], '')
119 5fb55fba Georgios Gousios
120 faa26af8 Georgios Gousios
    def _test_redirect(self, response):
121 faa26af8 Georgios Gousios
        self.assertEquals(response.status_code, 302)
122 57e59589 Georgios Gousios
        self.assertTrue('Location' in response)
123 60de282a Georgios Gousios
        self.assertTrue(response['Location'].endswith(settings.LOGIN_PATH))
124 25380811 Georgios Gousios
125 25380811 Georgios Gousios
    def _update_user_ts(self, user):
126 25380811 Georgios Gousios
        user.auth_token_created = (datetime.now() -
127 25380811 Georgios Gousios
                                   timedelta(hours = settings.AUTH_TOKEN_DURATION))
128 25380811 Georgios Gousios
        user.save()
129 8f377cd6 Georgios Gousios
130 8f377cd6 Georgios Gousios