Statistics
| Branch: | Tag: | Revision:

root / ui / userdata / tests.py @ 1a97a220

History | View | Annotate | Download (4.7 kB)

1
"""
2
This file demonstrates two different styles of tests (one doctest and one
3
unittest). These will both pass when you run "manage.py test".
4

5
Replace these with more appropriate tests for your application.
6
"""
7

    
8
from django.test import TestCase
9
from django.conf import settings
10
from django.test.client import Client
11
from django.core.urlresolvers import clear_url_caches
12
from django.utils import simplejson as json
13
from django.conf import settings
14

    
15
from synnefo.ui.userdata.models import User
16
from synnefo.ui.userdata.models import *
17

    
18
class AaiClient(Client):
19

    
20
    def request(self, **request):
21
        request['HTTP_X_AUTH_TOKEN'] = '46e427d657b20defe352804f0eb6f8a2'
22
        return super(AaiClient, self).request(**request)
23

    
24
class TestRestViews(TestCase):
25

    
26
    fixtures = ['users']
27

    
28
    def setUp(self):
29
        settings.ROOT_URLCONF = 'synnefo.ui.userdata.urls'
30
        clear_url_caches()
31
        self.client = AaiClient()
32
        self.user = User.objects.get(pk=1)
33

    
34
    def test_keys_collection_get(self):
35
        resp = self.client.get("/keys")
36
        self.assertEqual(resp.content, "[]")
37

    
38
        PublicKeyPair.objects.create(user=self.user, name="key pair 1",
39
                content="content1")
40

    
41
        resp = self.client.get("/keys")
42
        self.assertEqual(resp.content, """[{"content": "content1", "uri": "/keys/1", "name": "key pair 1", "id": 1}]""")
43

    
44
        PublicKeyPair.objects.create(user=self.user, name="key pair 2",
45
                content="content2")
46

    
47
        resp = self.client.get("/keys")
48
        self.assertEqual(resp.content, """[{"content": "content1", "uri": "/keys/1", "name": "key pair 1", "id": 1}, {"content": "content2", "uri": "/keys/2", "name": "key pair 2", "id": 2}]""")
49

    
50
    def test_keys_resourse_get(self):
51
        resp = self.client.get("/keys/1")
52
        self.assertEqual(resp.status_code, 404)
53

    
54
        # create a public key
55
        PublicKeyPair.objects.create(user=self.user, name="key pair 1",
56
                content="content1")
57
        resp = self.client.get("/keys/1")
58
        self.assertEqual(resp.content, """{"content": "content1", "uri": "/keys/1", "name": "key pair 1", "id": 1}""")
59

    
60
        # update
61
        resp = self.client.put("/keys/1", json.dumps({'name':'key pair 1 new name'}),
62
                content_type='application/json')
63
        pk = PublicKeyPair.objects.get(pk=1)
64
        self.assertEqual(pk.name, "key pair 1 new name")
65

    
66
        # delete
67
        resp = self.client.delete("/keys/1")
68
        self.assertEqual(PublicKeyPair.objects.count(), 0)
69

    
70
        resp = self.client.get("/keys/1")
71
        self.assertEqual(resp.status_code, 404)
72

    
73
        resp = self.client.get("/keys")
74
        self.assertEqual(resp.content, "[]")
75

    
76
        # test rest create
77
        resp = self.client.post("/keys", json.dumps({'name':'key pair 2',
78
            'content':"""key 2 content"""}),
79
                content_type='application/json')
80
        self.assertEqual(PublicKeyPair.objects.count(), 1)
81
        pk = PublicKeyPair.objects.get(pk=1)
82
        self.assertEqual(pk.name, "key pair 2")
83
        self.assertEqual(pk.content, "key 2 content")
84

    
85
    def test_generate_views(self):
86
        import base64
87

    
88
        # just test that
89
        resp = self.client.get("/keys/generate")
90
        self.assertNotEqual(resp, "")
91

    
92
        data = json.loads(resp.content)
93
        self.assertEqual(data.has_key('private'), True)
94
        self.assertEqual(data.has_key('private'), True)
95

    
96
        # public key is base64 encoded
97
        base64.b64decode(data['public'].replace("ssh-rsa ",""))
98

    
99
        # remove header/footer
100
        private = "".join(data['private'].split("\n")[1:-1])
101

    
102
        # private key is base64 encoded
103
        base64.b64decode(private)
104

    
105
    def test_invalid_data(self):
106
        resp = self.client.post("/keys", json.dumps({'content':"""key 2 content"""}),
107
                content_type='application/json')
108

    
109
        self.assertEqual(resp.status_code, 500)
110
        self.assertEqual(resp.content, """{"non_field_key": "__all__", "errors": """
111
                                       """{"name": ["This field cannot be blank."]}}""")
112

    
113
        settings.USERDATA_MAX_SSH_KEYS_PER_USER = 2
114

    
115
        # test ssh limit
116
        resp = self.client.post("/keys", json.dumps({'name':'key1', 'content':"""key 1 content"""}),
117
                content_type='application/json')
118
        resp = self.client.post("/keys", json.dumps({'name':'key1', 'content':"""key 1 content"""}),
119
                content_type='application/json')
120
        resp = self.client.post("/keys", json.dumps({'name':'key1', 'content':"""key 1 content"""}),
121
                content_type='application/json')
122
        self.assertEqual(resp.status_code, 500)
123
        self.assertEqual(resp.content, """{"non_field_key": "__all__", "errors": """
124
                                       """{"__all__": ["SSH keys limit exceeded."]}}""")