Remote Test: fix serialization (dict, Enum)

Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
This commit is contained in:
Jakub Grajciar
2019-02-21 12:01:31 +01:00
committed by Neale Ranns
parent 7c44d78ef2
commit 0b1f8a7e69

View File

@ -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):