mirror of
https://github.com/psy0rz/zfs_autobackup.git
synced 2025-05-30 01:19:16 +03:00
more tests
This commit is contained in:
parent
53db61de96
commit
acb0172ddf
@ -158,8 +158,6 @@ class TestExecuteNode(unittest2.TestCase):
|
|||||||
|
|
||||||
def test_script_handlers(self):
|
def test_script_handlers(self):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test(node):
|
def test(node):
|
||||||
results = []
|
results = []
|
||||||
cmd_pipe=node.script(lines=["echo line1", "echo line2 1>&2", "exit 123"],
|
cmd_pipe=node.script(lines=["echo line1", "echo line2 1>&2", "exit 123"],
|
||||||
@ -177,15 +175,37 @@ class TestExecuteNode(unittest2.TestCase):
|
|||||||
with self.subTest("local"):
|
with self.subTest("local"):
|
||||||
test(ExecuteNode(debug_output=True))
|
test(ExecuteNode(debug_output=True))
|
||||||
|
|
||||||
|
|
||||||
def test_script_defaults(self):
|
def test_script_defaults(self):
|
||||||
|
|
||||||
def handler(line):
|
result=[]
|
||||||
pass
|
|
||||||
|
|
||||||
nodea=ExecuteNode(debug_output=True)
|
nodea=ExecuteNode(debug_output=True)
|
||||||
cmd_pipe=nodea.script(lines=["echo test"], stdout_handler=handler)
|
cmd_pipe=nodea.script(lines=["echo test"], stdout_handler=lambda line: result.append(line))
|
||||||
cmd_pipe.execute()
|
cmd_pipe.execute()
|
||||||
|
self.assertEqual(result, ["test"])
|
||||||
|
|
||||||
|
def test_script_pipe(self):
|
||||||
|
|
||||||
|
result=[]
|
||||||
|
nodea=ExecuteNode()
|
||||||
|
cmd_pipe=nodea.script(lines=["echo test"])
|
||||||
|
nodea.script(lines=["tr e E"], inp=cmd_pipe,stdout_handler=lambda line: result.append(line))
|
||||||
|
cmd_pipe.execute()
|
||||||
|
self.assertEqual(result, ["tEst"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_mixed(self):
|
||||||
|
|
||||||
|
#should be able to mix run() and script()
|
||||||
|
node=ExecuteNode()
|
||||||
|
|
||||||
|
result=[]
|
||||||
|
pipe=node.run(["echo", "test"], pipe=True)
|
||||||
|
pipe=node.script(["tr e E"], inp=pipe, stdout_handler=lambda line: result.append(line))
|
||||||
|
pipe.execute()
|
||||||
|
self.assertEqual(result, ["tEst"])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,13 +183,12 @@ class ExecuteNode(LogStub):
|
|||||||
else:
|
else:
|
||||||
return output_lines
|
return output_lines
|
||||||
|
|
||||||
def script(self, lines, inp=None, stdout_handler=None, stderr_handler=None, exit_handler=None, valid_exitcodes=None, readonly=False, hide_errors=False):
|
def script(self, lines, inp=None, stdout_handler=None, stderr_handler=None, exit_handler=None, valid_exitcodes=None, readonly=False, hide_errors=False, pipe=False):
|
||||||
"""Run a multiline script on the node.
|
"""Run a multiline script on the node.
|
||||||
|
|
||||||
This is much more low level than run() and allows for finer grained control.
|
This is much more low level than run() and allows for finer grained control.
|
||||||
|
|
||||||
Either uses a local shell (sh -c) or remote shell (ssh) to execute the command.
|
Either uses a local shell (sh -c) or remote shell (ssh) to execute the command.
|
||||||
It will always return a CmdPipe that you should call execute on, or pipe to another script. (via inp=...)
|
|
||||||
You need to do your own escaping/quoting.
|
You need to do your own escaping/quoting.
|
||||||
It will do logging of stderr and exit codes, but you should
|
It will do logging of stderr and exit codes, but you should
|
||||||
specify your stdout handler when calling CmdPipe.execute.
|
specify your stdout handler when calling CmdPipe.execute.
|
||||||
@ -202,6 +201,7 @@ class ExecuteNode(LogStub):
|
|||||||
:param readonly: make this True if the command doesn't make any changes and is safe to execute in testmode
|
:param readonly: make this True if the command doesn't make any changes and is safe to execute in testmode
|
||||||
:param valid_exitcodes: list of valid exit codes for this command. Use [] to accept all exit codes. Default [0]
|
:param valid_exitcodes: list of valid exit codes for this command. Use [] to accept all exit codes. Default [0]
|
||||||
:param hide_errors: don't show stderr output as error, instead show it as debugging output (use to hide expected errors)
|
:param hide_errors: don't show stderr output as error, instead show it as debugging output (use to hide expected errors)
|
||||||
|
:param pipe: return CmdPipe instead of executing it. (pipe this into another run() command via inp=...)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -218,6 +218,8 @@ class ExecuteNode(LogStub):
|
|||||||
def internal_stdout_handler(line):
|
def internal_stdout_handler(line):
|
||||||
self.debug("STDOUT > " + line.rstrip())
|
self.debug("STDOUT > " + line.rstrip())
|
||||||
stdout_handler(line)
|
stdout_handler(line)
|
||||||
|
else:
|
||||||
|
internal_stdout_handler=stdout_handler
|
||||||
|
|
||||||
def internal_stderr_handler(line):
|
def internal_stderr_handler(line):
|
||||||
self._parse_stderr(line, hide_errors)
|
self._parse_stderr(line, hide_errors)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user