Statistics
| Branch: | Tag: | Revision:

root / api / tests_auth.py @ 57e59589

History | View | Annotate | Download (4.9 kB)

1
#
2
# Unit Tests for api
3
#
4
# Provides automated tests for api module
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.logic.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_GIVEN_NAME: 'Jimmy',
30
                                      Tokens.SIB_EDU_PERSON_PRINCIPAL_NAME: 'jh@gmail.com',
31
                                      Tokens.SIB_DISPLAY_NAME: 'Jimmy Hendrix'})
32
        user = None
33
        try:
34
            user = SynnefoUser.objects.get(uniq = "jh@gmail.com")
35
        except SynnefoUser.DoesNotExist:
36
            self.assertNotEqual(user, None)
37
        self.assertNotEqual(user, None)
38
        self.assertEquals(response.status_code, 302)
39
        self.assertEquals(response['Location'], "http://testserver/")
40
        self.assertTrue('X-Auth-Token' in response)
41
        self.assertEquals(response['X-Auth-Token'], user.auth_token)
42

    
43
    def test_shibboleth_no_uniq_request(self):
44
        """test a request with no unique field
45
        """
46
        response = self.client.get(self.apibase + '/servers', {},
47
                                    **{Tokens.SIB_GIVEN_NAME: 'Jimmy',
48
                                    Tokens.SIB_DISPLAY_NAME: 'Jimmy Hendrix'})
49
        self._test_redirect(response)
50

    
51
    def test_shibboleth_wrong_from_request(self):
52
        """ test request from wrong host
53
        """
54
        response = self.client.get(self.apibase + '/servers', {},
55
                                   **{Tokens.SIB_GIVEN_NAME: 'Jimmy',
56
                                      Tokens.SIB_EDU_PERSON_PRINCIPAL_NAME: 'jh@gmail.com',
57
                                      Tokens.SIB_DISPLAY_NAME: 'Jimmy Hendrix',
58
                                      'REMOTE_ADDR': '1.2.3.4',
59
                                      'SERVER_NAME': 'nohost.nodomain'})
60
        self._test_redirect(response)
61

    
62
    def test_shibboleth_expired_token(self):
63
        """ test request from expired token
64
        """
65
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
66
        self.assertNotEqual(user.auth_token_created, None)
67
        user.auth_token_created = (datetime.now() -
68
                                   timedelta(hours = settings.AUTH_TOKEN_DURATION))
69
        user.save()
70
        response = self.client.get(self.apibase + '/servers', {},
71
                                   **{'X-Auth-Token': user.auth_token})
72
        self._test_redirect(response)
73

    
74
    def test_shibboleth_redirect(self):
75
        """ test redirect to Sibboleth page
76
        """
77
        response = self.client.get(self.apibase + '/servers')
78
        self._test_redirect(response)
79

    
80
    def test_shibboleth_auth(self):
81
        """ test authentication with X-Auth-Token
82
        """
83
        user = SynnefoUser.objects.get(uniq = "test@synnefo.gr")
84
        response = self.client.get(self.apibase + '/servers', {},
85
                                   **{'X-Auth-Token': user.auth_token})
86
        self.assertTrue(response.status_code, 200)
87
        self.assertTrue('Vary' in response)
88
        self.assertTrue('X-Auth-Token' in response['Vary'])
89

    
90
    def test_fail_oapi_auth(self):
91
        """ test authentication from not registered user using OpenAPI
92
        """
93
        response = self.client.get(self.apibase + '/servers', {},
94
                                   **{'X-Auth-User': 'notme',
95
                                      'X-Auth-Key': '0xdeadbabe'})
96
        self.assertEquals(response.status_code, 401)
97

    
98
    def test_oapi_auth(self):
99
        """authentication with user registration
100
        """
101
        response = self.client.get(self.apibase + '/', {},
102
                                   **{'X-Auth-User': 'testuser',
103
                                      'X-Auth-Key': 'testuserpasswd'})
104
        self.assertEquals(response.status_code, 204)
105
        self.assertNotEqual(response['X-Auth-Token'], None)
106
        self.assertEquals(response['X-Server-Management-Url'], '')
107
        self.assertEquals(response['X-Storage-Url'], '')
108
        self.assertEquals(response['X-CDN-Management-Url'], '')
109

    
110
        #Check access now that we do have an auth token
111
        token = response['X-Auth-Token']
112
        response = self.client.get(self.apibase + '/servers/detail', {},
113
                                   **{'X-Auth-Token': token})
114
        self.assertEquals(response.status_code, 200)
115

    
116
    def _test_redirect(self, response):
117
        self.assertEquals(response.status_code, 302)
118
        self.assertTrue('Location' in response)
119
        self.assertEquals(response['Location'], settings.SHIBBOLETH_HOST)