def test_execute_commands(self): """Test executing arbitrary commands and logging their output.""" # All commands succeed. exp = (True, []) log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['echo foo', 'echo bar'], log_f, 1) self.assertEqual(obs, exp) exp = ("Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" "Command:\n\necho bar\n\nStdout:\n\nbar\n\nStderr:\n\n\n") log_f.seek(0, 0) obs = log_f.read() self.assertEqual(obs, exp) # One command fails. exp = (False, []) log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['echo foo', 'foobarbaz'], log_f, 1) self.assertEqual(obs, exp) exp = ("Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" "Command:\n\nfoobarbaz\n\nStdout:\n\n\nStderr:\n\n\n\n") log_f.seek(0, 0) obs = sub('Stderr:\n\n.*\n\n', 'Stderr:\n\n\n\n', log_f.read()) self.assertEqual(obs, exp)
def test_execute_commands_log_individual_cmds(self): """execute arbitrary commands and log each one separately.""" # All commands succeed. log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['echo foo', 'echo bar'], log_f, 1, log_individual_cmds=True) self.assertEqual(obs[0], True) self.assertEqual(len(obs[1]), 2) self.assertEqual(obs[1][0][1], 0) self.assertEqual(obs[1][1][1], 0) exp = ("Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" "Command:\n\necho bar\n\nStdout:\n\nbar\n\nStderr:\n\n\n") log_f.seek(0, 0) log_obs = log_f.read() self.assertEqual(log_obs, exp) exp = "Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" log_f = obs[1][0][0] log_f.seek(0, 0) log_obs = log_f.read() self.assertEqual(log_obs, exp) exp = "Command:\n\necho bar\n\nStdout:\n\nbar\n\nStderr:\n\n\n" log_f = obs[1][1][0] log_f.seek(0, 0) log_obs = log_f.read() self.assertEqual(log_obs, exp) # First command fails. log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['foobarbaz', 'echo foo'], log_f, 1, log_individual_cmds=True) self.assertEqual(obs[0], False) self.assertEqual(len(obs[1]), 2) self.assertEqual(obs[1][0][1], 127) self.assertEqual(obs[1][1][1], 0) exp = ("Command:\n\nfoobarbaz\n\nStdout:\n\n\nStderr:\n\n\n\n" "Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n") log_f.seek(0, 0) log_obs = sub('Stderr:\n\n.*\n\n', 'Stderr:\n\n\n\n', log_f.read()) self.assertEqual(log_obs, exp) exp = ("Command:\n\nfoobarbaz\n\nStdout:\n\n\nStderr:\n\n\n\n") log_f = obs[1][0][0] log_f.seek(0, 0) log_obs = sub('Stderr:\n\n.*\n\n', 'Stderr:\n\n\n\n', log_f.read()) self.assertEqual(log_obs, exp) exp = "Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" log_f = obs[1][1][0] log_f.seek(0, 0) log_obs = log_f.read() self.assertEqual(log_obs, exp)
def test_execute_commands_stop_on_first_failure(self): """Test executing arbitrary commands and stopping on first failure.""" # All commands succeed. exp = (True, []) log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['echo foo', 'echo bar'], log_f, 1, True) self.assertEqual(obs, exp) exp = ("Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" "Command:\n\necho bar\n\nStdout:\n\nbar\n\nStderr:\n\n\n") log_f.seek(0, 0) obs = log_f.read() self.assertEqual(obs, exp) # First command fails. exp = (False, []) log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['foobarbaz', 'echo foo'], log_f, 1, True) self.assertEqual(obs, exp) exp = ("Command:\n\nfoobarbaz\n\nStdout:\n\n\nStderr:\n\n\n\n") log_f.seek(0, 0) obs = sub('Stderr:\n\n.*\n\n', 'Stderr:\n\n\n\n', log_f.read()) self.assertEqual(obs, exp) # Second command fails. exp = (False, []) log_f = TemporaryFile(prefix=self.prefix, suffix='.txt') obs = _execute_commands(['echo foo', 'foobarbaz'], log_f, 1, True) self.assertEqual(obs, exp) exp = ("Command:\n\necho foo\n\nStdout:\n\nfoo\n\nStderr:\n\n\n" "Command:\n\nfoobarbaz\n\nStdout:\n\n\nStderr:\n\n\n\n") log_f.seek(0, 0) obs = sub('Stderr:\n\n.*\n\n', 'Stderr:\n\n\n\n', log_f.read()) self.assertEqual(obs, exp)