input=None would read stdin from terminal, causing hangs

This commit is contained in:
Edwin Eefting 2020-05-18 20:05:50 +02:00
parent e54c275685
commit 1ffd9a15a3
3 changed files with 14 additions and 2 deletions

View File

@ -364,7 +364,8 @@ class ExecuteNode(Logger):
#determine stdin
if input==None:
stdin=None
#NOTE: Not None, otherwise it reads stdin from terminal!
stdin=subprocess.PIPE
elif isinstance(input,str) or type(input)=='unicode':
self.debug("INPUT > \n"+input.rstrip())
stdin=subprocess.PIPE

View File

@ -47,6 +47,9 @@ class TestExecuteNode(unittest2.TestCase):
with self.subTest("stdin input string"):
self.assertEqual(node.run(["cat"], input="test"), ["test"])
#command that wants input, while we dont have input, shouldnt hang forever.
with self.subTest("stdin process with input=None (shouldn't hang)"):
self.assertEqual(node.run(["cat"]), [])
def test_basics_local(self):
node=ExecuteNode(debug_output=True)

View File

@ -106,9 +106,17 @@ test_target1
logger=Logger()
description="[Source]"
node=ZfsNode("test", logger, description=description)
print(node.supported_send_options)
# -D propably always supported
self.assertIn("-D", node.supported_send_options)
def test_supportedrecvoptions(self):
logger=Logger()
description="[Source]"
#NOTE: this couldnt hang via ssh if we dont close filehandles properly. (which was a previous bug)
node=ZfsNode("test", logger, description=description, ssh_to='localhost')
self.assertIsInstance(node.supported_recv_options, list)
if __name__ == '__main__':