-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest_app.py
More file actions
121 lines (105 loc) · 5.04 KB
/
test_app.py
File metadata and controls
121 lines (105 loc) · 5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
"""
Unit tests for the Deis api app.
Run the tests with "./manage.py test api"
"""
from __future__ import unicode_literals
import json
import os.path
from django.test import TestCase
from django.test.utils import override_settings
from django.conf import settings
@override_settings(CELERY_ALWAYS_EAGER=True)
class AppTest(TestCase):
"""Tests creation of applications"""
fixtures = ['tests.json']
def setUp(self):
self.assertTrue(
self.client.login(username='autotest', password='password'))
body = {'id': 'autotest', 'domain': 'autotest.local', 'type': 'mock',
'hosts': 'host1,host2', 'auth': 'base64string', 'options': {}}
response = self.client.post('/api/clusters', json.dumps(body),
content_type='application/json')
self.assertEqual(response.status_code, 201)
def test_app(self):
"""
Test that a user can create, read, update and delete an application
"""
url = '/api/apps'
body = {'cluster': 'autotest'}
response = self.client.post(url, json.dumps(body), content_type='application/json')
self.assertEqual(response.status_code, 201)
app_id = response.data['id'] # noqa
self.assertIn('cluster', response.data)
self.assertIn('id', response.data)
response = self.client.get('/api/apps')
self.assertEqual(response.status_code, 200)
self.assertEqual(len(response.data['results']), 1)
url = '/api/apps/{app_id}'.format(**locals())
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
body = {'id': 'new'}
response = self.client.patch(url, json.dumps(body), content_type='application/json')
self.assertEqual(response.status_code, 405)
response = self.client.delete(url)
self.assertEqual(response.status_code, 204)
def test_app_override_id(self):
body = {'cluster': 'autotest', 'id': 'myid'}
response = self.client.post('/api/apps', json.dumps(body),
content_type='application/json')
self.assertEqual(response.status_code, 201)
body = {'cluster': response.data['cluster'], 'id': response.data['id']}
response = self.client.post('/api/apps', json.dumps(body),
content_type='application/json')
self.assertContains(response, 'App with this Id already exists.', status_code=400)
return response
def test_app_actions(self):
url = '/api/apps'
body = {'cluster': 'autotest', 'id': 'autotest'}
response = self.client.post(url, json.dumps(body), content_type='application/json')
self.assertEqual(response.status_code, 201)
app_id = response.data['id'] # noqa
# test logs
if not os.path.exists(settings.DEIS_LOG_DIR):
os.mkdir(settings.DEIS_LOG_DIR)
path = os.path.join(settings.DEIS_LOG_DIR, app_id + '.log')
if os.path.exists(path):
os.remove(path)
url = '/api/apps/{app_id}/logs'.format(**locals())
response = self.client.post(url)
self.assertEqual(response.status_code, 404)
self.assertEqual(response.data, 'No logs for {}'.format(app_id))
# write out some fake log data and try again
with open(path, 'w') as f:
f.write(FAKE_LOG_DATA)
response = self.client.post(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, FAKE_LOG_DATA)
# test run
url = '/api/apps/{app_id}/run'.format(**locals())
body = {'command': 'ls -al'}
response = self.client.post(url, json.dumps(body), content_type='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data[0], 0)
def test_app_errors(self):
cluster_id, app_id = 'autotest', 'autotest-errors'
url = '/api/apps'
body = {'cluster': cluster_id, 'id': 'camelCase'}
response = self.client.post(url, json.dumps(body), content_type='application/json')
self.assertContains(response, 'App IDs can only contain [a-z0-9-]', status_code=400)
body = {'cluster': cluster_id, 'id': app_id}
response = self.client.post(url, json.dumps(body), content_type='application/json')
self.assertEqual(response.status_code, 201)
app_id = response.data['id'] # noqa
url = '/api/apps/{app_id}'.format(**locals())
response = self.client.delete(url)
self.assertEquals(response.status_code, 204)
for endpoint in ('containers', 'config', 'releases', 'builds'):
url = '/api/apps/{app_id}/{endpoint}'.format(**locals())
response = self.client.get(url)
self.assertEquals(response.status_code, 404)
FAKE_LOG_DATA = """
2013-08-15 12:41:25 [33454] [INFO] Starting gunicorn 17.5
2013-08-15 12:41:25 [33454] [INFO] Listening at: http://0.0.0.0:5000 (33454)
2013-08-15 12:41:25 [33454] [INFO] Using worker: sync
2013-08-15 12:41:25 [33457] [INFO] Booting worker with pid 33457
"""