Statistics
| Branch: | Tag: | Revision:

root / aai / tests.py @ c9fdfa27

History | View | Annotate | Download (3.8 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 dd53338a Georgios Gousios
from synnefo.db.models import SynnefoUser
14 dd53338a Georgios Gousios
15 faa26af8 Georgios Gousios
from datetime import datetime, timedelta
16 faa26af8 Georgios Gousios
17 2cd99e7a Georgios Gousios
from synnefo.aai.shibboleth import Tokens
18 2cd99e7a Georgios Gousios
19 1428a464 Georgios Gousios
20 1428a464 Georgios Gousios
class AaiTestCase(TestCase):
21 faa26af8 Georgios Gousios
    fixtures = ['api_test_data', 'auth_test_data']
22 dd53338a Georgios Gousios
    apibase = '/api/v1.1'
23 5fb55fba Georgios Gousios
24 5fb55fba Georgios Gousios
    def setUp(self):
25 5fb55fba Georgios Gousios
        self.client = Client()
26 5fb55fba Georgios Gousios
27 1896d262 Georgios Gousios
    def test_shibboleth_correct_request(self):
28 1896d262 Georgios Gousios
        """test request that should succeed and register a user
29 420f2c20 Georgios Gousios
        """
30 1428a464 Georgios Gousios
        response = self.client.get('/index.html', {},
31 ac3c3a4b Georgios Gousios
                                   **{Tokens.SIB_NAME: 'Jimmy',
32 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_EPPN: 'jh@gmail.com',
33 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_CN: 'Jimmy Hendrix',
34 ac3c3a4b Georgios Gousios
                                      Tokens.SIB_SESSION_ID: '123321',
35 8f377cd6 Georgios Gousios
                                      'TEST-AAI' : 'true'})
36 dd53338a Georgios Gousios
        user = None
37 dd53338a Georgios Gousios
        try:
38 dd53338a Georgios Gousios
            user = SynnefoUser.objects.get(uniq = "jh@gmail.com")
39 dd53338a Georgios Gousios
        except SynnefoUser.DoesNotExist:
40 dd53338a Georgios Gousios
            self.assertNotEqual(user, None)
41 dd53338a Georgios Gousios
        self.assertNotEqual(user, None)
42 57e59589 Georgios Gousios
        self.assertEquals(response.status_code, 302)
43 ac3c3a4b Georgios Gousios
        self.assertEquals(response['Location'], settings.APP_INSTALL_URL)
44 57e59589 Georgios Gousios
        self.assertTrue('X-Auth-Token' in response)
45 57e59589 Georgios Gousios
        self.assertEquals(response['X-Auth-Token'], user.auth_token)
46 c06de383 Georgios Gousios
        #self.assertNotEquals(response.cookies['X-Auth-Token'].find(user.auth_token), -1)
47 420f2c20 Georgios Gousios
48 1896d262 Georgios Gousios
    def test_shibboleth_no_uniq_request(self):
49 1896d262 Georgios Gousios
        """test a request with no unique field
50 1896d262 Georgios Gousios
        """
51 1428a464 Georgios Gousios
        response = self.client.get('/index.html', {},
52 1428a464 Georgios Gousios
                               **{Tokens.SIB_NAME: 'Jimmy',
53 1428a464 Georgios Gousios
                                  Tokens.SIB_CN: 'Jimmy Hendrix',
54 1428a464 Georgios Gousios
                                  'TEST-AAI': 'true'})
55 faa26af8 Georgios Gousios
        self._test_redirect(response)
56 1896d262 Georgios Gousios
57 71a2be7d Georgios Gousios
    def test_shibboleth_expired_token(self):
58 71a2be7d Georgios Gousios
        """ test request from expired token
59 71a2be7d Georgios Gousios
        """
60 1428a464 Georgios Gousios
        user = SynnefoUser.objects.get(uniq="test@synnefo.gr")
61 c9fdfa27 Georgios Gousios
        self.assertNotEqual(user.auth_token_expires, None)
62 c9fdfa27 Georgios Gousios
        user.auth_token_expires = datetime.now()
63 c9fdfa27 Georgios Gousios
        user.save()
64 1428a464 Georgios Gousios
        response = self.client.get('/index.html', {},
65 1428a464 Georgios Gousios
                               **{'X-Auth-Token': user.auth_token,
66 1428a464 Georgios Gousios
                                  'TEST-AAI': 'true'})
67 faa26af8 Georgios Gousios
        self._test_redirect(response)
68 71a2be7d Georgios Gousios
69 57e59589 Georgios Gousios
    def test_shibboleth_redirect(self):
70 57e59589 Georgios Gousios
        """ test redirect to Sibboleth page
71 1896d262 Georgios Gousios
        """
72 1428a464 Georgios Gousios
        response = self.client.get('/index.html', {}, **{'TEST-AAI': 'true'})
73 57e59589 Georgios Gousios
        self._test_redirect(response)
74 57e59589 Georgios Gousios
75 57e59589 Georgios Gousios
    def test_shibboleth_auth(self):
76 57e59589 Georgios Gousios
        """ test authentication with X-Auth-Token
77 57e59589 Georgios Gousios
        """
78 1428a464 Georgios Gousios
        user = SynnefoUser.objects.get(uniq="test@synnefo.gr")
79 1428a464 Georgios Gousios
        response = self.client.get('/index.html', {},
80 1428a464 Georgios Gousios
                               **{'X-Auth-Token': user.auth_token,
81 1428a464 Georgios Gousios
                                  'TEST-AAI': 'true'})
82 57e59589 Georgios Gousios
        self.assertTrue(response.status_code, 200)
83 57e59589 Georgios Gousios
        self.assertTrue('Vary' in response)
84 57e59589 Georgios Gousios
        self.assertTrue('X-Auth-Token' in response['Vary'])
85 1896d262 Georgios Gousios
86 c9fdfa27 Georgios Gousios
    def test_auth_cookie(self):
87 c9fdfa27 Georgios Gousios
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
88 c9fdfa27 Georgios Gousios
        self.client.cookies['X-Auth-Token'] = user.auth_token
89 c9fdfa27 Georgios Gousios
        response = self.client.get('/', {},
90 c9fdfa27 Georgios Gousios
                                   **{'X-Auth-Token': user.auth_token,
91 c9fdfa27 Georgios Gousios
                                      'TEST-AAI' : 'true'})
92 c9fdfa27 Georgios Gousios
        self.assertTrue(response.status_code, 200)
93 c9fdfa27 Georgios Gousios
        self.assertTrue('Vary' in response)
94 c9fdfa27 Georgios Gousios
        self.assertTrue('X-Auth-Token' in response['Vary'])
95 c9fdfa27 Georgios Gousios
96 faa26af8 Georgios Gousios
    def _test_redirect(self, response):
97 faa26af8 Georgios Gousios
        self.assertEquals(response.status_code, 302)
98 57e59589 Georgios Gousios
        self.assertTrue('Location' in response)
99 60de282a Georgios Gousios
        self.assertTrue(response['Location'].endswith(settings.LOGIN_PATH))