[AETHER-2442]: Add fetching dongle stats in monitoring agent

Change-Id: I0b43652be971c4a12ee228cefcf864d77751ed0c
diff --git a/edge-monitoring-server/test_edge_monitoring_server.py b/edge-monitoring-server/test_edge_monitoring_server.py
index 146bfca..15bcca5 100755
--- a/edge-monitoring-server/test_edge_monitoring_server.py
+++ b/edge-monitoring-server/test_edge_monitoring_server.py
@@ -19,6 +19,12 @@
         'control_plane': 'connected',
         'user_plane': 'connected'
     },
+    'dongle_stats': {
+        'SuccessfulFetch': True,
+        'IMSI': '315021000000000',
+        'CellGlobalID': '315010001F800',
+        'PLMNStatus': 'Success'
+    },
     'speedtest': {
         'ping': {
             'dry_run': {
@@ -295,6 +301,65 @@
     '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
@@ -372,6 +437,11 @@
         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",value="315010001F800"}' in data)
+        self.assertTrue('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi",value="Success"}' 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"))
@@ -489,6 +559,7 @@
         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))
@@ -689,6 +760,22 @@
         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.assertTrue('aetheredge_dongle_stats_imsi{name="ace-menlo-rasp-pi"} 0.0' in data)
+        self.assertFalse('aetheredge_dongle_stats_cellglobalid{name="ace-menlo-rasp-pi",value=' in data)
+        self.assertFalse('aetheredge_dongle_stats_plmnstatus{name="ace-menlo-rasp-pi",value=' 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)