From 8cb45d9b23e33d04791a11bc7359869a85a17386 Mon Sep 17 00:00:00 2001 From: Marco Zeisler Date: Thu, 17 Jun 2021 19:00:26 +0200 Subject: [PATCH] make message unpacking testable; added message unpacking tests; --- .../event_store/service/event_logger.py | 18 +++-- .../event_store/service/test_event_logger.py | 68 +++++++++++++++++++ 2 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 components/event_store/service/test_event_logger.py diff --git a/components/event_store/service/event_logger.py b/components/event_store/service/event_logger.py index 36ae325..757d0c2 100644 --- a/components/event_store/service/event_logger.py +++ b/components/event_store/service/event_logger.py @@ -67,6 +67,14 @@ class EventLogger: :param bytes msg: pickled msg binary to log """ + key, to_log = self._unpack_message_to_log(msg) + + if self.log_to_redis: + self.redis.lpush(key, "{}".format(to_log)) + if self.verbose: + print(to_log) + + def _unpack_message_to_log(self, msg: bytes): try: msg = pickle.loads(msg) except Exception as e: @@ -90,9 +98,9 @@ class EventLogger: try: to_log = json.dumps(msg.to_dict()) except AttributeError: - to_log = str(msg) + try: + to_log = json.dumps(msg) + except (json.decoder.JSONDecodeError, TypeError): + to_log = str(msg) - if self.log_to_redis: - self.redis.lpush(key, "{}".format(to_log)) - if self.verbose: - print(to_log) + return key, to_log diff --git a/components/event_store/service/test_event_logger.py b/components/event_store/service/test_event_logger.py new file mode 100644 index 0000000..ac13786 --- /dev/null +++ b/components/event_store/service/test_event_logger.py @@ -0,0 +1,68 @@ +import datetime +import json +import pickle +import unittest + +import geopy +from dse_shared_libs.daf import DAF +from dse_shared_libs.target_velocity import TargetVelocity +from dse_shared_libs.traffic_light_color import TrafficLightColor +from dse_shared_libs.traffic_light_state import TrafficLightState +from redis import StrictRedis + +from event_logger import EventLogger + + +class TestEventLogger(unittest.TestCase): + def setUp(self) -> None: + self.el = EventLogger(StrictRedis(), False, False) + self.timestamp = datetime.datetime.now() + + def test_unpack_daf(self): + daf = DAF(vehicle_identification_number='my_vin', + gps_location=geopy.Point(0, 0, 0), + velocity=130.0, + near_crash_event=False, + timestamp=self.timestamp, + ) + + key, message = self.el._unpack_message_to_log(pickle.dumps(daf)) + + self.assertEqual(key, 'DAF:my_vin') + self.assertEqual(message, json.dumps(daf.to_dict())) + + def test_unpack_target_velocity(self): + tv = TargetVelocity(vin='my_other_vin', + target_velocity=120.0, + timestamp=self.timestamp) + + key, message = self.el._unpack_message_to_log(pickle.dumps(tv)) + + self.assertEqual(key, 'TV:my_other_vin') + self.assertEqual(message, json.dumps(tv.to_dict())) + + def test_unpack_traffic_light_state(self): + tls = TrafficLightState(tlid='my_traffic_light', + color=TrafficLightColor.GREEN, + last_switch=self.timestamp) + + key, message = self.el._unpack_message_to_log(pickle.dumps(tls)) + + self.assertEqual(key, 'TL:my_traffic_light') + self.assertEqual(message, json.dumps(tls.to_dict())) + + def test_unpack_unknown_dict(self): + unknown = dict(foo='foo', bar='bar') + + key, message = self.el._unpack_message_to_log(pickle.dumps(unknown)) + + self.assertEqual(key, 'UNKNOWN') + self.assertEqual(message, json.dumps(unknown)) + + def test_unpack_unknown_object(self): + obj = datetime.datetime.now() + + key, message = self.el._unpack_message_to_log(pickle.dumps(obj)) + + self.assertEqual(key, 'UNKNOWN') + self.assertEqual(message, str(obj))