From: Jakub Grajciar Date: Thu, 21 Feb 2019 11:01:31 +0000 (+0100) Subject: Remote Test: fix serialization (dict, Enum) X-Git-Tag: v19.04-rc1~411 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F51%2F17751%2F3;p=vpp.git Remote Test: fix serialization (dict, Enum) Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a Signed-off-by: Jakub Grajciar --- 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):