blob: 15bcca5299c1cb41fa77565cc7575a93c4c8f664 [file] [log] [blame]
Andy Bavier614af142020-08-07 14:49:56 -07001#!/usr/bin/env python
2
3# Copyright 2020-present Open Networking Foundation
4#
Hyunsun Moon200eba52021-04-05 21:31:54 -07005# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
Andy Bavier614af142020-08-07 14:49:56 -07006
7import unittest
8import edge_monitoring_server as ems
9import datetime
10import pytz
Hyunsun Moon5f237ec2020-09-29 14:45:52 -070011import json
12import time
Andy Bavier2d60fc52021-05-04 16:13:39 -070013from copy import deepcopy
Hyunsun Moon5f237ec2020-09-29 14:45:52 -070014
15
16test_edge = {
Andy Baviere4591222021-07-07 12:44:19 -070017 'name': 'ace-menlo-rasp-pi',
Hyunsun Moon5f237ec2020-09-29 14:45:52 -070018 'status': {
19 'control_plane': 'connected',
20 'user_plane': 'connected'
21 },
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -080022 'dongle_stats': {
23 'SuccessfulFetch': True,
24 'IMSI': '315021000000000',
25 'CellGlobalID': '315010001F800',
26 'PLMNStatus': 'Success'
27 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -080028 'speedtest': {
29 'ping': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070030 'dry_run': {
31 'transmitted': 3,
32 'received': 2,
33 'median': 5.0,
34 'min': 1.0,
35 'avg': 5.0,
36 'max': 9.0,
37 'stddev': 1.0
38 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -080039 'dns': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070040 'transmitted': 10,
41 'received': 9,
42 'median': 4.0,
Jeremy Ronquillof4200252021-02-13 16:11:04 -080043 'min': 2.0,
44 'avg': 4.0,
45 'max': 6.0,
46 'stddev': 1.0
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -070047 },
48 'iperf_server': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070049 'transmitted': 10,
50 'received': 10,
51 'median': 3.0,
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -070052 'min': 1.0,
53 'avg': 3.0,
54 'max': 5.0,
55 'stddev': 1.0
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070056 },
57 'management_server': {
58 'transmitted': 10,
59 'received': 8,
60 'median': 6.0,
61 'min': 2.0,
62 'avg': 6.0,
63 'max': 10.0,
64 'stddev': 1.0
Jeremy Ronquillof4200252021-02-13 16:11:04 -080065 }
Jeremy Ronquilloc7434622021-04-08 21:06:00 -070066 },
67 'iperf': {
68 'cluster': {
69 'downlink': 100.0,
70 'uplink': 10.0
71 }
Jeremy Ronquillof4200252021-02-13 16:11:04 -080072 }
73 },
Hyunsun Moon200eba52021-04-05 21:31:54 -070074 'signal_quality': {
75 'rsrq': 30,
76 'rsrp': 80
77 },
78 'last_update': time.time()
79}
80
81test_edge_status_only = {
Andy Baviere4591222021-07-07 12:44:19 -070082 'name': 'ace-menlo-rasp-pi',
Hyunsun Moon200eba52021-04-05 21:31:54 -070083 'status': {
84 'control_plane': 'connected',
85 'user_plane': 'connected'
86 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -080087 'last_update': time.time()
88}
89
90test_edge_no_speedtest = {
Andy Baviere4591222021-07-07 12:44:19 -070091 'name': 'ace-menlo-rasp-pi',
Jeremy Ronquillof4200252021-02-13 16:11:04 -080092 'status': {
93 'control_plane': 'connected',
94 'user_plane': 'connected'
95 },
Hyunsun Moon200eba52021-04-05 21:31:54 -070096 'signal_quality': {
97 'rsrq': 30,
98 'rsrp': 80
99 },
100 'last_update': time.time()
101}
102
103test_edge_no_signal_quality = {
Andy Baviere4591222021-07-07 12:44:19 -0700104 'name': 'ace-menlo-rasp-pi',
Hyunsun Moon200eba52021-04-05 21:31:54 -0700105 'status': {
106 'control_plane': 'connected',
107 'user_plane': 'connected'
108 },
109 'speedtest': {
110 'ping': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700111 'dry_run': {
112 'transmitted': 3,
113 'received': 2,
114 'median': 5.0,
115 'min': 1.0,
116 'avg': 5.0,
117 'max': 9.0,
118 'stddev': 1.0
119 },
Hyunsun Moon200eba52021-04-05 21:31:54 -0700120 'dns': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700121 'transmitted': 10,
122 'received': 9,
123 'median': 4.0,
Hyunsun Moon200eba52021-04-05 21:31:54 -0700124 'min': 2.0,
125 'avg': 4.0,
126 'max': 6.0,
127 'stddev': 1.0
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700128 },
129 'iperf_server': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700130 'transmitted': 10,
131 'received': 10,
132 'median': 3.0,
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700133 'min': 1.0,
134 'avg': 3.0,
135 'max': 5.0,
136 'stddev': 1.0
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700137 },
138 'management_server': {
139 'transmitted': 10,
140 'received': 8,
141 'median': 6.0,
142 'min': 2.0,
143 'avg': 6.0,
144 'max': 10.0,
145 'stddev': 1.0
Hyunsun Moon200eba52021-04-05 21:31:54 -0700146 }
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700147 },
148 'iperf': {
149 'cluster': {
150 'downlink': 100.0,
151 'uplink': 10.0
152 }
Hyunsun Moon200eba52021-04-05 21:31:54 -0700153 }
154 },
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700155 'last_update': time.time()
156}
Andy Bavier614af142020-08-07 14:49:56 -0700157
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700158test_edge_no_iperf = {
Andy Baviere4591222021-07-07 12:44:19 -0700159 'name': 'ace-menlo-rasp-pi',
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700160 'status': {
161 'control_plane': 'connected',
162 'user_plane': 'connected'
163 },
164 'speedtest': {
165 'ping': {
166 'dns': {
167 'min': 2.0,
168 'avg': 4.0,
169 'max': 6.0,
170 'stddev': 1.0
171 }
172 }
173 },
174 'signal_quality': {
175 'rsrq': 30,
176 'rsrp': 80
177 },
178 'last_update': time.time()
179}
180
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700181test_edge_pre_0_7_0 = {
182 'name': 'ace-menlo-rasp-pi',
183 'status': {
184 'control_plane': 'connected',
185 'user_plane': 'connected'
186 },
187 'speedtest': {
188 'ping': {
189 'dns': {
190 'min': 2.0,
191 'avg': 4.0,
192 'max': 6.0,
193 'stddev': 1.0
194 },
195 'iperf_server': {
196 'min': 1.0,
197 'avg': 3.0,
198 'max': 5.0,
199 'stddev': 1.0
200 }
201 },
202 'iperf': {
203 'cluster': {
204 'downlink': 100.0,
205 'uplink': 10.0
206 }
207 }
208 },
209 'signal_quality': {
210 'rsrq': 30,
211 'rsrp': 80
212 },
213 'last_update': time.time()
214}
215
216test_edge_dns_iperf = {
217 'name': 'ace-menlo-rasp-pi',
218 'status': {
219 'control_plane': 'connected',
220 'user_plane': 'connected'
221 },
222 'speedtest': {
223 'ping': {
224 'dns': {
225 'transmitted': 10,
226 'received': 9,
227 'median': 4.0,
228 'min': 2.0,
229 'avg': 4.0,
230 'max': 6.0,
231 'stddev': 1.0
232 },
233 'iperf_server': {
234 'transmitted': 10,
235 'received': 10,
236 'median': 3.0,
237 'min': 1.0,
238 'avg': 3.0,
239 'max': 5.0,
240 'stddev': 1.0
241 }
242 },
243 'iperf': {
244 'cluster': {
245 'downlink': 100.0,
246 'uplink': 10.0
247 }
248 }
249 },
250 'signal_quality': {
251 'rsrq': 30,
252 'rsrp': 80
253 },
254 'last_update': time.time()
255}
256
257test_edge_basic_ping_stats = {
258 'name': 'ace-menlo-rasp-pi',
259 'status': {
260 'control_plane': 'connected',
261 'user_plane': 'connected'
262 },
263 'speedtest': {
264 'ping': {
265 'dry_run': {
266 'min': 1.0,
267 'avg': 5.0,
268 'max': 9.0,
269 'stddev': 1.0
270 },
271 'dns': {
272 'min': 2.0,
273 'avg': 4.0,
274 'max': 6.0,
275 'stddev': 1.0
276 },
277 'iperf_server': {
278 'min': 1.0,
279 'avg': 3.0,
280 'max': 5.0,
281 'stddev': 1.0
282 },
283 'management_server': {
284 'min': 2.0,
285 'avg': 6.0,
286 'max': 10.0,
287 'stddev': 1.0
288 }
289 },
290 'iperf': {
291 'cluster': {
292 'downlink': 100.0,
293 'uplink': 10.0
294 }
295 }
296 },
297 'signal_quality': {
298 'rsrq': 30,
299 'rsrp': 80
300 },
301 'last_update': time.time()
302}
Andy Bavier614af142020-08-07 14:49:56 -0700303
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800304test_edge_no_dongle_stats = {
305 'name': 'ace-menlo-rasp-pi',
306 'status': {
307 'control_plane': 'connected',
308 'user_plane': 'connected'
309 },
310 'speedtest': {
311 'ping': {
312 'dry_run': {
313 'transmitted': 3,
314 'received': 2,
315 'median': 5.0,
316 'min': 1.0,
317 'avg': 5.0,
318 'max': 9.0,
319 'stddev': 1.0
320 },
321 'dns': {
322 'transmitted': 10,
323 'received': 9,
324 'median': 4.0,
325 'min': 2.0,
326 'avg': 4.0,
327 'max': 6.0,
328 'stddev': 1.0
329 },
330 'iperf_server': {
331 'transmitted': 10,
332 'received': 10,
333 'median': 3.0,
334 'min': 1.0,
335 'avg': 3.0,
336 'max': 5.0,
337 'stddev': 1.0
338 },
339 'management_server': {
340 'transmitted': 10,
341 'received': 8,
342 'median': 6.0,
343 'min': 2.0,
344 'avg': 6.0,
345 'max': 10.0,
346 'stddev': 1.0
347 }
348 },
349 'iperf': {
350 'cluster': {
351 'downlink': 100.0,
352 'uplink': 10.0
353 }
354 }
355 },
356 'signal_quality': {
357 'rsrq': 30,
358 'rsrp': 80
359 },
360 'last_update': time.time()
361}
362
Andy Bavier614af142020-08-07 14:49:56 -0700363class MyEvent:
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700364 def __init__ (self, location = "", description = "", summary = "", start = None, end = None, all_day = False):
Andy Bavier614af142020-08-07 14:49:56 -0700365 self.location = location
366 self.description = description
367 self.summary = summary
368 self.start = start
369 self.end = end
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700370 self.all_day = all_day
Andy Bavier614af142020-08-07 14:49:56 -0700371
372class MyEventNoLoc:
373 def __init__ (self, description = "", summary = ""):
374 self.description = description
375 self.summary = summary
376
377
378class TestEdgeMonitoringServer(unittest.TestCase):
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700379 def setUp(self):
380 self.app = ems.app.test_client()
Hyunsun Moon200eba52021-04-05 21:31:54 -0700381 self.emulated_time = time.mktime(time.strptime("2021-04-05 00:00:00", "%Y-%m-%d %H:%M:%S"))
382 self.time_method = time.time
383 time.time = self._get_time
384
385 def tearDown(self):
386 time.time = self.time_method
387
388 def _get_time(self):
389 return self.emulated_time
390
391 def _assert_status_metrics_exist(self, data):
Andy Baviere4591222021-07-07 12:44:19 -0700392 self.assertTrue('aetheredge_status_control_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
393 self.assertTrue('aetheredge_status_user_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
394 self.assertTrue('aetheredge_last_update{name="ace-menlo-rasp-pi"}' in data)
395 self.assertTrue('aetheredge_connect_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
396 self.assertTrue('aetheredge_ping_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
397 self.assertTrue('aetheredge_e2e_tests_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
398 self.assertTrue('aetheredge_e2e_tests_down{name="ace-menlo-rasp-pi"} 0.0' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700399
400 def _assert_speedtest_metrics_exist(self, data):
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700401 self.assertTrue('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"} 3' in data)
402 self.assertTrue('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"} 2' in data)
403 self.assertTrue('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"} 5.0' in data)
404 self.assertTrue('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
405 self.assertTrue('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"} 5.0' in data)
406 self.assertTrue('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"} 9.0' in data)
407 self.assertTrue('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
408
409 self.assertTrue('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
410 self.assertTrue('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
411 self.assertTrue('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700412 self.assertTrue('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
413 self.assertTrue('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"} 4.0' in data)
414 self.assertTrue('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"} 6.0' in data)
415 self.assertTrue('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700416
417 self.assertTrue('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
418 self.assertTrue('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
419 self.assertTrue('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700420 self.assertTrue('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
421 self.assertTrue('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"} 3.0' in data)
422 self.assertTrue('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"} 5.0' in data)
423 self.assertTrue('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700424
425 self.assertTrue('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
426 self.assertTrue('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"} 8' in data)
427 self.assertTrue('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"} 6.0' in data)
428 self.assertTrue('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
429 self.assertTrue('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"} 6.0' in data)
430 self.assertTrue('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"} 10.0' in data)
431 self.assertTrue('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
432
Andy Baviere4591222021-07-07 12:44:19 -0700433 self.assertTrue('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"} 100.0' in data)
434 self.assertTrue('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"} 10.0' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700435
436 def _assert_signal_quality_metrics_exist(self, data):
Andy Baviere4591222021-07-07 12:44:19 -0700437 self.assertTrue('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"} 30' in data)
438 self.assertTrue('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"} 80' in data)
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700439
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800440 def _assert_dongle_stats_metrics_exist(self, data):
441 self.assertTrue('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"}' in data)
442 self.assertTrue('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi",value="315010001F800"}' in data)
443 self.assertTrue('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi",value="Success"}' in data)
444
Andy Bavier614af142020-08-07 14:49:56 -0700445 def test_match_location(self):
Andy Baviere4591222021-07-07 12:44:19 -0700446 event = MyEvent(location = "ace-menlo-rasp-pi-production")
447 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700448 event = MyEvent(location = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700449 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700450
451 def test_match_description(self):
Andy Baviere4591222021-07-07 12:44:19 -0700452 event = MyEvent(description = "ace-menlo-rasp-pi-production")
453 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700454 event = MyEvent(description = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700455 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700456
457 def test_match_summary(self):
Andy Baviere4591222021-07-07 12:44:19 -0700458 event = MyEvent(summary = "ace-menlo-rasp-pi-production")
459 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700460 event = MyEvent(summary = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700461 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700462
463 def test_no_match(self):
Andy Baviere4591222021-07-07 12:44:19 -0700464 event = MyEvent(summary = "ace-menlo-rasp-pi-production, (Compute)-MP-1-Aether Production")
Andy Bavier8a5c9872020-10-21 13:17:53 -0700465 self.assertFalse(ems.is_my_event(event, "ace-intel"))
Andy Bavier614af142020-08-07 14:49:56 -0700466 self.assertFalse(ems.is_my_event(event, "(Compute)-MP-1-Aether Staging"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700467 self.assertFalse(ems.is_my_event(event, "ace-menlo"))
Andy Bavier614af142020-08-07 14:49:56 -0700468
469 def test_missing_field(self):
Andy Bavier8a5c9872020-10-21 13:17:53 -0700470 event = MyEventNoLoc(description = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700471 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700472
473 def test_in_window(self):
474 events = []
475 now = datetime.datetime.now(pytz.utc)
476 events.append(MyEvent(location = "(Compute)-MP-1-Aether Production",
477 start = now - datetime.timedelta(hours=1),
478 end = now + datetime.timedelta(hours=1)))
Andy Baviere4591222021-07-07 12:44:19 -0700479 self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700480 self.assertFalse(ems.in_maintenance_window(events, "ace-tucson", now))
Andy Bavier614af142020-08-07 14:49:56 -0700481
482 def test_not_in_window(self):
483 events = []
484 now = datetime.datetime.now(pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700485 events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
Andy Bavier614af142020-08-07 14:49:56 -0700486 start = now + datetime.timedelta(hours=1),
487 end = now + datetime.timedelta(hours=2)))
Andy Baviere4591222021-07-07 12:44:19 -0700488 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier614af142020-08-07 14:49:56 -0700489
490 def test_no_events(self):
491 events = []
492 now = datetime.datetime.now(pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700493 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier614af142020-08-07 14:49:56 -0700494
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700495 def test_all_day_events(self):
496 events = []
Andy Baviere4591222021-07-07 12:44:19 -0700497 events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700498 start = datetime.datetime(2020, 9, 2, 0, 0),
499 end = datetime.datetime(2020, 9, 3, 0, 0),
500 all_day = True))
501
502 ems.process_all_day_events(events)
503
504 now = datetime.datetime(2020, 9, 2, 12, 0, tzinfo=pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700505 self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700506
507 now = datetime.datetime(2020, 9, 3, 12, 0, tzinfo=pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700508 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700509
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700510 def test_get_edges(self):
511 response = self.app.get('/edges')
512 data = json.loads(response.get_data(as_text=True))
513 self.assertEqual(len(data['edges']), 1)
Andy Bavier8a5c9872020-10-21 13:17:53 -0700514 self.assertEqual(data['edges'][0]['name'], 'ace-example')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700515
Andy Bavierf872e9a2021-03-22 12:06:25 -0700516 def test_create_and_delete_edge_legacy(self):
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700517 response = self.app.post('/edges', json=test_edge)
518 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700519 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700520
521 response = self.app.get('/edges')
522 data = json.loads(response.get_data(as_text=True))
523 self.assertEqual(len(data['edges']), 2)
524
Andy Baviere47157d2020-12-11 14:13:12 -0700525 response = self.app.get('/edges/metrics')
526 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700527 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700528
529 self._assert_status_metrics_exist(data)
530 self._assert_speedtest_metrics_exist(data)
531 self._assert_signal_quality_metrics_exist(data)
Andy Baviere47157d2020-12-11 14:13:12 -0700532
Andy Baviere4591222021-07-07 12:44:19 -0700533 response = self.app.delete('/edges/ace-menlo-rasp-pi')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700534 data = json.loads(response.get_data(as_text=True))
535 self.assertEqual(data['result'], True)
Andy Baviere47157d2020-12-11 14:13:12 -0700536
537 response = self.app.get('/edges/metrics')
538 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700539 # print(data)
Andy Baviere4591222021-07-07 12:44:19 -0700540 self.assertFalse('ace-menlo-rasp-pi' in data)
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700541
542 response = self.app.get('/edges')
543 data = json.loads(response.get_data(as_text=True))
544 self.assertEqual(len(data['edges']), 1)
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700545
Andy Bavierf872e9a2021-03-22 12:06:25 -0700546 def test_create_and_delete_edge(self):
547 response = self.app.post('/testresults', json=test_edge)
548 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700549 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Andy Bavierf872e9a2021-03-22 12:06:25 -0700550
551 response = self.app.get('/edges')
552 data = json.loads(response.get_data(as_text=True))
553 self.assertEqual(len(data['edges']), 2)
554
555 response = self.app.get('/edges/metrics')
556 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700557 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700558
559 self._assert_status_metrics_exist(data)
560 self._assert_speedtest_metrics_exist(data)
561 self._assert_signal_quality_metrics_exist(data)
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800562 self._assert_dongle_stats_metrics_exist(data)
Andy Bavierf872e9a2021-03-22 12:06:25 -0700563
Andy Baviere4591222021-07-07 12:44:19 -0700564 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Andy Bavierf872e9a2021-03-22 12:06:25 -0700565 data = json.loads(response.get_data(as_text=True))
566 self.assertEqual(data['result'], True)
567
568 response = self.app.get('/edges/metrics')
569 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700570 # print(data)
Andy Baviere4591222021-07-07 12:44:19 -0700571 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavierf872e9a2021-03-22 12:06:25 -0700572
573 response = self.app.get('/edges')
574 data = json.loads(response.get_data(as_text=True))
575 self.assertEqual(len(data['edges']), 1)
Andy Bavier614af142020-08-07 14:49:56 -0700576
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800577 def test_create_and_delete_edge_speed_test(self):
578 response = self.app.post('/testresults', json=test_edge)
579 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700580 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800581
582 response = self.app.get('/edges/metrics')
583 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700584 # print(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800585
Hyunsun Moon200eba52021-04-05 21:31:54 -0700586 self._assert_speedtest_metrics_exist(data)
587
Andy Baviere4591222021-07-07 12:44:19 -0700588 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700589 data = json.loads(response.get_data(as_text=True))
590 self.assertEqual(data['result'], True)
591
592 def test_backwards_compatible_status_only(self):
593 response = self.app.post('/testresults', json=test_edge_status_only)
594 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700595 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700596
597 response = self.app.get('/edges/metrics')
598 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700599 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700600
Andy Baviere4591222021-07-07 12:44:19 -0700601 self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
602 self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700603
604 self._assert_status_metrics_exist(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800605
Andy Baviere4591222021-07-07 12:44:19 -0700606 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800607 data = json.loads(response.get_data(as_text=True))
608 self.assertEqual(data['result'], True)
609
610 def test_backwards_compatible_no_speedtest(self):
611 response = self.app.post('/testresults', json=test_edge_no_speedtest)
612 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700613 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800614
615 response = self.app.get('/edges/metrics')
616 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700617 # print(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800618
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700619 self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
620 self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
621 self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
622 self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
623 self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
624 self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
625 self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)
626
627 self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
628 self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"}' in data)
629 self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700630 self.assertFalse('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"}' in data)
631 self.assertFalse('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"}' in data)
632 self.assertFalse('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"}' in data)
633 self.assertFalse('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700634
635 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
636 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
637 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700638 self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
639 self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
640 self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
641 self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700642
643 self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
644 self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
645 self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
646 self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
647 self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
648 self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
649 self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
650
Andy Baviere4591222021-07-07 12:44:19 -0700651 self.assertFalse('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"}' in data)
652 self.assertFalse('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800653
Hyunsun Moon200eba52021-04-05 21:31:54 -0700654 self._assert_status_metrics_exist(data)
655 self._assert_signal_quality_metrics_exist(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800656
Andy Baviere4591222021-07-07 12:44:19 -0700657 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800658 data = json.loads(response.get_data(as_text=True))
659 self.assertEqual(data['result'], True)
660
Hyunsun Moon200eba52021-04-05 21:31:54 -0700661 def test_backwards_compatible_no_signal_quality(self):
662 response = self.app.post('/testresults', json=test_edge_no_signal_quality)
663 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700664 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700665
666 response = self.app.get('/edges/metrics')
667 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700668 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700669
Andy Baviere4591222021-07-07 12:44:19 -0700670 self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
671 self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700672
673 self._assert_status_metrics_exist(data)
674 self._assert_speedtest_metrics_exist(data)
675
Andy Baviere4591222021-07-07 12:44:19 -0700676 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700677 data = json.loads(response.get_data(as_text=True))
678 self.assertEqual(data['result'], True)
679
680 def test_timeout_stale_result(self):
681 response = self.app.post('/testresults', json=test_edge)
682 data = json.loads(response.get_data(as_text=True))
Andy Bavier2d60fc52021-05-04 16:13:39 -0700683 # print(json.dumps(data, indent=2))
Hyunsun Moon200eba52021-04-05 21:31:54 -0700684
685 self.assertEqual(data['edge']['status']['control_plane'], 'connected')
686 self.assertEqual(data['edge']['status']['user_plane'], 'connected')
687 self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 4.0)
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700688 self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 3.0)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700689 self.assertTrue('signal_quality' in data['edge'])
690
691 self.emulated_time += (ems.NO_RESULT_THRESHOLD + 1)
692
Andy Baviere4591222021-07-07 12:44:19 -0700693 response = self.app.get('/edges/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700694 data = json.loads(response.get_data(as_text=True))
Andy Bavier2d60fc52021-05-04 16:13:39 -0700695 # print(json.dumps(data, indent=2))
Hyunsun Moon200eba52021-04-05 21:31:54 -0700696
697 self.assertEqual(data['edge']['status']['control_plane'], 'no result')
698 self.assertEqual(data['edge']['status']['user_plane'], 'no result')
699 self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 0.0)
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700700 self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 0.0)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700701 self.assertFalse('signal_quality' in data['edge'])
702
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700703 def test_backwards_compatible_no_iperf(self):
704 response = self.app.post('/testresults', json=test_edge_no_iperf)
705 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700706 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700707
708 response = self.app.get('/edges/metrics')
709 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700710 # print(data)
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700711
Andy Baviere4591222021-07-07 12:44:19 -0700712 self.assertFalse('aetheredge_iperf_cluster_downlink{name="ace-menlo-rasp-pi"}' in data)
713 self.assertFalse('aetheredge_iperf_cluster_uplink{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700714 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
715 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
716 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700717 self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
718 self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
719 self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
720 self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700721
Andy Baviere4591222021-07-07 12:44:19 -0700722 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700723 data = json.loads(response.get_data(as_text=True))
724 self.assertEqual(data['result'], True)
725
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700726 def test_backwards_compatible_pre_0_7_0(self):
727 response = self.app.post('/testresults', json=test_edge_pre_0_7_0)
728 data = json.loads(response.get_data(as_text=True))
729 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
730
731 response = self.app.get('/edges/metrics')
732 data = response.get_data(as_text=True)
733 # print(data)
734
735 self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
736 self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
737 self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
738 self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
739 self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
740 self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
741 self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)
742
743 self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
744 self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
745 self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
746 self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
747 self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
748 self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
749 self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
750
751 self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
752 self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
753 self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)
754
755 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
756 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
757 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)
758
759 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
760 data = json.loads(response.get_data(as_text=True))
761 self.assertEqual(data['result'], True)
762
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800763 def test_backwards_compatible_no_dongle_stats(self):
764 response = self.app.post('/testresults', json=test_edge_no_dongle_stats)
765 data = json.loads(response.get_data(as_text=True))
766 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
767
768 response = self.app.get('/edges/metrics')
769 data = response.get_data(as_text=True)
770
771 self.assertTrue('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"} 0.0' in data)
772 self.assertFalse('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi",value=' in data)
773 self.assertFalse('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi",value=' in data)
774
775 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
776 data = json.loads(response.get_data(as_text=True))
777 self.assertEqual(data['result'], True)
778
Andy Bavier2d60fc52021-05-04 16:13:39 -0700779 def test_handle_invalid_schema(self):
780 response = self.app.post('/testresults', json="")
781 self.assertEqual(response.status_code, 400)
782
783 no_name = deepcopy(test_edge)
784 del no_name['name']
785 response = self.app.post('/testresults', json=no_name)
786 self.assertEqual(response.status_code, 400)
787 response = self.app.get('/edges/metrics')
788 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700789 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700790
791 no_status = deepcopy(test_edge)
792 del no_status['status']
793 response = self.app.post('/testresults', json=no_status)
794 self.assertEqual(response.status_code, 400)
795 response = self.app.get('/edges/metrics')
796 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700797 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700798
799 bad_status = deepcopy(test_edge)
800 bad_status['status']['control_plane'] = 1
801 response = self.app.post('/testresults', json=bad_status)
802 self.assertEqual(response.status_code, 400)
803 response = self.app.get('/edges/metrics')
804 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700805 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700806
807 bad_ping_result = deepcopy(test_edge)
808 bad_ping_result['speedtest']['ping']['dns']['min'] = "foo"
809 response = self.app.post('/testresults', json=bad_ping_result)
810 self.assertEqual(response.status_code, 400)
811 response = self.app.get('/edges/metrics')
812 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700813 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700814
815 bad_iperf_result = deepcopy(test_edge)
816 bad_iperf_result['speedtest']['iperf']['cluster']['uplink'] = "foo"
817 response = self.app.post('/testresults', json=bad_iperf_result)
818 self.assertEqual(response.status_code, 400)
819 response = self.app.get('/edges/metrics')
820 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700821 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700822
823 bad_signal_quality = deepcopy(test_edge)
824 del bad_signal_quality['signal_quality']['rsrq']
825 response = self.app.post('/testresults', json=bad_signal_quality)
826 self.assertEqual(response.status_code, 400)
827 response = self.app.get('/edges/metrics')
828 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700829 self.assertFalse('ace-menlo-rasp-pi' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700830
Andy Bavier614af142020-08-07 14:49:56 -0700831if __name__ == '__main__':
Andy Bavier55dc5872021-05-05 11:31:42 -0700832 import xmlrunner
833 with open('results.xml', 'wb') as output:
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700834 unittest.main(testRunner=xmlrunner.XMLTestRunner(verbosity=2, output=output))