blob: 16f2df61b8eb5cba38d741cc7c819155fbbabf1b [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',
Jeremy Ronquillo1eaff6a2021-11-16 13:46:46 -080026 'PhyCellID': '101',
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -080027 'PLMNStatus': 'Success'
28 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -080029 'speedtest': {
30 'ping': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070031 'dry_run': {
32 'transmitted': 3,
33 'received': 2,
34 'median': 5.0,
35 'min': 1.0,
36 'avg': 5.0,
37 'max': 9.0,
38 'stddev': 1.0
39 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -080040 'dns': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070041 'transmitted': 10,
42 'received': 9,
43 'median': 4.0,
Jeremy Ronquillof4200252021-02-13 16:11:04 -080044 'min': 2.0,
45 'avg': 4.0,
46 'max': 6.0,
47 'stddev': 1.0
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -070048 },
49 'iperf_server': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070050 'transmitted': 10,
51 'received': 10,
52 'median': 3.0,
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -070053 'min': 1.0,
54 'avg': 3.0,
55 'max': 5.0,
56 'stddev': 1.0
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -070057 },
58 'management_server': {
59 'transmitted': 10,
60 'received': 8,
61 'median': 6.0,
62 'min': 2.0,
63 'avg': 6.0,
64 'max': 10.0,
65 'stddev': 1.0
Jeremy Ronquillof4200252021-02-13 16:11:04 -080066 }
Jeremy Ronquilloc7434622021-04-08 21:06:00 -070067 },
68 'iperf': {
69 'cluster': {
70 'downlink': 100.0,
71 'uplink': 10.0
72 }
Jeremy Ronquillof4200252021-02-13 16:11:04 -080073 }
74 },
Hyunsun Moon200eba52021-04-05 21:31:54 -070075 'signal_quality': {
76 'rsrq': 30,
77 'rsrp': 80
78 },
Shad Ansari9faaa962022-03-16 17:35:41 -070079 'counters': {
80 'dongle_read_error': 0,
81 'dongle_connect_error': 0,
82 'dongle_rsrp_rsrq_error': 0,
83 'modem_cfun0_error': 0,
84 'modem_cfun1_error': 0,
85 'modem_cgatt_error': 0,
86 'modem_cesq_error': 0,
87 'dry_run_ping_error': 0,
88 'ping_error': 0,
89 'iperf_error': 0,
90 'report_send_error': 0
91 },
Hyunsun Moon200eba52021-04-05 21:31:54 -070092 'last_update': time.time()
93}
94
95test_edge_status_only = {
Andy Baviere4591222021-07-07 12:44:19 -070096 'name': 'ace-menlo-rasp-pi',
Hyunsun Moon200eba52021-04-05 21:31:54 -070097 'status': {
98 'control_plane': 'connected',
99 'user_plane': 'connected'
100 },
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800101 'last_update': time.time()
102}
103
104test_edge_no_speedtest = {
Andy Baviere4591222021-07-07 12:44:19 -0700105 'name': 'ace-menlo-rasp-pi',
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800106 'status': {
107 'control_plane': 'connected',
108 'user_plane': 'connected'
109 },
Hyunsun Moon200eba52021-04-05 21:31:54 -0700110 'signal_quality': {
111 'rsrq': 30,
112 'rsrp': 80
113 },
114 'last_update': time.time()
115}
116
117test_edge_no_signal_quality = {
Andy Baviere4591222021-07-07 12:44:19 -0700118 'name': 'ace-menlo-rasp-pi',
Hyunsun Moon200eba52021-04-05 21:31:54 -0700119 'status': {
120 'control_plane': 'connected',
121 'user_plane': 'connected'
122 },
123 'speedtest': {
124 'ping': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700125 'dry_run': {
126 'transmitted': 3,
127 'received': 2,
128 'median': 5.0,
129 'min': 1.0,
130 'avg': 5.0,
131 'max': 9.0,
132 'stddev': 1.0
133 },
Hyunsun Moon200eba52021-04-05 21:31:54 -0700134 'dns': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700135 'transmitted': 10,
136 'received': 9,
137 'median': 4.0,
Hyunsun Moon200eba52021-04-05 21:31:54 -0700138 'min': 2.0,
139 'avg': 4.0,
140 'max': 6.0,
141 'stddev': 1.0
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700142 },
143 'iperf_server': {
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700144 'transmitted': 10,
145 'received': 10,
146 'median': 3.0,
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700147 'min': 1.0,
148 'avg': 3.0,
149 'max': 5.0,
150 'stddev': 1.0
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700151 },
152 'management_server': {
153 'transmitted': 10,
154 'received': 8,
155 'median': 6.0,
156 'min': 2.0,
157 'avg': 6.0,
158 'max': 10.0,
159 'stddev': 1.0
Hyunsun Moon200eba52021-04-05 21:31:54 -0700160 }
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700161 },
162 'iperf': {
163 'cluster': {
164 'downlink': 100.0,
165 'uplink': 10.0
166 }
Hyunsun Moon200eba52021-04-05 21:31:54 -0700167 }
168 },
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700169 'last_update': time.time()
170}
Andy Bavier614af142020-08-07 14:49:56 -0700171
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700172test_edge_no_iperf = {
Andy Baviere4591222021-07-07 12:44:19 -0700173 'name': 'ace-menlo-rasp-pi',
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700174 'status': {
175 'control_plane': 'connected',
176 'user_plane': 'connected'
177 },
178 'speedtest': {
179 'ping': {
180 'dns': {
181 'min': 2.0,
182 'avg': 4.0,
183 'max': 6.0,
184 'stddev': 1.0
185 }
186 }
187 },
188 'signal_quality': {
189 'rsrq': 30,
190 'rsrp': 80
191 },
192 'last_update': time.time()
193}
194
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700195test_edge_pre_0_7_0 = {
196 'name': 'ace-menlo-rasp-pi',
197 'status': {
198 'control_plane': 'connected',
199 'user_plane': 'connected'
200 },
201 'speedtest': {
202 'ping': {
203 'dns': {
204 'min': 2.0,
205 'avg': 4.0,
206 'max': 6.0,
207 'stddev': 1.0
208 },
209 'iperf_server': {
210 'min': 1.0,
211 'avg': 3.0,
212 'max': 5.0,
213 'stddev': 1.0
214 }
215 },
216 'iperf': {
217 'cluster': {
218 'downlink': 100.0,
219 'uplink': 10.0
220 }
221 }
222 },
223 'signal_quality': {
224 'rsrq': 30,
225 'rsrp': 80
226 },
227 'last_update': time.time()
228}
229
230test_edge_dns_iperf = {
231 'name': 'ace-menlo-rasp-pi',
232 'status': {
233 'control_plane': 'connected',
234 'user_plane': 'connected'
235 },
236 'speedtest': {
237 'ping': {
238 'dns': {
239 'transmitted': 10,
240 'received': 9,
241 'median': 4.0,
242 'min': 2.0,
243 'avg': 4.0,
244 'max': 6.0,
245 'stddev': 1.0
246 },
247 'iperf_server': {
248 'transmitted': 10,
249 'received': 10,
250 'median': 3.0,
251 'min': 1.0,
252 'avg': 3.0,
253 'max': 5.0,
254 'stddev': 1.0
255 }
256 },
257 'iperf': {
258 'cluster': {
259 'downlink': 100.0,
260 'uplink': 10.0
261 }
262 }
263 },
264 'signal_quality': {
265 'rsrq': 30,
266 'rsrp': 80
267 },
268 'last_update': time.time()
269}
270
271test_edge_basic_ping_stats = {
272 'name': 'ace-menlo-rasp-pi',
273 'status': {
274 'control_plane': 'connected',
275 'user_plane': 'connected'
276 },
277 'speedtest': {
278 'ping': {
279 'dry_run': {
280 'min': 1.0,
281 'avg': 5.0,
282 'max': 9.0,
283 'stddev': 1.0
284 },
285 'dns': {
286 'min': 2.0,
287 'avg': 4.0,
288 'max': 6.0,
289 'stddev': 1.0
290 },
291 'iperf_server': {
292 'min': 1.0,
293 'avg': 3.0,
294 'max': 5.0,
295 'stddev': 1.0
296 },
297 'management_server': {
298 'min': 2.0,
299 'avg': 6.0,
300 'max': 10.0,
301 'stddev': 1.0
302 }
303 },
304 'iperf': {
305 'cluster': {
306 'downlink': 100.0,
307 'uplink': 10.0
308 }
309 }
310 },
311 'signal_quality': {
312 'rsrq': 30,
313 'rsrp': 80
314 },
315 'last_update': time.time()
316}
Andy Bavier614af142020-08-07 14:49:56 -0700317
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800318test_edge_no_dongle_stats = {
319 'name': 'ace-menlo-rasp-pi',
320 'status': {
321 'control_plane': 'connected',
322 'user_plane': 'connected'
323 },
324 'speedtest': {
325 'ping': {
326 'dry_run': {
327 'transmitted': 3,
328 'received': 2,
329 'median': 5.0,
330 'min': 1.0,
331 'avg': 5.0,
332 'max': 9.0,
333 'stddev': 1.0
334 },
335 'dns': {
336 'transmitted': 10,
337 'received': 9,
338 'median': 4.0,
339 'min': 2.0,
340 'avg': 4.0,
341 'max': 6.0,
342 'stddev': 1.0
343 },
344 'iperf_server': {
345 'transmitted': 10,
346 'received': 10,
347 'median': 3.0,
348 'min': 1.0,
349 'avg': 3.0,
350 'max': 5.0,
351 'stddev': 1.0
352 },
353 'management_server': {
354 'transmitted': 10,
355 'received': 8,
356 'median': 6.0,
357 'min': 2.0,
358 'avg': 6.0,
359 'max': 10.0,
360 'stddev': 1.0
361 }
362 },
363 'iperf': {
364 'cluster': {
365 'downlink': 100.0,
366 'uplink': 10.0
367 }
368 }
369 },
370 'signal_quality': {
371 'rsrq': 30,
372 'rsrp': 80
373 },
374 'last_update': time.time()
375}
376
Andy Bavier614af142020-08-07 14:49:56 -0700377class MyEvent:
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700378 def __init__ (self, location = "", description = "", summary = "", start = None, end = None, all_day = False):
Andy Bavier614af142020-08-07 14:49:56 -0700379 self.location = location
380 self.description = description
381 self.summary = summary
382 self.start = start
383 self.end = end
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700384 self.all_day = all_day
Andy Bavier614af142020-08-07 14:49:56 -0700385
386class MyEventNoLoc:
387 def __init__ (self, description = "", summary = ""):
388 self.description = description
389 self.summary = summary
390
391
392class TestEdgeMonitoringServer(unittest.TestCase):
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700393 def setUp(self):
394 self.app = ems.app.test_client()
Hyunsun Moon200eba52021-04-05 21:31:54 -0700395 self.emulated_time = time.mktime(time.strptime("2021-04-05 00:00:00", "%Y-%m-%d %H:%M:%S"))
396 self.time_method = time.time
397 time.time = self._get_time
398
399 def tearDown(self):
400 time.time = self.time_method
401
402 def _get_time(self):
403 return self.emulated_time
404
405 def _assert_status_metrics_exist(self, data):
Andy Baviere4591222021-07-07 12:44:19 -0700406 self.assertTrue('aetheredge_status_control_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
407 self.assertTrue('aetheredge_status_user_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
408 self.assertTrue('aetheredge_last_update{name="ace-menlo-rasp-pi"}' in data)
409 self.assertTrue('aetheredge_connect_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
410 self.assertTrue('aetheredge_ping_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
411 self.assertTrue('aetheredge_e2e_tests_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
412 self.assertTrue('aetheredge_e2e_tests_down{name="ace-menlo-rasp-pi"} 0.0' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700413
414 def _assert_speedtest_metrics_exist(self, data):
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700415 self.assertTrue('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"} 3' in data)
416 self.assertTrue('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"} 2' in data)
417 self.assertTrue('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"} 5.0' in data)
418 self.assertTrue('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
419 self.assertTrue('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"} 5.0' in data)
420 self.assertTrue('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"} 9.0' in data)
421 self.assertTrue('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
422
423 self.assertTrue('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
424 self.assertTrue('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
425 self.assertTrue('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700426 self.assertTrue('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
427 self.assertTrue('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"} 4.0' in data)
428 self.assertTrue('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"} 6.0' in data)
429 self.assertTrue('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700430
431 self.assertTrue('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
432 self.assertTrue('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
433 self.assertTrue('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700434 self.assertTrue('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
435 self.assertTrue('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"} 3.0' in data)
436 self.assertTrue('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"} 5.0' in data)
437 self.assertTrue('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700438
439 self.assertTrue('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
440 self.assertTrue('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"} 8' in data)
441 self.assertTrue('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"} 6.0' in data)
442 self.assertTrue('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
443 self.assertTrue('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"} 6.0' in data)
444 self.assertTrue('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"} 10.0' in data)
445 self.assertTrue('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)
446
Andy Baviere4591222021-07-07 12:44:19 -0700447 self.assertTrue('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"} 100.0' in data)
448 self.assertTrue('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"} 10.0' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700449
450 def _assert_signal_quality_metrics_exist(self, data):
Andy Baviere4591222021-07-07 12:44:19 -0700451 self.assertTrue('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"} 30' in data)
452 self.assertTrue('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"} 80' in data)
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700453
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800454 def _assert_dongle_stats_metrics_exist(self, data):
455 self.assertTrue('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquillo1eaff6a2021-11-16 13:46:46 -0800456 self.assertTrue('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi"} 8.67518969411584e+014' in data)
457 self.assertTrue('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi"} 3' in data)
458 self.assertTrue('aetheredge_dongle_stats_phycellid{name="ace-menlo-rasp-pi"} 101' in data)
459
Andy Bavier614af142020-08-07 14:49:56 -0700460 def test_match_location(self):
Andy Baviere4591222021-07-07 12:44:19 -0700461 event = MyEvent(location = "ace-menlo-rasp-pi-production")
462 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700463 event = MyEvent(location = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700464 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700465
466 def test_match_description(self):
Andy Baviere4591222021-07-07 12:44:19 -0700467 event = MyEvent(description = "ace-menlo-rasp-pi-production")
468 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700469 event = MyEvent(description = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700470 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700471
472 def test_match_summary(self):
Andy Baviere4591222021-07-07 12:44:19 -0700473 event = MyEvent(summary = "ace-menlo-rasp-pi-production")
474 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700475 event = MyEvent(summary = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700476 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700477
478 def test_no_match(self):
Andy Baviere4591222021-07-07 12:44:19 -0700479 event = MyEvent(summary = "ace-menlo-rasp-pi-production, (Compute)-MP-1-Aether Production")
Andy Bavier8a5c9872020-10-21 13:17:53 -0700480 self.assertFalse(ems.is_my_event(event, "ace-intel"))
Andy Bavier614af142020-08-07 14:49:56 -0700481 self.assertFalse(ems.is_my_event(event, "(Compute)-MP-1-Aether Staging"))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700482 self.assertFalse(ems.is_my_event(event, "ace-menlo"))
Andy Bavier614af142020-08-07 14:49:56 -0700483
484 def test_missing_field(self):
Andy Bavier8a5c9872020-10-21 13:17:53 -0700485 event = MyEventNoLoc(description = "(Compute)-MP-1-Aether Production")
Andy Baviere4591222021-07-07 12:44:19 -0700486 self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
Andy Bavier614af142020-08-07 14:49:56 -0700487
488 def test_in_window(self):
489 events = []
490 now = datetime.datetime.now(pytz.utc)
491 events.append(MyEvent(location = "(Compute)-MP-1-Aether Production",
492 start = now - datetime.timedelta(hours=1),
493 end = now + datetime.timedelta(hours=1)))
Andy Baviere4591222021-07-07 12:44:19 -0700494 self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier8a5c9872020-10-21 13:17:53 -0700495 self.assertFalse(ems.in_maintenance_window(events, "ace-tucson", now))
Andy Bavier614af142020-08-07 14:49:56 -0700496
497 def test_not_in_window(self):
498 events = []
499 now = datetime.datetime.now(pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700500 events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
Andy Bavier614af142020-08-07 14:49:56 -0700501 start = now + datetime.timedelta(hours=1),
502 end = now + datetime.timedelta(hours=2)))
Andy Baviere4591222021-07-07 12:44:19 -0700503 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier614af142020-08-07 14:49:56 -0700504
505 def test_no_events(self):
506 events = []
507 now = datetime.datetime.now(pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700508 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavier614af142020-08-07 14:49:56 -0700509
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700510 def test_all_day_events(self):
511 events = []
Andy Baviere4591222021-07-07 12:44:19 -0700512 events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700513 start = datetime.datetime(2020, 9, 2, 0, 0),
514 end = datetime.datetime(2020, 9, 3, 0, 0),
515 all_day = True))
516
517 ems.process_all_day_events(events)
518
519 now = datetime.datetime(2020, 9, 2, 12, 0, tzinfo=pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700520 self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700521
522 now = datetime.datetime(2020, 9, 3, 12, 0, tzinfo=pytz.utc)
Andy Baviere4591222021-07-07 12:44:19 -0700523 self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700524
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700525 def test_get_edges(self):
526 response = self.app.get('/edges')
527 data = json.loads(response.get_data(as_text=True))
528 self.assertEqual(len(data['edges']), 1)
Andy Bavier8a5c9872020-10-21 13:17:53 -0700529 self.assertEqual(data['edges'][0]['name'], 'ace-example')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700530
Andy Bavierf872e9a2021-03-22 12:06:25 -0700531 def test_create_and_delete_edge_legacy(self):
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700532 response = self.app.post('/edges', json=test_edge)
533 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700534 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700535
536 response = self.app.get('/edges')
537 data = json.loads(response.get_data(as_text=True))
538 self.assertEqual(len(data['edges']), 2)
539
Andy Baviere47157d2020-12-11 14:13:12 -0700540 response = self.app.get('/edges/metrics')
541 data = response.get_data(as_text=True)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700542
543 self._assert_status_metrics_exist(data)
544 self._assert_speedtest_metrics_exist(data)
545 self._assert_signal_quality_metrics_exist(data)
Andy Baviere47157d2020-12-11 14:13:12 -0700546
Andy Baviere4591222021-07-07 12:44:19 -0700547 response = self.app.delete('/edges/ace-menlo-rasp-pi')
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700548 data = json.loads(response.get_data(as_text=True))
549 self.assertEqual(data['result'], True)
Andy Baviere47157d2020-12-11 14:13:12 -0700550
551 response = self.app.get('/edges/metrics')
552 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700553 self.assertFalse('ace-menlo-rasp-pi' in data)
Hyunsun Moon5f237ec2020-09-29 14:45:52 -0700554
555 response = self.app.get('/edges')
556 data = json.loads(response.get_data(as_text=True))
557 self.assertEqual(len(data['edges']), 1)
Andy Bavierc41cf0c2020-09-02 14:49:21 -0700558
Andy Bavierf872e9a2021-03-22 12:06:25 -0700559 def test_create_and_delete_edge(self):
560 response = self.app.post('/testresults', json=test_edge)
561 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700562 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Andy Bavierf872e9a2021-03-22 12:06:25 -0700563
564 response = self.app.get('/edges')
565 data = json.loads(response.get_data(as_text=True))
566 self.assertEqual(len(data['edges']), 2)
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)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700571
572 self._assert_status_metrics_exist(data)
573 self._assert_speedtest_metrics_exist(data)
574 self._assert_signal_quality_metrics_exist(data)
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800575 self._assert_dongle_stats_metrics_exist(data)
Andy Bavierf872e9a2021-03-22 12:06:25 -0700576
Andy Baviere4591222021-07-07 12:44:19 -0700577 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Andy Bavierf872e9a2021-03-22 12:06:25 -0700578 data = json.loads(response.get_data(as_text=True))
579 self.assertEqual(data['result'], True)
580
581 response = self.app.get('/edges/metrics')
582 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700583 # print(data)
Andy Baviere4591222021-07-07 12:44:19 -0700584 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavierf872e9a2021-03-22 12:06:25 -0700585
586 response = self.app.get('/edges')
587 data = json.loads(response.get_data(as_text=True))
588 self.assertEqual(len(data['edges']), 1)
Andy Bavier614af142020-08-07 14:49:56 -0700589
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800590 def test_create_and_delete_edge_speed_test(self):
591 response = self.app.post('/testresults', json=test_edge)
592 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700593 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800594
595 response = self.app.get('/edges/metrics')
596 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700597 # print(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800598
Hyunsun Moon200eba52021-04-05 21:31:54 -0700599 self._assert_speedtest_metrics_exist(data)
600
Andy Baviere4591222021-07-07 12:44:19 -0700601 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700602 data = json.loads(response.get_data(as_text=True))
603 self.assertEqual(data['result'], True)
604
605 def test_backwards_compatible_status_only(self):
606 response = self.app.post('/testresults', json=test_edge_status_only)
607 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700608 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700609
610 response = self.app.get('/edges/metrics')
611 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700612 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700613
Andy Baviere4591222021-07-07 12:44:19 -0700614 self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
615 self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700616
617 self._assert_status_metrics_exist(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800618
Andy Baviere4591222021-07-07 12:44:19 -0700619 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800620 data = json.loads(response.get_data(as_text=True))
621 self.assertEqual(data['result'], True)
622
623 def test_backwards_compatible_no_speedtest(self):
624 response = self.app.post('/testresults', json=test_edge_no_speedtest)
625 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700626 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800627
628 response = self.app.get('/edges/metrics')
629 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700630 # print(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800631
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700632 self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
633 self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
634 self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
635 self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
636 self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
637 self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
638 self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)
639
640 self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
641 self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"}' in data)
642 self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700643 self.assertFalse('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"}' in data)
644 self.assertFalse('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"}' in data)
645 self.assertFalse('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"}' in data)
646 self.assertFalse('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700647
648 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
649 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
650 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700651 self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
652 self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
653 self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
654 self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700655
656 self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
657 self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
658 self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
659 self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
660 self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
661 self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
662 self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
663
Andy Baviere4591222021-07-07 12:44:19 -0700664 self.assertFalse('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"}' in data)
665 self.assertFalse('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800666
Hyunsun Moon200eba52021-04-05 21:31:54 -0700667 self._assert_status_metrics_exist(data)
668 self._assert_signal_quality_metrics_exist(data)
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800669
Andy Baviere4591222021-07-07 12:44:19 -0700670 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquillof4200252021-02-13 16:11:04 -0800671 data = json.loads(response.get_data(as_text=True))
672 self.assertEqual(data['result'], True)
673
Hyunsun Moon200eba52021-04-05 21:31:54 -0700674 def test_backwards_compatible_no_signal_quality(self):
675 response = self.app.post('/testresults', json=test_edge_no_signal_quality)
676 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700677 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700678
679 response = self.app.get('/edges/metrics')
680 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700681 # print(data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700682
Andy Baviere4591222021-07-07 12:44:19 -0700683 self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
684 self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700685
686 self._assert_status_metrics_exist(data)
687 self._assert_speedtest_metrics_exist(data)
688
Andy Baviere4591222021-07-07 12:44:19 -0700689 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700690 data = json.loads(response.get_data(as_text=True))
691 self.assertEqual(data['result'], True)
692
693 def test_timeout_stale_result(self):
694 response = self.app.post('/testresults', json=test_edge)
695 data = json.loads(response.get_data(as_text=True))
Andy Bavier2d60fc52021-05-04 16:13:39 -0700696 # print(json.dumps(data, indent=2))
Hyunsun Moon200eba52021-04-05 21:31:54 -0700697
698 self.assertEqual(data['edge']['status']['control_plane'], 'connected')
699 self.assertEqual(data['edge']['status']['user_plane'], 'connected')
700 self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 4.0)
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700701 self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 3.0)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700702 self.assertTrue('signal_quality' in data['edge'])
703
704 self.emulated_time += (ems.NO_RESULT_THRESHOLD + 1)
705
Andy Baviere4591222021-07-07 12:44:19 -0700706 response = self.app.get('/edges/ace-menlo-rasp-pi')
Hyunsun Moon200eba52021-04-05 21:31:54 -0700707 data = json.loads(response.get_data(as_text=True))
Andy Bavier2d60fc52021-05-04 16:13:39 -0700708 # print(json.dumps(data, indent=2))
Hyunsun Moon200eba52021-04-05 21:31:54 -0700709
710 self.assertEqual(data['edge']['status']['control_plane'], 'no result')
711 self.assertEqual(data['edge']['status']['user_plane'], 'no result')
712 self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 0.0)
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700713 self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 0.0)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700714 self.assertFalse('signal_quality' in data['edge'])
715
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700716 def test_backwards_compatible_no_iperf(self):
717 response = self.app.post('/testresults', json=test_edge_no_iperf)
718 data = json.loads(response.get_data(as_text=True))
Andy Baviere4591222021-07-07 12:44:19 -0700719 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700720
721 response = self.app.get('/edges/metrics')
722 data = response.get_data(as_text=True)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700723 # print(data)
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700724
Andy Baviere4591222021-07-07 12:44:19 -0700725 self.assertFalse('aetheredge_iperf_cluster_downlink{name="ace-menlo-rasp-pi"}' in data)
726 self.assertFalse('aetheredge_iperf_cluster_uplink{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700727 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
728 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
729 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
Andy Baviere4591222021-07-07 12:44:19 -0700730 self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
731 self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
732 self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
733 self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700734
Andy Baviere4591222021-07-07 12:44:19 -0700735 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
Jeremy Ronquilloc7434622021-04-08 21:06:00 -0700736 data = json.loads(response.get_data(as_text=True))
737 self.assertEqual(data['result'], True)
738
Jeremy Ronquilloe0a8b422021-11-02 12:49:15 -0700739 def test_backwards_compatible_pre_0_7_0(self):
740 response = self.app.post('/testresults', json=test_edge_pre_0_7_0)
741 data = json.loads(response.get_data(as_text=True))
742 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
743
744 response = self.app.get('/edges/metrics')
745 data = response.get_data(as_text=True)
746 # print(data)
747
748 self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
749 self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
750 self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
751 self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
752 self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
753 self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
754 self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)
755
756 self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
757 self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
758 self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
759 self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
760 self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
761 self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
762 self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)
763
764 self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
765 self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
766 self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)
767
768 self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
769 self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
770 self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)
771
772 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
773 data = json.loads(response.get_data(as_text=True))
774 self.assertEqual(data['result'], True)
775
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800776 def test_backwards_compatible_no_dongle_stats(self):
777 response = self.app.post('/testresults', json=test_edge_no_dongle_stats)
778 data = json.loads(response.get_data(as_text=True))
779 self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')
780
781 response = self.app.get('/edges/metrics')
782 data = response.get_data(as_text=True)
783
Jeremy Ronquillocd711a22021-11-18 10:37:56 -0800784 self.assertFalse('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquillo1eaff6a2021-11-16 13:46:46 -0800785 self.assertFalse('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi"}' in data)
786 self.assertFalse('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi"}' in data)
787 self.assertFalse('aetheredge_dongle_stats_phycellid{name="ace-menlo-rasp-pi"}' in data)
Jeremy Ronquilloc45955a2021-11-09 12:04:57 -0800788
789 response = self.app.delete('/testresults/ace-menlo-rasp-pi')
790 data = json.loads(response.get_data(as_text=True))
791 self.assertEqual(data['result'], True)
792
Andy Bavier2d60fc52021-05-04 16:13:39 -0700793 def test_handle_invalid_schema(self):
794 response = self.app.post('/testresults', json="")
795 self.assertEqual(response.status_code, 400)
796
797 no_name = deepcopy(test_edge)
798 del no_name['name']
799 response = self.app.post('/testresults', json=no_name)
800 self.assertEqual(response.status_code, 400)
801 response = self.app.get('/edges/metrics')
802 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700803 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700804
805 no_status = deepcopy(test_edge)
806 del no_status['status']
807 response = self.app.post('/testresults', json=no_status)
808 self.assertEqual(response.status_code, 400)
809 response = self.app.get('/edges/metrics')
810 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700811 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700812
813 bad_status = deepcopy(test_edge)
814 bad_status['status']['control_plane'] = 1
815 response = self.app.post('/testresults', json=bad_status)
816 self.assertEqual(response.status_code, 400)
817 response = self.app.get('/edges/metrics')
818 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700819 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700820
821 bad_ping_result = deepcopy(test_edge)
822 bad_ping_result['speedtest']['ping']['dns']['min'] = "foo"
823 response = self.app.post('/testresults', json=bad_ping_result)
824 self.assertEqual(response.status_code, 400)
825 response = self.app.get('/edges/metrics')
826 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700827 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700828
829 bad_iperf_result = deepcopy(test_edge)
830 bad_iperf_result['speedtest']['iperf']['cluster']['uplink'] = "foo"
831 response = self.app.post('/testresults', json=bad_iperf_result)
832 self.assertEqual(response.status_code, 400)
833 response = self.app.get('/edges/metrics')
834 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700835 self.assertFalse('ace-menlo-rasp-pi' in data)
Andy Bavier2d60fc52021-05-04 16:13:39 -0700836
837 bad_signal_quality = deepcopy(test_edge)
838 del bad_signal_quality['signal_quality']['rsrq']
839 response = self.app.post('/testresults', json=bad_signal_quality)
840 self.assertEqual(response.status_code, 400)
841 response = self.app.get('/edges/metrics')
842 data = response.get_data(as_text=True)
Andy Baviere4591222021-07-07 12:44:19 -0700843 self.assertFalse('ace-menlo-rasp-pi' in data)
Hyunsun Moon200eba52021-04-05 21:31:54 -0700844
Andy Bavier614af142020-08-07 14:49:56 -0700845if __name__ == '__main__':
Andy Bavier55dc5872021-05-05 11:31:42 -0700846 import xmlrunner
847 with open('results.xml', 'wb') as output:
Jeremy Ronquillo6e352b72021-06-08 10:33:25 -0700848 unittest.main(testRunner=xmlrunner.XMLTestRunner(verbosity=2, output=output))