From 5b8ef6cf63e66e4221225e2ebc8861842068c211 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Wed, 11 Dec 2019 12:55:14 +0100
Subject: [PATCH] added schema validation to test

---
 inventory_provider/tasks/worker.py |  6 +++---
 test/test_worker_utils.py          | 34 +++++++++++++++++++++++++++---
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 70f79385..9ed2eb25 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -589,7 +589,7 @@ def _build_interface_services(update_callback=lambda s: None):
 
             assert ifc_name == info['name']
             yield {
-                'hostname': router_name,
+                'router': router_name,
                 'interface': info['name'],
                 'description': info['description']
             }
@@ -609,8 +609,8 @@ def _build_interface_services(update_callback=lambda s: None):
         if not service_type:
             continue
         rp.set(
-            f'{service_type}:interface-services'
-            f':{ifc["hostname"]}:{ifc["interface"]}',
+            f'interface-services:{service_type}:'
+            f':{ifc["router"]}:{ifc["interface"]}',
             json.dumps(ifc))
 
     rp.execute()
diff --git a/test/test_worker_utils.py b/test/test_worker_utils.py
index db4e353d..e86a9af3 100644
--- a/test/test_worker_utils.py
+++ b/test/test_worker_utils.py
@@ -2,6 +2,7 @@
 tests of a few worker utilities
 """
 import contextlib
+import json
 import os
 
 import jsonschema
@@ -28,10 +29,37 @@ def test_build_interface_services(mocked_worker_module):
     :param mocked_redis:
     :return:
     """
+
+    ifc_list_schema = {
+        '$schema': 'http://json-schema.org/draft-07/schema#',
+
+        'definitions': {
+            'ifc-info': {
+                'type': 'object',
+                'properties': {
+                    'description': {'type': 'string'},
+                    'router': {'type': 'string'},
+                    'interface': {'type': 'string'}
+                },
+                'required': ['router', 'interface', 'description'],
+                'additionalProperties': False
+            },
+        },
+
+        'type': 'array',
+        'items': { '$ref': '#/definitions/ifc-info' }
+    }
+
     db = backend_db()  # also forces initialization
     worker._build_interface_services()
 
-    l = [v for (k, v) in db.items()
-         if k.startswith('interface-services:')]
-    print(len(l))
+    mdvpn = [json.loads(v) for (k, v) in db.items()
+         if k.startswith('interface-services:mdvpn')]
+    jsonschema.validate(mdvpn, ifc_list_schema)
+    assert mdvpn, 'expected at least one interface'
+
+    lhcone = [json.loads(v) for (k, v) in db.items()
+         if k.startswith('interface-services:mdvpn')]
+    jsonschema.validate(lhcone, ifc_list_schema)
+    assert lhcone, 'expected at least one interface'
 
-- 
GitLab