def testPrivateRunProcessWithOSError(self): """Test _RunProcess when subprocess returns an exception.""" gmacpyutil.os.environ = mock.MagicMock() gmacpyutil.subprocess.Popen = mock.MagicMock() gmacpyutil.subprocess.Popen.side_effect = OSError('oops') with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'])
def testRunProcessReturnsATuple(self): """Test RunProcess returns a 3-tuple.""" self.mox.StubOutWithMock(gmacpyutil, '_RunProcess') gmacpyutil._RunProcess(['cmd']).AndReturn(('out', 'err', 1)) self.mox.ReplayAll() self.assertEqual(3, len(gmacpyutil.RunProcess(['cmd']))) self.mox.VerifyAll()
def testPrivateRunProcessErrorSudoPasswordAndStdinput(self): """Test _RunProcess fail with sudo and stdinput set.""" self.mox.ReplayAll() with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'], stdinput='input', sudo=True, sudo_password='******') self.mox.VerifyAll()
def testPrivateRunProcessWithTimeout(self): """Test _RunProcess with a timeout.""" self.StubSetup() self.mox.StubOutWithMock(gmacpyutil, 'SetFileNonBlocking') self.mox.StubOutWithMock(gmacpyutil.select, 'select') mock_env = self.mox.CreateMockAnything() mock_stderr = self.mox.CreateMockAnything() mock_stdout = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_task.stdout = mock_stdout mock_task.stderr = mock_stderr mock_task.returncode = 0 mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen(['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) gmacpyutil.SetFileNonBlocking(mock_task.stdout).AndReturn(None) gmacpyutil.SetFileNonBlocking(mock_task.stderr).AndReturn(None) gmacpyutil.select.select([mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn( ([mock_task.stdout, mock_task.stderr], None, None)) mock_task.poll().AndReturn(0) mock_task.poll().AndReturn(0) mock_stdout.read().AndReturn('out') mock_stderr.read().AndReturn('err') self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess(['cmd'], timeout=2)) self.mox.VerifyAll()
def testPrivateRunProcessWithTimeout(self): """Test _RunProcess with a timeout.""" self.StubSetup() self.mox.StubOutWithMock(gmacpyutil, 'SetFileNonBlocking') self.mox.StubOutWithMock(gmacpyutil.select, 'select') mock_env = self.mox.CreateMockAnything() mock_stderr = self.mox.CreateMockAnything() mock_stdout = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_task.stdout = mock_stdout mock_task.stderr = mock_stderr mock_task.returncode = 0 mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen( ['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) gmacpyutil.SetFileNonBlocking(mock_task.stdout).AndReturn(None) gmacpyutil.SetFileNonBlocking(mock_task.stderr).AndReturn(None) gmacpyutil.select.select( [mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn( ([mock_task.stdout, mock_task.stderr], None, None)) mock_task.poll().AndReturn(0) mock_task.poll().AndReturn(0) mock_stdout.read().AndReturn('out') mock_stderr.read().AndReturn('err') self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess( ['cmd'], timeout=2)) self.mox.VerifyAll()
def testPrivateRunProcessWithEnv(self): """Test _RunProcess, simple command, with env.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() env_copy = {'foo': 'bar'} new_env = {'new': True} used_env = env_copy.copy() used_env.update(new_env) gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(env_copy) gmacpyutil.subprocess.Popen(['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=used_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input=None).AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess(['cmd'], env={'new': True})) self.mox.VerifyAll()
def testPrivateRunProcessBackground(self): """Test _RunProcess, simple command, default args, in background.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen( ['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) self.mox.ReplayAll() self.assertEqual(mock_task, gmacpyutil._RunProcess(['cmd'], background=True)) self.mox.VerifyAll()
def testPrivateRunProcess(self): """Test _RunProcess, simple command, default args.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen( ['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input=None).AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess(['cmd'])) self.mox.VerifyAll()
def testPrivateRunProcessWithSudoAndSudoPassword(self): """Test _RunProcess, simple command, with sudo and sudo_password.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen( ['sudo', '-S', 'cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input='password\n').AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess( ['cmd'], sudo=True, sudo_password='******')) self.mox.VerifyAll()
def testPrivateRunProcessBackground(self): """Test _RunProcess, simple command, default args, in background.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen(['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) self.mox.ReplayAll() self.assertEqual(mock_task, gmacpyutil._RunProcess(['cmd'], background=True)) self.mox.VerifyAll()
def testPrivateRunProcess(self): """Test _RunProcess, simple command, default args.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen(['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input=None).AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess(['cmd'])) self.mox.VerifyAll()
def testPrivateRunProcessWithTimeoutAndWaitforWhenTimingOut(self): """Test _RunProcess with a timeout and waitfor that times out.""" self.StubSetup() self.mox.StubOutWithMock(gmacpyutil, 'SetFileNonBlocking') self.mox.StubOutWithMock(gmacpyutil.os, 'kill') self.mox.StubOutWithMock(gmacpyutil.select, 'select') self.mox.StubOutWithMock(gmacpyutil.time, 'sleep') mock_env = self.mox.CreateMockAnything() mock_stderr = self.mox.CreateMockAnything() mock_stdout = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_task.stdout = mock_stdout mock_task.stderr = mock_stderr mock_task.returncode = None mock_task.pid = 123 mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen(['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) gmacpyutil.SetFileNonBlocking(mock_task.stdout).AndReturn(None) gmacpyutil.SetFileNonBlocking(mock_task.stderr).AndReturn(None) gmacpyutil.select.select([mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn((None, None, None)) gmacpyutil.select.select([mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn((None, None, None)) mock_task.poll().AndReturn(None) mock_task.poll().AndReturn(None) gmacpyutil.logging.error(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(None) gmacpyutil.logging.error(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(None) gmacpyutil.os.kill(mock_task.pid, gmacpyutil.signal.SIGTERM) gmacpyutil.time.sleep(1).AndReturn(None) self.mox.ReplayAll() self.assertEqual(('', '', None), gmacpyutil._RunProcess(['cmd'], timeout=2, waitfor=1)) self.mox.VerifyAll()
def testPrivateRunProcessWithTimeoutAndWaitforWhenTimingOut(self): """Test _RunProcess with a timeout and waitfor that times out.""" self.StubSetup() self.mox.StubOutWithMock(gmacpyutil, 'SetFileNonBlocking') self.mox.StubOutWithMock(gmacpyutil.os, 'kill') self.mox.StubOutWithMock(gmacpyutil.select, 'select') self.mox.StubOutWithMock(gmacpyutil.time, 'sleep') mock_env = self.mox.CreateMockAnything() mock_stderr = self.mox.CreateMockAnything() mock_stdout = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_task.stdout = mock_stdout mock_task.stderr = mock_stderr mock_task.returncode = None mock_task.pid = 123 mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen( ['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) gmacpyutil.SetFileNonBlocking(mock_task.stdout).AndReturn(None) gmacpyutil.SetFileNonBlocking(mock_task.stderr).AndReturn(None) gmacpyutil.select.select( [mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn( (None, None, None)) gmacpyutil.select.select( [mock_task.stdout, mock_task.stderr], [], [], 1.0).AndReturn( (None, None, None)) mock_task.poll().AndReturn(None) mock_task.poll().AndReturn(None) gmacpyutil.logging.error(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(None) gmacpyutil.logging.error(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(None) gmacpyutil.os.kill(mock_task.pid, gmacpyutil.signal.SIGTERM) gmacpyutil.time.sleep(1).AndReturn(None) self.mox.ReplayAll() self.assertEqual(('', '', None), gmacpyutil._RunProcess( ['cmd'], timeout=2, waitfor=1)) self.mox.VerifyAll()
def testPrivateRunProcessWithSudoAndSudoPassword(self): """Test _RunProcess, simple command, with sudo and sudo_password.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(mock_env) gmacpyutil.subprocess.Popen(['sudo', '-S', 'cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=mock_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input='password\n').AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual(('out', 'err', 0), gmacpyutil._RunProcess(['cmd'], sudo=True, sudo_password='******')) self.mox.VerifyAll()
def testPrivateRunProcessWithEnv(self): """Test _RunProcess, simple command, with env.""" self.StubSetup() mock_env = self.mox.CreateMockAnything() env_copy = {'foo': 'bar'} new_env = {'new': True} used_env = env_copy.copy() used_env.update(new_env) gmacpyutil.os.environ = mock_env gmacpyutil.subprocess.PIPE = 'pipe' mock_task = self.mox.CreateMockAnything() mock_env.copy().AndReturn(env_copy) gmacpyutil.subprocess.Popen( ['cmd'], stdout='pipe', stderr='pipe', stdin='pipe', env=used_env, cwd=None).AndReturn(mock_task) mock_task.communicate(input=None).AndReturn(('out', 'err')) mock_task.returncode = 0 self.mox.ReplayAll() self.assertEqual( ('out', 'err', 0), gmacpyutil._RunProcess(['cmd'], env={'new': True})) self.mox.VerifyAll()
def testRunProcessInBackground(self): self.mox.StubOutWithMock(gmacpyutil, '_RunProcess') gmacpyutil._RunProcess(['cmd'], background=True) self.mox.ReplayAll() gmacpyutil.RunProcessInBackground(['cmd']) self.mox.VerifyAll()
def testPrivateRunProcessErrorTimeoutAndBackground(self): """Test _RunProcess fails with timeout and background set.""" self.mox.ReplayAll() with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'], background=True, timeout=1) self.mox.VerifyAll()
def testPrivateRunProcessErrorTimeoutAndStreamOutput(self): """Test _RunProcess fails with timeout and stream_output set.""" self.mox.ReplayAll() with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'], stream_output=True, timeout=1) self.mox.VerifyAll()
def testPrivateRunProcessErrorTimeoutIsNegative(self): """Test _RunProcess fails if timeout is negative.""" self.mox.ReplayAll() with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'], timeout=-1) self.mox.VerifyAll()
def testPrivateRunProcessErrorWaitforWithoutTimeout(self): """Test _RunProcess fails if waitfor is set without timeout.""" self.mox.ReplayAll() with self.assertRaises(gmacpyutil.GmacpyutilException): gmacpyutil._RunProcess(['cmd'], waitfor=1) self.mox.VerifyAll()