aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Grajciar <jgrajcia@cisco.com>2019-02-21 12:01:31 +0100
committerNeale Ranns <nranns@cisco.com>2019-02-25 19:38:38 +0000
commit0b1f8a7e69228bb6ac4862faafb05c05171e0edc (patch)
tree91b6269753255eeb7add691a3bb76496433d2abd
parent7c44d78ef2e7bf0c8714be4184511ed8f23ff239 (diff)
Remote Test: fix serialization (dict, Enum)
Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
-rw-r--r--test/remote_test.py24
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):