blob: 53bdfcf454465d716cc100509a2b5f937a6f770f [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 Vogtc9e10ab2016-10-12 13:58:15 +02004import datetime
Dirk Vogtf130c752016-08-23 14:45:01 +02005
6# Create your tests here.
Dirk Vogtf2a33422016-10-11 17:17:26 +02007
8
9class DeviceTestCase(APITestCase):
10
11 def setUp(self):
12 pass
13
14 def test(self):
15 request = self.client.post("/hiccup/api/v1/devices/register/", {})
16 self.assertTrue("token" in request.data)
17 self.assertTrue("uuid" in request.data)
18 self.assertEqual(request.status_code, 200)
19
20# Create your tests here.
21
22
23class ListDevicesTestCase(APITestCase):
24
25 def setUp(self):
26 self.password = "test"
27 self.admin = User.objects.create_superuser(
28 'myuser', 'myemail@test.com', self.password)
29 self.client.post("/hiccup/api/v1/devices/register/", {})
30 request = self.client.post("/hiccup/api/v1/devices/register/", {})
31 self.uuid_to_retrieve = request.data['uuid']
32 self.token_to_retrieve = request.data['token']
33 request = self.client.post("/hiccup/api/v1/devices/register/", {})
34 self.uuid_to_delete = request.data['uuid']
35 self.token_to_delete = request.data['token']
36
37 def test_device_list(self):
38 client = APIClient()
39 client.login(username='myuser', password='test')
40 request = client.get("/hiccup/api/v1/devices/", {})
41 self.assertTrue("uuid" in request.data[1])
42 self.assertTrue(len(request.data) >= 3)
43 self.assertEqual(request.status_code, 200)
44 client.logout()
45
46 def test_device_list_unauth(self):
47 client = APIClient()
48 request = client.get("/hiccup/api/v1/devices/", {})
49 self.assertEqual(request.status_code, 401)
50
51 def test_retrieve_device_auth(self):
52 client = APIClient()
53 client.login(username='myuser', password='test')
54 request = client.get(
55 "/hiccup/api/v1/devices/{}/".format(self.uuid_to_retrieve), {})
56 self.assertEqual(request.status_code, 200)
57 self.assertEqual(request.data['uuid'], str(self.uuid_to_retrieve))
58 self.assertEqual(request.data['token'], self.token_to_retrieve)
59 client.logout()
60
61 def test_retrieve_device_unauth(self):
62 client = APIClient()
63 request = client.get(
64 "/hiccup/api/v1/devices/{}/".format(self.uuid_to_retrieve), {})
65 self.assertEqual(request.status_code, 401)
66
67 def test_delete_device_auth(self):
68 client = APIClient()
69 client.login(username='myuser', password='test')
70 url = "/hiccup/api/v1/devices/{}/".format(self.uuid_to_delete)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020071 request = client.delete(
72 url.format(self.uuid_to_delete), {})
73 self.assertEqual(request.status_code, 204)
74 request = client.delete(
75 url.format(self.uuid_to_delete), {})
76 self.assertEqual(request.status_code, 404)
Dirk Vogtf2a33422016-10-11 17:17:26 +020077 client.logout()
78
Dirk Vogtf2a33422016-10-11 17:17:26 +020079
Dirk Vogtc9e10ab2016-10-12 13:58:15 +020080class HeartbeatListTestCase(APITestCase):
Dirk Vogtf2a33422016-10-11 17:17:26 +020081
82 def setUp(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +020083 self.setup_users()
84 self.data = self.create_dummy_data(self.uuid)
85 self.url = "/hiccup/api/v1/heartbeats/"
86
87
88 def setup_users(self):
Dirk Vogtf2a33422016-10-11 17:17:26 +020089 self.password = "test"
Dirk Vogtf2a33422016-10-11 17:17:26 +020090 request = self.client.post("/hiccup/api/v1/devices/register/", {})
91 self.uuid = request.data['uuid']
92 self.token = request.data['token']
93 request = self.client.post("/hiccup/api/v1/devices/register/", {})
94 self.other_uuid = request.data['uuid']
95 self.other_token = request.data['token']
Dirk Vogt67eb1482016-10-13 12:42:56 +020096 self.admin = User.objects.create_superuser(
97 'myuser', 'myemail@test.com', self.password)
98 self.admin = APIClient()
99 self.admin.login(username='myuser', password='test')
100 self.user = APIClient()
101 self.other_user = APIClient()
102 self.user.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
103 self.other_user.credentials(HTTP_AUTHORIZATION='Token '
104 + self.other_token)
105 self.noauth_client = APIClient()
Dirk Vogtf2a33422016-10-11 17:17:26 +0200106
Dirk Vogt67eb1482016-10-13 12:42:56 +0200107
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200108 def create_dummy_data(self, uuid="not set"):
109 return {
110 'uuid': uuid,
111 'app_version': 2,
112 'uptime': "2 Hours",
113 'build_fingerprint': "models.CharField(max_length=200)",
114 'date': str(datetime.datetime(year=2016, month=1, day=1))
115 }
116
117 def test_create_no_auth(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200118 request = self.noauth_client.post(self.url, self.data)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200119 self.assertEqual(request.status_code, 401)
120
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200121 def test_create_as_admin(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200122 request = self.admin.post(self.url, self.data)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200123 self.assertEqual(request.status_code, 201)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200124 self.assertTrue(request.data['id'] > 0)
Dirk Vogtf2a33422016-10-11 17:17:26 +0200125
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200126 def test_create_as_admin_not_existing_device(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200127 request = self.admin.post(self.url,
128 self.create_dummy_data())
Dirk Vogtf2a33422016-10-11 17:17:26 +0200129 self.assertEqual(request.status_code, 404)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200130
131 def test_create_as_uuid_owner(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200132 request = self.user.post(self.url,
133 self.create_dummy_data(self.uuid))
Dirk Vogtf2a33422016-10-11 17:17:26 +0200134 self.assertEqual(request.status_code, 201)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200135 self.assertTrue(request.data['id'] == -1)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200136
137 def test_create_as_uuid_not_owner(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200138 request = self.user.post(self.url,
139 self.create_dummy_data(self.other_uuid))
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200140 self.assertEqual(request.status_code, 403)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200141
Dirk Vogt67eb1482016-10-13 12:42:56 +0200142 def post_multiple(self, client, data, count=5):
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200143 for i in range(count):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200144 client.post(self.url, data)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200145
146 def test_list(self):
147 count = 5
Dirk Vogt67eb1482016-10-13 12:42:56 +0200148 self.post_multiple(self.user, self.data, count)
149 request = self.admin.get(self.url)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200150 self.assertEqual(request.status_code, 200)
151 self.assertTrue(len(request.data) >= count)
Dirk Vogt67eb1482016-10-13 12:42:56 +0200152
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200153 def test_list_noauth(self):
154 count = 5
Dirk Vogt67eb1482016-10-13 12:42:56 +0200155 self.post_multiple(self.user, self.data, count)
156 request = self.noauth_client.get(self.url)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200157 self.assertEqual(request.status_code, 401)
158
159 def test_list_device_owner(self):
160 count = 5
Dirk Vogt67eb1482016-10-13 12:42:56 +0200161 self.post_multiple(self.user, self.data, count)
162 request = self.user.get(self.url)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200163 self.assertEqual(request.status_code, 403)
164
165
Dirk Vogt67eb1482016-10-13 12:42:56 +0200166def create_crashreport(uuid="not set"):
167 return {
168 'uuid': uuid,
169 'is_fake_report': 0,
170 'app_version': 2,
171 'uptime': "2 Hours",
172 'build_fingerprint': "models.CharField(max_length=200)",
173 'boot_reason': "models.CharField(max_length=200)",
174 'power_on_reason': "models.CharField(max_length=200)",
175 'power_off_reason': "models.CharField(max_length=200)",
176 'date': str(datetime.datetime(year=2016, month=1, day=1))
177 }
178
179
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200180class CrashreportListTestCase(HeartbeatListTestCase):
181
182 def setUp(self):
Dirk Vogt67eb1482016-10-13 12:42:56 +0200183 self.setup_users()
184 self.data = self.create_dummy_data(self.uuid)
185 self.url = "/hiccup/api/v1/crashreports/"
186
187
188 def create_dummy_data(self, uuid="not set"):
189 return create_crashreport(uuid)
190
191
192class LogfileUploadTest(APITestCase):
193 def setUp(self):
194 self.setup_users()
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200195 # we need a device
Dirk Vogt67eb1482016-10-13 12:42:56 +0200196 self.user.post("/hiccup/api/v1/crashreports/",
197 create_crashreport(self.uuid))
198 self.user.post("/hiccup/api/v1/crashreports/",
199 create_crashreport(self.uuid))
200 self.user.post("/hiccup/api/v1/crashreports/",
201 create_crashreport(self.other_uuid))
202 self.user.post("/hiccup/api/v1/crashreports/",
203 create_crashreport(self.other_uuid))
204
205 def setup_users(self):
206 self.password = "test"
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200207 request = self.client.post("/hiccup/api/v1/devices/register/", {})
208 self.uuid = request.data['uuid']
209 self.token = request.data['token']
210 request = self.client.post("/hiccup/api/v1/devices/register/", {})
211 self.other_uuid = request.data['uuid']
212 self.other_token = request.data['token']
Dirk Vogt67eb1482016-10-13 12:42:56 +0200213 self.admin = User.objects.create_superuser(
214 'myuser', 'myemail@test.com', self.password)
215 self.admin = APIClient()
216 self.admin.login(username='myuser', password='test')
217 self.user = APIClient()
218 self.other_user = APIClient()
219 self.user.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
220 self.other_user.credentials(HTTP_AUTHORIZATION='Token '
221 + self.other_token)
Dirk Vogtc9e10ab2016-10-12 13:58:15 +0200222
Dirk Vogt67eb1482016-10-13 12:42:56 +0200223 def test_Logfile_upload_as_admin(self):
224 client = APIClient()
225 client.login(username='myuser', password='test')