diff options
-rw-r--r-- | test/remote_test.py | 24 |
1 files changed, 24 insertions, 0 deletions
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): |