blob: 1c062ea7edb9cb9ea9f44fba2085f32f393401a1 [file] [log] [blame]
Dirk Vogtc9e10ab2016-10-12 13:58:15 +02001from django.contrib.auth.models import User
Dirk Vogtf2a33422016-10-11 17:17:26 +02002from rest_framework.test import APITestCase
3from rest_framework.test import APIClient
Dirk Vogt36635692016-10-17 12:19:10 +02004from rest_framework import status
Dirk Vogt36635692016-10-17 12:19:10 +02005import tempfile
Dirk Vogtf130c752016-08-23 14:45:01 +02006
Borjan Tchakaloffec814a72018-02-28 11:16:53 +04007
8class Dummy(object):
9 DEFAULT_DUMMY_DEVICE_REGISTER_VALUES = {
10 'board_date': '2015-12-15T01:23:45Z',
11 'chipset': 'Qualcomm MSM8974PRO-AA',
12 }
13
14 DEFAULT_DUMMY_HEARTBEAT_VALUES = {
15 'uuid': None,
16 'app_version': 10100,
17 'uptime': (
18 'up time: 16 days, 21:49:56, idle time: 5 days, 20:55:04, '
19 'sleep time: 10 days, 20:46:27'),
20 'build_fingerprint': (
21 'Fairphone/FP2/FP2:6.0.1/FP2-gms-18.03.1/FP2-gms-18.03.1:user/'
22 'release-keys'),
23 'radio_version': '4437.1-FP2-0-08',
24 'date': '2018-03-19T09:58:30.386Z',
25 }
26
27 DEFAULT_DUMMY_CRASHREPORTS_VALUES = DEFAULT_DUMMY_HEARTBEAT_VALUES.copy()
28 DEFAULT_DUMMY_CRASHREPORTS_VALUES.update({
29 'is_fake_report': 0,
30 'boot_reason': 'why?',
31 'power_on_reason': 'it was powered on',
32 'power_off_reason': 'something happened and it went off',
33 })
34
35 @staticmethod
36 def _update_copy(original, update):
37 """Merge fields of update into a copy of original"""
38 data = original.copy()
39 data.update(update)
40 return data
41
42 @staticmethod
43 def device_register_data(**kwargs):
44 """
45 Return the data required to register a device.
46
47 Use the values passed as keyword arguments or default to
48 the ones from `Dummy.DEFAULT_DUMMY_DEVICE_REGISTER_VALUES`.
49 """
50 return Dummy._update_copy(
51 Dummy.DEFAULT_DUMMY_DEVICE_REGISTER_VALUES, kwargs)
52
53 @staticmethod
54 def heartbeat_data(**kwargs):
55 """
56 Return the data required to create a heartbeat.
57
58 Use the values passed as keyword arguments or default to
59 the ones from `Dummy.DEFAULT_DUMMY_HEARTBEAT_VALUES`.
60 """
61 return Dummy._update_copy(Dummy.DEFAULT_DUMMY_HEARTBEAT_VALUES, kwargs)
62
63 @staticmethod
64 def crashreport_data(**kwargs):
65 """
66 Return the data required to create a crashreport.
67
68 Use the values passed as keyword arguments or default to
69 the ones from `Dummy.DEFAULT_DUMMY_CRASHREPORTS_VALUES`.
70 """
71 return Dummy._update_copy(
72 Dummy.DEFAULT_DUMMY_CRASHREPORTS_VALUES, kwargs)
Dirk Vogtf2a33422016-10-11 17:17:26 +020073
74
75class DeviceTestCase(APITestCase):
76
77 def setUp(self):
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +010078 self.url = "/hiccup/api/v1/devices/register/"
Dirk Vogtf2a33422016-10-11 17:17:26 +020079
80 def test(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +040081 request = self.client.post(self.url, Dummy.device_register_data())
Dirk Vogtf2a33422016-10-11 17:17:26 +020082 self.assertTrue("token" in request.data)
83 self.assertTrue("uuid" in request.data)
Dirk Vogt36635692016-10-17 12:19:10 +020084 self.assertEqual(request.status_code, status.HTTP_200_OK)
Dirk Vogtf2a33422016-10-11 17:17:26 +020085
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +010086 def test_create_missing_fields(self):
87 request = self.client.post(self.url)
88 self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
89
90 def test_create_missing_board_date(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +040091 data = Dummy.device_register_data()
92 data.pop('board_date')
93 request = self.client.post(self.url, data)
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +010094 self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
95
96 def test_create_missing_chipset(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +040097 data = Dummy.device_register_data()
98 data.pop('chipset')
99 request = self.client.post(self.url, data)
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +0100100 self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
101
102 def test_create_invalid_board_date(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400103 data = Dummy.device_register_data()
104 data['board_date'] = 'not_a_valid_date'
105 request = self.client.post(self.url, data)
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +0100106 self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
107
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400108 def test_create_non_existent_time_board_date(self):
109 """
110 Test the resolution of a naive date-time in which the Europe/Amsterdam daylight saving
111 time transition moved the time "forward".
112 """
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400113 data = Dummy.device_register_data()
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400114 # In 2017, the Netherlands changed from CET to CEST on March, 26 at 02:00
115 data['board_date'] = '2017-03-26 02:34:56'
116 request = self.client.post(self.url, data)
117 self.assertEqual(request.status_code, status.HTTP_200_OK)
118
119 def test_create_ambiguous_time_board_date(self):
120 """
121 Test the resolution of a naive date-time in which the Europe/Amsterdam daylight saving
122 time transition moved the time "backward".
123 """
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400124 data = Dummy.device_register_data()
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400125 # In 2017, the Netherlands changed from CEST to CET on October, 29 at 03:00
126 data['board_date'] = '2017-10-29 02:34:56'
127 request = self.client.post(self.url, data)
128 self.assertEqual(request.status_code, status.HTTP_200_OK)
129
Franz-Xaver Geigerd9943352018-02-27 14:26:41 +0100130
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400131class DeviceRegisterAPITestCase(APITestCase):
132 """Base class that offers device registration as well as base users
Dirk Vogtf2a33422016-10-11 17:17:26 +0200133
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400134 Attributes:
135 number_of_devices_created (int): The number of devices created in the
136 database.
137 """
Dirk Vogtf2a33422016-10-11 17:17:26 +0200138
139 def setUp(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400140 self.number_of_devices_created = 0
141
142 _, response_data = self._register_device()
143 self.uuid = response_data['uuid']
144 self.token = response_data['token']
145 self.user = APIClient()
146 self.user.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
147
148 _, response_data = self._register_device()
149 self.other_uuid = response_data['uuid']
150 self.other_token = response_data['token']
151 self.other_user = APIClient()
152 self.other_user.credentials(
153 HTTP_AUTHORIZATION='Token ' + self.other_token)
154
155 self.noauth_client = APIClient()
156
157 self.admin_user = User.objects.create_superuser(
158 'somebody', 'somebody@example.com', 'thepassword')
159 self.admin = APIClient()
160 self.admin.force_authenticate(self.admin_user)
161
162 def _register_device(self, **kwargs):
163 """Register a new device
164
165 Arguments:
166 **kwargs: The data to pass the dummy data creation
167 method `Dummy.device_register_data`.
168 Returns:
169 (dict(str, str), dict(str, str)): The tuple composed of the device
170 data that was used for the registration and the data returned by
171 the server in return.
172 """
173 data = Dummy.device_register_data(**kwargs)
174 response = self.client.post("/hiccup/api/v1/devices/register/", data)
175 self.assertEqual(response.status_code, status.HTTP_200_OK)
176 self.number_of_devices_created += 1
177
178 return (data, response.data)
179
180
181class ListDevicesTestCase(DeviceRegisterAPITestCase):
Dirk Vogtf2a33422016-10-11 17:17:26 +0200182
183 def test_device_list(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400184 request = self.admin.get("/hiccup/api/v1/devices/", {})
185 self.assertIsNot(request.data['results'][1]['uuid'], '')
186 self.assertEqual(
187 len(request.data['results']), self.number_of_devices_created)
Dirk Vogt36635692016-10-17 12:19:10 +0200188 self.assertEqual(request.status_code, status.HTTP_200_OK)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200189
190 def test_device_list_unauth(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400191 request = self.client.get("/hiccup/api/v1/devices/", {})
Dirk Vogt36635692016-10-17 12:19:10 +0200192 self.assertEqual(request.status_code, status.HTTP_401_UNAUTHORIZED)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200193
194 def test_retrieve_device_auth(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400195 request = self.admin.get(
196 "/hiccup/api/v1/devices/{}/".format(self.uuid), {})
Dirk Vogt36635692016-10-17 12:19:10 +0200197 self.assertEqual(request.status_code, status.HTTP_200_OK)
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400198 self.assertEqual(request.data['uuid'], str(self.uuid))
199 self.assertEqual(request.data['token'], self.token)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200200
201 def test_retrieve_device_unauth(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400202 request = self.client.get(
203 "/hiccup/api/v1/devices/{}/".format(self.uuid), {})
Dirk Vogt36635692016-10-17 12:19:10 +0200204 self.assertEqual(request.status_code, status.HTTP_401_UNAUTHORIZED)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200205
206 def test_delete_device_auth(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400207 url = "/hiccup/api/v1/devices/{}/".format(self.other_uuid)
208 request = self.admin.delete(url, {})
Dirk Vogt36635692016-10-17 12:19:10 +0200209 self.assertEqual(request.status_code, status.HTTP_204_NO_CONTENT)
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400210 request = self.admin.delete(url, {})
Dirk Vogt36635692016-10-17 12:19:10 +0200211 self.assertEqual(request.status_code, status.HTTP_404_NOT_FOUND)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200212
Dirk Vogtf2a33422016-10-11 17:17:26 +0200213
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400214class HeartbeatListTestCase(DeviceRegisterAPITestCase):
215
216 @staticmethod
217 def _create_dummy_data(**kwargs):
218 return Dummy.heartbeat_data(**kwargs)
219
220 def _post_multiple(self, client, data, count):
221 return [client.post(self.url, data) for _ in range(count)]
222
223 def _retrieve_single(self, user):
224 count = 5
225 requests = self._post_multiple(self.user, self.data, count)
226 self.assertEqual(len(requests), count)
227 self.assertEqual(requests[0].status_code, status.HTTP_201_CREATED)
228 url = "{}1/".format(self.url)
229 request = user.get(url)
230 return request.status_code
231
232 def _retrieve_single_by_device(self, user):
233 count = 5
234 requests = self._post_multiple(self.user, self.data, count)
235 self.assertEqual(len(requests), count)
236 self.assertEqual(requests[0].status_code, status.HTTP_201_CREATED)
237 url = "{}1/".format(self.url_by_uuid.format(self.uuid))
238 request = user.get(url)
239 return request.status_code
Dirk Vogtf2a33422016-10-11 17:17:26 +0200240
241 def setUp(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400242 super(HeartbeatListTestCase, self).setUp()
243 self.data = self._create_dummy_data(uuid=self.uuid)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200244 self.url = "/hiccup/api/v1/heartbeats/"
Dirk Vogte1784882016-10-13 16:09:38 +0200245 self.url_by_uuid = "/hiccup/api/v1/devices/{}/heartbeats/"
Dirk Vogt67eb1482016-10-13 12:42:56 +0200246
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200247 def test_create_no_auth(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200248 request = self.noauth_client.post(self.url, self.data)
Dirk Vogt36635692016-10-17 12:19:10 +0200249 self.assertEqual(request.status_code, status.HTTP_401_UNAUTHORIZED)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200250
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200251 def test_create_as_admin(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200252 request = self.admin.post(self.url, self.data)
Dirk Vogt36635692016-10-17 12:19:10 +0200253 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200254 self.assertTrue(request.data['id'] > 0)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200255
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200256 def test_create_as_admin_not_existing_device(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400257 request = self.admin.post(self.url, self._create_dummy_data())
Dirk Vogt36635692016-10-17 12:19:10 +0200258 self.assertEqual(request.status_code, status.HTTP_404_NOT_FOUND)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200259
260 def test_create_as_uuid_owner(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400261 request = self.user.post(
262 self.url, self._create_dummy_data(uuid=self.uuid))
Dirk Vogt36635692016-10-17 12:19:10 +0200263 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400264 self.assertEqual(request.data['id'], -1)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200265
266 def test_create_as_uuid_not_owner(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400267 request = self.user.post(
268 self.url, self._create_dummy_data(uuid=self.other_uuid))
Dirk Vogt36635692016-10-17 12:19:10 +0200269 self.assertEqual(request.status_code, status.HTTP_403_FORBIDDEN)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200270
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200271 def test_list(self):
272 count = 5
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400273 self._post_multiple(self.user, self.data, count)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200274 request = self.admin.get(self.url)
Dirk Vogt36635692016-10-17 12:19:10 +0200275 self.assertEqual(request.status_code, status.HTTP_200_OK)
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400276 self.assertEqual(len(request.data['results']), count)
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100277
278 def test_retrieve_single_admin(self):
279 self.assertEqual(
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400280 self._retrieve_single(self.admin), status.HTTP_200_OK)
Dirk Vogte1784882016-10-13 16:09:38 +0200281
282 def test_retrieve_single_device_owner(self):
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100283 self.assertEqual(
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400284 self._retrieve_single(self.user), status.HTTP_403_FORBIDDEN)
285
286 def test_retrieve_single_noauth(self):
287 self.assertEqual(
288 self._retrieve_single(self.noauth_client),
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100289 status.HTTP_401_UNAUTHORIZED)
Dirk Vogte1784882016-10-13 16:09:38 +0200290
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400291 def test_retrieve_single_by_device_admin(self):
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100292 self.assertEqual(
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400293 self._retrieve_single_by_device(self.admin), status.HTTP_200_OK)
Dirk Vogt0d9d5d22016-10-13 16:17:57 +0200294
295 def test_retrieve_single_by_device_device_owner(self):
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100296 self.assertEqual(
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400297 self._retrieve_single_by_device(self.user),
298 status.HTTP_403_FORBIDDEN)
299
300 def test_retrieve_single_by_device_noauth(self):
301 self.assertEqual(
302 self._retrieve_single_by_device(self.noauth_client),
Franz-Xaver Geigerd612fd22018-02-28 10:33:08 +0100303 status.HTTP_401_UNAUTHORIZED)
Dirk Vogt0d9d5d22016-10-13 16:17:57 +0200304
Dirk Vogte1784882016-10-13 16:09:38 +0200305 def test_list_by_uuid(self):
306 count = 5
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400307 self._post_multiple(self.user, self.data, count)
308 self._post_multiple(
309 self.admin, self._create_dummy_data(uuid=self.other_uuid), count)
Dirk Vogte1784882016-10-13 16:09:38 +0200310 url = self.url_by_uuid.format(self.uuid)
311 request = self.admin.get(url)
Dirk Vogt36635692016-10-17 12:19:10 +0200312 self.assertEqual(request.status_code, status.HTTP_200_OK)
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400313 self.assertEqual(len(request.data['results']), count)
Dirk Vogte1784882016-10-13 16:09:38 +0200314
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200315 def test_list_noauth(self):
316 count = 5
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400317 self._post_multiple(self.user, self.data, count)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200318 request = self.noauth_client.get(self.url)
Dirk Vogt36635692016-10-17 12:19:10 +0200319 self.assertEqual(request.status_code, status.HTTP_401_UNAUTHORIZED)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200320
321 def test_list_device_owner(self):
322 count = 5
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400323 self._post_multiple(self.user, self.data, count)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200324 request = self.user.get(self.url)
Dirk Vogt36635692016-10-17 12:19:10 +0200325 self.assertEqual(request.status_code, status.HTTP_403_FORBIDDEN)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200326
Borjan Tchakaloff869cf922018-02-19 11:01:16 +0100327 def test_no_radio_version(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400328 data = self._create_dummy_data(uuid=self.uuid)
Borjan Tchakaloff869cf922018-02-19 11:01:16 +0100329 data.pop('radio_version')
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400330 request = self.user.post(self.url, data)
331 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
Borjan Tchakaloff869cf922018-02-19 11:01:16 +0100332 url = self.url_by_uuid.format(self.uuid)
333 request = self.admin.get(url)
334 self.assertEqual(request.status_code, status.HTTP_200_OK)
335 self.assertEqual(len(request.data['results']), 1)
336 self.assertIsNone(request.data['results'][0]['radio_version'])
337
338 def test_radio_version_field(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400339 request = self.user.post(self.url, self.data)
340 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
Borjan Tchakaloff869cf922018-02-19 11:01:16 +0100341 url = self.url_by_uuid.format(self.uuid)
342 request = self.admin.get(url)
343 self.assertEqual(request.status_code, status.HTTP_200_OK)
344 self.assertEqual(len(request.data['results']), 1)
345 self.assertEqual(request.data['results'][0]['radio_version'],
346 self.data['radio_version'])
347
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400348 def test_send_non_existent_time(self):
349 """
350 Test the resolution of a naive date-time in which the Europe/Amsterdam daylight saving
351 time transition moved the time "forward".
352 """
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400353 data = self._create_dummy_data(uuid=self.uuid)
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400354 # In 2017, the Netherlands changed from CET to CEST on March, 26 at 02:00
355 data['date'] = '2017-03-26 02:34:56'
356 request = self.user.post(self.url, data)
357 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
358
359 def test_send_ambiguous_time(self):
360 """
361 Test the resolution of a naive date-time in which the Europe/Amsterdam daylight saving
362 time transition moved the time "backward".
363 """
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400364 data = self._create_dummy_data(uuid=self.uuid)
Borjan Tchakaloff866f75e2018-03-01 12:04:00 +0400365 # In 2017, the Netherlands changed from CEST to CET on October, 29 at 03:00
366 data['date'] = '2017-10-29 02:34:56'
367 request = self.user.post(self.url, data)
368 self.assertEqual(request.status_code, status.HTTP_201_CREATED)
369
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200370
371class CrashreportListTestCase(HeartbeatListTestCase):
372
373 def setUp(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400374 super(CrashreportListTestCase, self).setUp()
Dirk Vogt67eb1482016-10-13 12:42:56 +0200375 self.url = "/hiccup/api/v1/crashreports/"
Dirk Vogte1784882016-10-13 16:09:38 +0200376 self.url_by_uuid = "/hiccup/api/v1/devices/{}/crashreports/"
Dirk Vogt67eb1482016-10-13 12:42:56 +0200377
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400378 @staticmethod
379 def _create_dummy_data(**kwargs):
380 return Dummy.crashreport_data(**kwargs)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200381
382
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400383class LogfileUploadTest(DeviceRegisterAPITestCase):
384
Dirk Vogt67eb1482016-10-13 12:42:56 +0200385 def setUp(self):
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400386 super(LogfileUploadTest, self).setUp()
Dirk Vogt67eb1482016-10-13 12:42:56 +0200387
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400388 for uuid in [self.uuid, self.other_uuid]:
389 data = Dummy.crashreport_data(uuid=uuid)
390 for _ in range(2):
391 self.user.post("/hiccup/api/v1/crashreports/", data)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200392
Dirk Vogt36635692016-10-17 12:19:10 +0200393 def get_url(self, uuid, report_id, filename):
394 return ("/hiccup/api/v1/devices/{}/crashreports/{}/logfile_put/{}/".
395 format(uuid, report_id, "test.log"))
396
Dirk Vogt67eb1482016-10-13 12:42:56 +0200397 def test_Logfile_upload_as_admin(self):
Dirk Vogt36635692016-10-17 12:19:10 +0200398 f = tempfile.NamedTemporaryFile('w+', suffix=".log", delete=True)
399 f.write(u"blihblahblub")
Borjan Tchakaloffec814a72018-02-28 11:16:53 +0400400 request = self.admin.post(
Dirk Vogt36635692016-10-17 12:19:10 +0200401 self.get_url(self.uuid, 1, f.name),
402 {'file': f}, format="multipart")
403 self.assertEqual(status.HTTP_201_CREATED, request.status_code)