#!/usr/bin/env python

# Copyright 2020-present Open Networking Foundation
#
# SPDX-License-Identifier: Apache-2.0

import unittest
import edge_monitoring_server as ems
import datetime
import pytz
import json
import time
from copy import deepcopy


test_edge = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'dongle_stats': {
        'SuccessfulFetch': True,
        'IMSI': '315021000000000',
        'CellGlobalID': '315010001F800',
        'PhyCellID': '101',
        'PLMNStatus': 'Success'
    },
    'speedtest': {
        'ping': {
            'dry_run': {
                'transmitted': 3,
                'received': 2,
                'median': 5.0,
                'min': 1.0,
                'avg': 5.0,
                'max': 9.0,
                'stddev': 1.0
            },
            'dns': {
                'transmitted': 10,
                'received': 9,
                'median': 4.0,
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'transmitted': 10,
                'received': 10,
                'median': 3.0,
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            },
            'management_server': {
                'transmitted': 10,
                'received': 8,
                'median': 6.0,
                'min': 2.0,
                'avg': 6.0,
                'max': 10.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'counters': {
        'dongle_read_error': 0,
        'dongle_connect_error': 0,
        'dongle_rsrp_rsrq_error': 0,
        'modem_cfun0_error': 0,
        'modem_cfun1_error': 0,
        'modem_cgatt_error': 0,
        'modem_cesq_error': 0,
        'dry_run_ping_error': 0,
        'ping_error': 0,
        'iperf_error': 0,
        'report_send_error': 0
    },
    'last_update': time.time()
}

test_edge_status_only = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'last_update': time.time()
}

test_edge_no_speedtest = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

test_edge_no_signal_quality = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dry_run': {
                'transmitted': 3,
                'received': 2,
                'median': 5.0,
                'min': 1.0,
                'avg': 5.0,
                'max': 9.0,
                'stddev': 1.0
            },
            'dns': {
                'transmitted': 10,
                'received': 9,
                'median': 4.0,
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'transmitted': 10,
                'received': 10,
                'median': 3.0,
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            },
            'management_server': {
                'transmitted': 10,
                'received': 8,
                'median': 6.0,
                'min': 2.0,
                'avg': 6.0,
                'max': 10.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'last_update': time.time()
}

test_edge_no_iperf = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dns': {
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

test_edge_pre_0_7_0 = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dns': {
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

test_edge_dns_iperf = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dns': {
                'transmitted': 10,
                'received': 9,
                'median': 4.0,
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'transmitted': 10,
                'received': 10,
                'median': 3.0,
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

