diff options
author | Jakub Grajciar <jgrajcia@cisco.com> | 2019-02-21 12:01:31 +0100 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2019-02-25 19:38:38 +0000 |
commit | 0b1f8a7e69228bb6ac4862faafb05c05171e0edc (patch) | |
tree | 91b6269753255eeb7add691a3bb76496433d2abd | |
parent | 7c44d78ef2e7bf0c8714be4184511ed8f23ff239 (diff) |
Remote Test: fix serialization (dict, Enum)
Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
-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): |