From e3555d3a0de5e341b0ddd8a712214f95aa9f5f02 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Wed, 3 Jun 2020 13:24:11 +0200
Subject: [PATCH] test that log entries are written to redis

---
 test/test_monitoring.py | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/test/test_monitoring.py b/test/test_monitoring.py
index c8bb739f..f25d3793 100644
--- a/test/test_monitoring.py
+++ b/test/test_monitoring.py
@@ -1,10 +1,25 @@
 import contextlib
+import json
 import os
 from unittest import mock
 from inventory_provider.tasks import monitor
+from inventory_provider.tasks.common import _get_redis
 
 CONNECTION_FINGERPRINT = "SDF@#$@#"
 
+TEST_MANAGEMENT_EVENTS = [
+    {'type': 'task-aaaa', 'uuid': 'AAAA', 'clock': 999},
+    {'type': 'task-infox', 'uuid': 'AAAA', 'clock': 999}
+]
+
+TEST_LOG_EVENTS = [
+    {'type': 'task-info', 'uuid': 'AAAA', 'clock': 99},
+    {'type': 'task-info', 'uuid': 'AAAA', 'clock': 999},
+    {'type': 'task-warning', 'uuid': 'AAAA', 'clock': 88},
+    {'type': 'task-warning', 'uuid': 'AAAA', 'clock': 888},
+    {'type': 'task-error', 'uuid': 'AAAA', 'clock': 77},
+    {'type': 'task-error', 'uuid': 'AAAA', 'clock': 777}
+]
 
 @contextlib.contextmanager
 def mocked_connection():
@@ -25,12 +40,35 @@ class MockedReceiver():
         self.handlers = handlers
 
     def capture(self, **kwargs):
-        pass
+        # write test events to log, check in the test case
+        for e in TEST_MANAGEMENT_EVENTS + TEST_LOG_EVENTS:
+            self.handlers['*'](e)
+
+
+def backend_db():
+    return _get_redis({
+        'redis': {
+            'hostname': None,
+            'port': None
+        },
+        'redis-databases': [0, 7]
+    }).db
 
 
 @mock.patch('inventory_provider.tasks.monitor.app.events.State', MockedState)
 @mock.patch('inventory_provider.tasks.monitor.app.connection', mocked_connection)
+@mock.patch('inventory_provider.tasks.monitor.app.events.Receiver', MockedReceiver)
 def test_latchdb(data_config_filename, mocked_redis):
 
     os.environ['INVENTORY_PROVIDER_CONFIG_FILENAME'] = data_config_filename
     monitor.run()
+
+    db = backend_db()
+
+    for e in TEST_MANAGEMENT_EVENTS:
+        expected_key = f'joblog:{e["uuid"]}:{e["type"]}'
+        assert e == json.loads(db[expected_key])
+
+    for e in TEST_LOG_EVENTS:
+        expected_key = f'joblog:{e["uuid"]}:{e["type"]}:{e["clock"]}'
+        assert e == json.loads(db[expected_key])
-- 
GitLab