From 0b1f8a7e69228bb6ac4862faafb05c05171e0edc Mon Sep 17 00:00:00 2001 From: Jakub Grajciar Date: Thu, 21 Feb 2019 12:01:31 +0100 Subject: Remote Test: fix serialization (dict, Enum) Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a Signed-off-by: Jakub Grajciar --- test/remote_test.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/remote_test.py b/test/remote_test.py index dfdc6309a89..43cb9b93080 100644 --- a/test/remote_test.py +++ b/test/remote_test.py @@ -10,6 +10,7 @@ import six from six import moves from framework import VppTestCase +from enum import Enum class SerializableClassCopy(object): @@ -221,7 +222,22 @@ class RemoteClass(Process): """ if self._serializable(obj): return obj # already serializable + copy = SerializableClassCopy() + + """ + Dictionaries can hold complex values, so we split keys and values into + separate lists and serialize them individually. + """ + if (type(obj) is dict): + copy.type = type(obj) + copy.k_list = list() + copy.v_list = list() + for k, v in obj.items(): + copy.k_list.append(self._make_serializable(k)) + copy.v_list.append(self._make_serializable(v)) + return copy + # copy at least serializable attributes and properties for name, member in inspect.getmembers(obj): if name[0] == '_': # skip private members @@ -245,10 +261,18 @@ class RemoteClass(Process): if type(obj) is tuple: rv = tuple(rv) return rv + elif (isinstance(obj, Enum)): + return obj.value else: return self._make_obj_serializable(obj) def _deserialize_obj(self, obj): + if (hasattr(obj, 'type')): + if obj.type is dict: + _obj = dict() + for k, v in zip(obj.k_list, obj.v_list): + _obj[self._deserialize(k)] = self._deserialize(v) + return _obj return obj def _deserialize(self, obj): -- cgit 1.2.3-korg