summaryrefslogtreecommitdiffstats
path: root/test/remote_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/remote_test.py')
-rw-r--r--test/remote_test.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/test/remote_test.py b/test/remote_test.py
index 21913b6c959..092d3f8d2e7 100644
--- a/test/remote_test.py
+++ b/test/remote_test.py
@@ -10,7 +10,7 @@ import six
from six import moves
from framework import VppTestCase
-from enum import Enum
+from aenum import Enum
class SerializableClassCopy(object):
@@ -19,6 +19,9 @@ class SerializableClassCopy(object):
"""
pass
+ def __repr__(self):
+ return '<SerializableClassCopy dict=%s>' % self.__dict__
+
class RemoteClassAttr(object):
"""
@@ -44,7 +47,8 @@ class RemoteClassAttr(object):
def __getattr__(self, attr):
if attr[0] == '_':
if not (attr.startswith('__') and attr.endswith('__')):
- raise AttributeError
+ raise AttributeError('tried to get private attribute: %s ',
+ attr)
self._path.append(attr)
return self
@@ -58,8 +62,9 @@ class RemoteClassAttr(object):
True, value=val)
def __call__(self, *args, **kwargs):
+ ret = True if 'vapi' in self.path_to_str() else False
return self._remote._remote_exec(RemoteClass.CALL, self.path_to_str(),
- True, *args, **kwargs)
+ ret, *args, **kwargs)
class RemoteClass(Process):
@@ -119,7 +124,7 @@ class RemoteClass(Process):
if not (attr.startswith('__') and attr.endswith('__')):
if hasattr(super(RemoteClass, self), '__getattr__'):
return super(RemoteClass, self).__getattr__(attr)
- raise AttributeError
+ raise AttributeError('missing: %s', attr)
return RemoteClassAttr(self, attr)
def __setattr__(self, attr, val):
@@ -137,12 +142,12 @@ class RemoteClass(Process):
mutable_args = list(args)
for i, val in enumerate(mutable_args):
if isinstance(val, RemoteClass) or \
- isinstance(val, RemoteClassAttr):
+ isinstance(val, RemoteClassAttr):
mutable_args[i] = val.get_remote_value()
args = tuple(mutable_args)
for key, val in six.iteritems(kwargs):
if isinstance(val, RemoteClass) or \
- isinstance(val, RemoteClassAttr):
+ isinstance(val, RemoteClassAttr):
kwargs[key] = val.get_remote_value()
# send request
args = self._make_serializable(args)
@@ -244,7 +249,10 @@ class RemoteClass(Process):
# copy at least serializable attributes and properties
for name, member in inspect.getmembers(obj):
- if name[0] == '_': # skip private members
+ # skip private members and non-writable dunder methods.
+ if name[0] == '_':
+ if name in ['__weakref__']:
+ continue
if not (name.startswith('__') and name.endswith('__')):
continue
if callable(member) and not isinstance(member, property):