test_edge_basic_ping_stats = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dry_run': {
                'min': 1.0,
                'avg': 5.0,
                'max': 9.0,
                'stddev': 1.0
            },
            'dns': {
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            },
            'management_server': {
                'min': 2.0,
                'avg': 6.0,
                'max': 10.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

test_edge_no_dongle_stats = {
    'name': 'ace-menlo-rasp-pi',
    'status': {
        'control_plane': 'connected',
        'user_plane': 'connected'
    },
    'speedtest': {
        'ping': {
            'dry_run': {
                'transmitted': 3,
                'received': 2,
                'median': 5.0,
                'min': 1.0,
                'avg': 5.0,
                'max': 9.0,
                'stddev': 1.0
            },
            'dns': {
                'transmitted': 10,
                'received': 9,
                'median': 4.0,
                'min': 2.0,
                'avg': 4.0,
                'max': 6.0,
                'stddev': 1.0
            },
            'iperf_server': {
                'transmitted': 10,
                'received': 10,
                'median': 3.0,
                'min': 1.0,
                'avg': 3.0,
                'max': 5.0,
                'stddev': 1.0
            },
            'management_server': {
                'transmitted': 10,
                'received': 8,
                'median': 6.0,
                'min': 2.0,
                'avg': 6.0,
                'max': 10.0,
                'stddev': 1.0
            }
        },
        'iperf': {
            'cluster': {
                'downlink': 100.0,
                'uplink': 10.0
            }
        }
    },
    'signal_quality': {
        'rsrq': 30,
        'rsrp': 80
    },
    'last_update': time.time()
}

class MyEvent:
    def __init__ (self, location = "", description = "", summary = "", start = None, end = None, all_day = False):
        self.location = location
        self.description = description
        self.summary = summary
        self.start = start
        self.end = end
        self.all_day = all_day

class MyEventNoLoc:
    def __init__ (self, description = "", summary = ""):
        self.description = description
        self.summary = summary


class TestEdgeMonitoringServer(unittest.TestCase):
    def setUp(self):
        self.app = ems.app.test_client()
        self.emulated_time = time.mktime(time.strptime("2021-04-05 00:00:00", "%Y-%m-%d %H:%M:%S"))
        self.time_method = time.time
        time.time = self._get_time

    def tearDown(self):
        time.time = self.time_method

    def _get_time(self):
        return self.emulated_time

    def _assert_status_metrics_exist(self, data):
        self.assertTrue('aetheredge_status_control_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
        self.assertTrue('aetheredge_status_user_plane{name="ace-menlo-rasp-pi"} 2.0' in data)
        self.assertTrue('aetheredge_last_update{name="ace-menlo-rasp-pi"}' in data)
        self.assertTrue('aetheredge_connect_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
        self.assertTrue('aetheredge_ping_test_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
        self.assertTrue('aetheredge_e2e_tests_ok{name="ace-menlo-rasp-pi"} 1.0' in data)
        self.assertTrue('aetheredge_e2e_tests_down{name="ace-menlo-rasp-pi"} 0.0' in data)

    def _assert_speedtest_metrics_exist(self, data):
        self.assertTrue('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"} 3' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"} 2' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"} 5.0' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"} 5.0' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"} 9.0' in data)
        self.assertTrue('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)

        self.assertTrue('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertTrue('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
        self.assertTrue('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)
        self.assertTrue('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
        self.assertTrue('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"} 4.0' in data)
        self.assertTrue('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"} 6.0' in data)
        self.assertTrue('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)

        self.assertTrue('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"} 1.0' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"} 3.0' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"} 5.0' in data)
        self.assertTrue('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)

        self.assertTrue('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertTrue('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"} 8' in data)
        self.assertTrue('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"} 6.0' in data)
        self.assertTrue('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"} 2.0' in data)
        self.assertTrue('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"} 6.0' in data)
        self.assertTrue('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"} 10.0' in data)
        self.assertTrue('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"} 1.0' in data)

        self.assertTrue('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"} 100.0' in data)
        self.assertTrue('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"} 10.0' in data)

    def _assert_signal_quality_metrics_exist(self, data):
        self.assertTrue('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"} 30' in data)
        self.assertTrue('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"} 80' in data)

    def _assert_dongle_stats_metrics_exist(self, data):
        self.assertTrue('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"}' in data)
        self.assertTrue('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi"} 8.67518969411584e+014' in data)
        self.assertTrue('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi"} 3' in data)
        self.assertTrue('aetheredge_dongle_stats_phycellid{name="ace-menlo-rasp-pi"} 101' in data)

    def test_match_location(self):
        event = MyEvent(location = "ace-menlo-rasp-pi-production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
        event = MyEvent(location = "(Compute)-MP-1-Aether Production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))

    def test_match_description(self):
        event = MyEvent(description = "ace-menlo-rasp-pi-production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
        event = MyEvent(description = "(Compute)-MP-1-Aether Production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))

    def test_match_summary(self):
        event = MyEvent(summary = "ace-menlo-rasp-pi-production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))
        event = MyEvent(summary = "(Compute)-MP-1-Aether Production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))

    def test_no_match(self):
        event = MyEvent(summary = "ace-menlo-rasp-pi-production, (Compute)-MP-1-Aether Production")
        self.assertFalse(ems.is_my_event(event, "ace-intel"))
        self.assertFalse(ems.is_my_event(event, "(Compute)-MP-1-Aether Staging"))
        self.assertFalse(ems.is_my_event(event, "ace-menlo"))

    def test_missing_field(self):
        event = MyEventNoLoc(description = "(Compute)-MP-1-Aether Production")
        self.assertTrue(ems.is_my_event(event, "ace-menlo-rasp-pi"))

    def test_in_window(self):
        events = []
        now = datetime.datetime.now(pytz.utc)
        events.append(MyEvent(location = "(Compute)-MP-1-Aether Production",
            start = now - datetime.timedelta(hours=1),
            end = now + datetime.timedelta(hours=1)))
        self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))
        self.assertFalse(ems.in_maintenance_window(events, "ace-tucson", now))

    def test_not_in_window(self):
        events = []
        now = datetime.datetime.now(pytz.utc)
        events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
            start = now + datetime.timedelta(hours=1),
            end = now + datetime.timedelta(hours=2)))
        self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))

    def test_no_events(self):
        events = []
        now = datetime.datetime.now(pytz.utc)
        self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))

    def test_all_day_events(self):
        events = []
        events.append(MyEvent(location = "ace-menlo-rasp-pi-production",
            start = datetime.datetime(2020, 9, 2, 0, 0),
            end = datetime.datetime(2020, 9, 3, 0, 0),
            all_day = True))

        ems.process_all_day_events(events)

        now = datetime.datetime(2020, 9, 2, 12, 0, tzinfo=pytz.utc)
        self.assertTrue(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))

        now = datetime.datetime(2020, 9, 3, 12, 0, tzinfo=pytz.utc)
        self.assertFalse(ems.in_maintenance_window(events, "ace-menlo-rasp-pi", now))

    def test_get_edges(self):
        response = self.app.get('/edges')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(len(data['edges']), 1)
        self.assertEqual(data['edges'][0]['name'], 'ace-example')

    def test_create_and_delete_edge_legacy(self):
        response = self.app.post('/edges', json=test_edge)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(len(data['edges']), 2)

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)

        self._assert_status_metrics_exist(data)
        self._assert_speedtest_metrics_exist(data)
        self._assert_signal_quality_metrics_exist(data)

        response = self.app.delete('/edges/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        response = self.app.get('/edges')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(len(data['edges']), 1)

    def test_create_and_delete_edge(self):
        response = self.app.post('/testresults', json=test_edge)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(len(data['edges']), 2)

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self._assert_status_metrics_exist(data)
        self._assert_speedtest_metrics_exist(data)
        self._assert_signal_quality_metrics_exist(data)
        self._assert_dongle_stats_metrics_exist(data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        response = self.app.get('/edges')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(len(data['edges']), 1)

    def test_create_and_delete_edge_speed_test(self):
        response = self.app.post('/testresults', json=test_edge)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self._assert_speedtest_metrics_exist(data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    def test_backwards_compatible_status_only(self):
        response = self.app.post('/testresults', json=test_edge_status_only)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)

        self._assert_status_metrics_exist(data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    @unittest.skip("Skip backward compatibility tests")
    def test_backwards_compatible_no_speedtest(self):
        response = self.app.post('/testresults', json=test_edge_no_speedtest)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dns_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_iperf_cluster_downlink_test{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_iperf_cluster_uplink_test{name="ace-menlo-rasp-pi"}' in data)

        self._assert_status_metrics_exist(data)
        self._assert_signal_quality_metrics_exist(data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    def test_backwards_compatible_no_signal_quality(self):
        response = self.app.post('/testresults', json=test_edge_no_signal_quality)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self.assertFalse('aetheredge_signal_quality_rsrq{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_signal_quality_rsrp{name="ace-menlo-rasp-pi"}' in data)

        self._assert_status_metrics_exist(data)
        self._assert_speedtest_metrics_exist(data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    def test_timeout_stale_result(self):
        response = self.app.post('/testresults', json=test_edge)
        data = json.loads(response.get_data(as_text=True))
        # print(json.dumps(data, indent=2))

        self.assertEqual(data['edge']['status']['control_plane'], 'connected')
        self.assertEqual(data['edge']['status']['user_plane'], 'connected')
        self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 4.0)
        self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 3.0)
        self.assertTrue('signal_quality' in data['edge'])

        self.emulated_time += (ems.NO_RESULT_THRESHOLD + 1)

        response = self.app.get('/edges/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        # print(json.dumps(data, indent=2))

        self.assertEqual(data['edge']['status']['control_plane'], 'no result')
        self.assertEqual(data['edge']['status']['user_plane'], 'no result')
        self.assertEqual(data['edge']['speedtest']['ping']['dns']['avg'], 0.0)
        self.assertEqual(data['edge']['speedtest']['ping']['iperf_server']['avg'], 0.0)
        self.assertFalse('signal_quality' in data['edge'])

    @unittest.skip("Skip backward compatibility tests")
    def test_backwards_compatible_no_iperf(self):
        response = self.app.post('/testresults', json=test_edge_no_iperf)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self.assertFalse('aetheredge_iperf_cluster_downlink{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_iperf_cluster_uplink{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    @unittest.skip("Skip backward compatibility tests")
    def test_backwards_compatible_pre_0_7_0(self):
        response = self.app.post('/testresults', json=test_edge_pre_0_7_0)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        # print(data)

        self.assertFalse('aetheredge_ping_dry_run_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_dry_run_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_ping_management_server_test_transmitted{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_received{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_median{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_min{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_avg{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_max{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_ping_management_server_test_stddev{name="ace-menlo-rasp-pi"}' in data)

        self.assertFalse('aetheredge_ping_dns_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertFalse('aetheredge_ping_dns_test_received{name="ace-menlo-rasp-pi"} 9' in data)
        self.assertFalse('aetheredge_ping_dns_test_median{name="ace-menlo-rasp-pi"} 4.0' in data)

        self.assertFalse('aetheredge_ping_iperf_server_test_transmitted{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_received{name="ace-menlo-rasp-pi"} 10' in data)
        self.assertFalse('aetheredge_ping_iperf_server_test_median{name="ace-menlo-rasp-pi"} 3.0' in data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    def test_backwards_compatible_no_dongle_stats(self):
        response = self.app.post('/testresults', json=test_edge_no_dongle_stats)
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['edge']['name'], 'ace-menlo-rasp-pi')

        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)

        self.assertFalse('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi"}' in data)
        self.assertFalse('aetheredge_dongle_stats_phycellid{name="ace-menlo-rasp-pi"}' in data)

        response = self.app.delete('/testresults/ace-menlo-rasp-pi')
        data = json.loads(response.get_data(as_text=True))
        self.assertEqual(data['result'], True)

    def test_handle_invalid_schema(self):
        response = self.app.post('/testresults', json="")
        self.assertEqual(response.status_code, 400)

        no_name = deepcopy(test_edge)
        del no_name['name']
        response = self.app.post('/testresults', json=no_name)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        no_status = deepcopy(test_edge)
        del no_status['status']
        response = self.app.post('/testresults', json=no_status)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        bad_status = deepcopy(test_edge)
        bad_status['status']['control_plane'] = 1
        response = self.app.post('/testresults', json=bad_status)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        bad_ping_result = deepcopy(test_edge)
        bad_ping_result['speedtest']['ping']['dns']['min'] = "foo"
        response = self.app.post('/testresults', json=bad_ping_result)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        bad_iperf_result = deepcopy(test_edge)
        bad_iperf_result['speedtest']['iperf']['cluster']['uplink'] = "foo"
        response = self.app.post('/testresults', json=bad_iperf_result)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

        bad_signal_quality = deepcopy(test_edge)
        del bad_signal_quality['signal_quality']['rsrq']
        response = self.app.post('/testresults', json=bad_signal_quality)
        self.assertEqual(response.status_code, 400)
        response = self.app.get('/edges/metrics')
        data = response.get_data(as_text=True)
        self.assertFalse('ace-menlo-rasp-pi' in data)

if __name__ == '__main__':
    import xmlrunner
    with open('results.xml', 'wb') as output:
        unittest.main(testRunner=xmlrunner.XMLTestRunner(verbosity=2, output=output))
