mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-15 01:09:49 +00:00
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
|
from cStringIO import StringIO
|
||
|
from twisted.trial import unittest
|
||
|
from twisted.internet import threads # CLI tests use deferToThread
|
||
|
from ...util.assertutil import precondition
|
||
|
from ...util.encodingutil import (unicode_platform,
|
||
|
get_filesystem_encoding,
|
||
|
unicode_to_argv)
|
||
|
from ...scripts import runner
|
||
|
from ..common_util import ReallyEqualMixin
|
||
|
|
||
|
def parse_options(basedir, command, args):
|
||
|
o = runner.Options()
|
||
|
o.parseOptions(["--node-directory", basedir, command] + args)
|
||
|
while hasattr(o, "subOptions"):
|
||
|
o = o.subOptions
|
||
|
return o
|
||
|
|
||
|
class CLITestMixin(ReallyEqualMixin):
|
||
|
def do_cli(self, verb, *args, **kwargs):
|
||
|
precondition(not [True for arg in args if not isinstance(arg, str)],
|
||
|
"arguments to do_cli must be strs -- convert using unicode_to_argv", args=args)
|
||
|
|
||
|
# client_num is used to execute client CLI commands on a specific client.
|
||
|
client_num = kwargs.get("client_num", 0)
|
||
|
|
||
|
nodeargs = [
|
||
|
"--node-directory", unicode_to_argv(self.get_clientdir(i=client_num)),
|
||
|
]
|
||
|
argv = nodeargs + [verb] + list(args)
|
||
|
stdin = kwargs.get("stdin", "")
|
||
|
stdout, stderr = StringIO(), StringIO()
|
||
|
d = threads.deferToThread(runner.runner, argv, run_by_human=False,
|
||
|
stdin=StringIO(stdin),
|
||
|
stdout=stdout, stderr=stderr)
|
||
|
def _done(rc):
|
||
|
return rc, stdout.getvalue(), stderr.getvalue()
|
||
|
d.addCallback(_done)
|
||
|
return d
|
||
|
|
||
|
def skip_if_cannot_represent_filename(self, u):
|
||
|
precondition(isinstance(u, unicode))
|
||
|
|
||
|
enc = get_filesystem_encoding()
|
||
|
if not unicode_platform():
|
||
|
try:
|
||
|
u.encode(enc)
|
||
|
except UnicodeEncodeError:
|
||
|
raise unittest.SkipTest("A non-ASCII filename could not be encoded on this platform.")
|