import platform
_PLATFORM_INFO = [
platform.machine(),
platform.platform(),
platform.platform(aliased=1),
platform.platform(terse=1),
platform.system(),
",".join(platform.architecture()),
",".join(platform.uname()),
]
class RpcTest:
def __init__(self, obj):
if isinstance(obj, RpcTest):
self.name = obj.name
self.args = obj.args
self.disabled = obj.disabled
self.reason = obj.reason
self.skip_platforms = obj.skip_platforms
else:
words = str(obj).split(" ") self.name = words[0]
if len(words) > 1:
self.args = words[1:]
else:
self.args = []
self.disabled = False
self.reason = None
self.skip_platforms = []
def is_disabled(self):
return self.disabled
def is_skipped(self):
for platform_to_skip in self.skip_platforms:
for p in _PLATFORM_INFO:
if platform_to_skip.lower() in p.lower().split(","):
return True
return False
def disable(self, reason):
self.disabled = True
self.reason = reason
def skip(self, platforms, reason):
self.reason = reason
if isinstance(platforms, (tuple, list)):
for i in platforms:
self.skip_platforms.append(i)
else:
self.skip_platforms.append(platforms)
def __repr__(self):
retval = self.name
if self.args:
retval = " ".join(
[
retval,
]
+ self.args
)
return retval
def __str__(self):
return repr(self)
def disabled(test_name, reason):
assert reason, "disabling a test requires a reason!"
rpctest = RpcTest(test_name)
rpctest.disable(reason)
return rpctest
def skip(test_name, platforms, reason):
assert reason, "skipping a test on some platforms requires a reason!"
rpctest = RpcTest(test_name)
rpctest.skip(platforms, reason)
return rpctest