|
9 | 9 | import json |
10 | 10 | import logging |
11 | 11 | import mock |
12 | | -import os.path |
| 12 | +import requests |
13 | 13 |
|
14 | 14 | from django.conf import settings |
15 | 15 | from django.contrib.auth.models import User |
@@ -89,40 +89,49 @@ def test_app_override_id(self): |
89 | 89 | self.assertContains(response, 'This field must be unique.', status_code=400) |
90 | 90 | return response |
91 | 91 |
|
92 | | - def test_app_actions(self): |
| 92 | + @mock.patch('requests.get') |
| 93 | + def test_app_actions(self, mock_get): |
93 | 94 | url = '/v1/apps' |
94 | 95 | body = {'id': 'autotest'} |
95 | 96 | response = self.client.post(url, json.dumps(body), content_type='application/json', |
96 | 97 | HTTP_AUTHORIZATION='token {}'.format(self.token)) |
97 | 98 | self.assertEqual(response.status_code, 201) |
98 | 99 | app_id = response.data['id'] # noqa |
99 | | - # test logs |
100 | | - if not os.path.exists(settings.DEIS_LOG_DIR): |
101 | | - os.mkdir(settings.DEIS_LOG_DIR) |
102 | | - path = os.path.join(settings.DEIS_LOG_DIR, app_id + '.log') |
103 | | - # HACK: remove app lifecycle logs |
104 | | - if os.path.exists(path): |
105 | | - os.remove(path) |
106 | | - url = '/v1/apps/{app_id}/logs'.format(**locals()) |
107 | | - response = self.client.get(url, |
108 | | - HTTP_AUTHORIZATION='token {}'.format(self.token)) |
| 100 | + |
| 101 | + # test logs - 204 from deis-logger |
| 102 | + mock_response = mock.Mock() |
| 103 | + mock_response.status_code = 204 |
| 104 | + mock_get.return_value = mock_response |
| 105 | + url = "/v1/apps/{app_id}/logs".format(**locals()) |
| 106 | + response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) |
109 | 107 | self.assertEqual(response.status_code, 204) |
110 | | - self.assertEqual(response.data, 'No logs for {}'.format(app_id)) |
111 | | - # write out some fake log data and try again |
112 | | - with open(path, 'a') as f: |
113 | | - f.write(FAKE_LOG_DATA) |
114 | | - response = self.client.get(url, |
115 | | - HTTP_AUTHORIZATION='token {}'.format(self.token)) |
| 108 | + self.assertEqual(response.data, "No logs for {}".format(app_id)) |
| 109 | + |
| 110 | + # test logs - 404 from deis-logger |
| 111 | + mock_response.status_code = 404 |
| 112 | + response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) |
| 113 | + self.assertEqual(response.status_code, 204) |
| 114 | + self.assertEqual(response.data, "No logs for {}".format(app_id)) |
| 115 | + |
| 116 | + # test logs - unanticipated status code from deis-logger |
| 117 | + mock_response.status_code = 400 |
| 118 | + response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) |
| 119 | + self.assertEqual(response.status_code, 500) |
| 120 | + self.assertEqual(response.data, "Error accessing logs for {}".format(app_id)) |
| 121 | + |
| 122 | + # test logs - success accessing deis-logger |
| 123 | + mock_response.status_code = 200 |
| 124 | + mock_response.content = FAKE_LOG_DATA |
| 125 | + response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) |
116 | 126 | self.assertEqual(response.status_code, 200) |
117 | 127 | self.assertEqual(response.data, FAKE_LOG_DATA) |
118 | 128 |
|
119 | | - # test with log_lines |
120 | | - response = self.client.get(url + "?log_lines=1", |
121 | | - HTTP_AUTHORIZATION='token {}'.format(self.token)) |
122 | | - self.assertEqual(response.status_code, 200) |
123 | | - self.assertEqual(response.data, FAKE_LOG_DATA.splitlines(True)[4]) |
| 129 | + # test logs - HTTP request error while accessing deis-logger |
| 130 | + mock_get.side_effect = requests.exceptions.RequestException('Boom!') |
| 131 | + response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) |
| 132 | + self.assertEqual(response.status_code, 500) |
| 133 | + self.assertEqual(response.data, "Error accessing logs for {}".format(app_id)) |
124 | 134 |
|
125 | | - os.remove(path) |
126 | 135 | # TODO: test run needs an initial build |
127 | 136 |
|
128 | 137 | @mock.patch('api.models.logger') |
|
0 commit comments