def test_del_(self): proc = Subcommand((sys.executable, '-c', Commands.sleep, '0.2'), wait=False) try: pid = proc.proc.pid self.assertIsNone(os.kill(pid, 0)) finally: proc.close() del proc try: self.assertRaises(OSError, os.kill, pid, 0) except AssertionError: #os.system('ps uwp %d' % pid) raise
def test_simple(self): proc = Subcommand( # should just return success (sys.executable, '-c', Commands.succeed), ) self.assertEqual(proc.returncode, 0) proc.close() proc = Subcommand( # should just return failure (sys.executable, '-c', Commands.fail), ) self.assertEqual(proc.returncode, 1) proc.close()
def test_wdir(self): import tempfile tmpdir = tempfile.gettempdir() fname = tempfile.mktemp() self.assertFalse(os.path.exists(fname)) proc = None try: proc = Subcommand((sys.executable, '-c', Commands.touch, os.path.basename(fname)), wdir=tmpdir) self.assertEqual(proc.returncode, 0) self.assertTrue(os.path.exists(fname)) finally: if proc is not None: proc.close() if os.path.exists(fname): os.remove(fname)
def test_signal(self): if self.platform == 'win': raise SkipTest('Broken OS') proc = Subcommand((sys.executable, '-c', Commands.sleep, '10'), wait=False) try: proc.terminate() self.assertIsNone(proc.returncode, None) proc.wait() self.assertLess(proc.returncode, 0) self.assertEqual(proc.returncode, -15) finally: proc.close()
def test_kill(self): if self.platform == 'win': raise SkipTest('Broken OS') proc = Subcommand((sys.executable, '-c', Commands.sleep, '0.2'), wait=False) try: self.assertIsNone(os.kill(proc.proc.pid, 0)) proc.kill() rc = proc.wait() self.assertLess(rc, 0) self.assertEqual(rc, -9) self.assertRaises(OSError, os.kill, proc.proc.pid, 0) finally: proc.close()
def test_stdout(self): contents = 'abcdefghijklmnopqrstuvwxyz0123456789\n' infile = self.dir + 'stdout.infile.txt' infile.open('wt').write(contents) outfile = self.dir + 'stdout.stdout.txt' proc = Subcommand((sys.executable, '-c', Commands.cat, str(infile)), stdout=str(outfile)) try: self.assertEqual(proc.returncode, 0) self.assertEqual(outfile.open('rt').read(), contents) finally: proc.close() outf = outfile.open('wt+') try: proc = Subcommand( (sys.executable, '-c', Commands.cat, str(infile)), stdout=outf) self.assertEqual(proc.returncode, 0) self.assertIs(proc.stdout, outf) outf.seek(0) self.assertEqual(outfile.open('rt').read(), contents) finally: outf.close() proc.close()
def test_close(self): touchfile = self.dir + 'close.touch.txt' infile = self.dir + 'close.stdin.txt' outfile = self.dir + 'close.stdout.txt' errfile = self.dir + 'close.stderr.txt' infile.open('wt') # just create the file proc = Subcommand( (sys.executable, '-c', Commands.touch, str(touchfile)), stdin=str(infile), stdout=str(outfile), stderr=str(errfile), wait=False, ) self.assertFalse(proc.stdin.closed) self.assertFalse(proc.stdout.closed) self.assertFalse(proc.stderr.closed) proc.wait() self.assertTrue(proc.stdin.closed) self.assertFalse(proc.stdout.closed) self.assertFalse(proc.stderr.closed) proc.close() self.assertIsNone(proc.stdin) self.assertIsNone(proc.stdout) self.assertIsNone(proc.stderr)
def test_exceptions(self): with self.assertRaises(Error): Subcommand(('/bin/programdoesnotexist', ))
def test_nowait(self): from time import sleep proc = Subcommand((sys.executable, '-c', Commands.sleep, '0.1'), wait=False) try: self.assertFalse(proc.poll()) sleep(0.2) self.assertTrue(proc.poll()) self.assertEqual(proc.returncode, 0) finally: proc.close() proc = Subcommand((sys.executable, '-c', Commands.sleep, '0.1'), wait=False) try: self.assertFalse(proc.poll()) rc = proc.wait() self.assertEqual(rc, proc.returncode) self.assertEqual(proc.returncode, 0) finally: proc.close()
def test_stderr(self): errfile = self.dir + 'stderr.stderr.txt' nonfile = self.dir + 'stderr.does-not-exist' proc = Subcommand((sys.executable, '-c', Commands.cat, nonfile), stderr=str(errfile)) errmsg = 'no such file or directory\n' try: self.assertGreater(proc.returncode, 0) self.assertEqual(errfile.open().read(), errmsg) finally: proc.close() errf = errfile.open('wt+') try: proc = Subcommand( (sys.executable, '-c', Commands.cat, str(nonfile)), stderr=errf) self.assertGreater(proc.returncode, 0) self.assertIs(proc.stderr, errf) errf.seek(0) self.assertEqual(errf.read(), errmsg) finally: errf.close() proc.close() proc = Subcommand((sys.executable, '-c', Commands.succeed), stderr=Subcommand.PIPE) try: self.assertEqual(proc.stderr, proc.proc.stderr) finally: proc.close()
def test_stdin(self): infile = self.dir + 'stdin.stdin.txt' infile.open('wt').write( 'Spam, Spam, Spam, Spam!\nWonderful spam, beautiful spam!\n') proc = Subcommand((sys.executable, '-c', Commands.wc), stdin=str(infile), stdout=Subcommand.PIPE) try: self.assertEqual(proc.returncode, 0) self.assertEqual(proc.stdout.read().decode('UTF-8').rstrip(), '56') finally: proc.close() inf = infile.open('rt') try: proc = Subcommand((sys.executable, '-c', Commands.wc), stdin=inf, stdout=Subcommand.PIPE) self.assertEqual(proc.returncode, 0) self.assertIs(proc.stdin, inf) self.assertEqual(proc.stdout.read().decode('UTF-8').strip(), '56') finally: proc.close() inf.close() proc = Subcommand((sys.executable, '-c', Commands.succeed), stdin=Subcommand.PIPE, stdout=Subcommand.PIPE) try: self.assertEqual(proc.stdin, proc.proc.stdin) finally: proc.close()
def test_subsequence(self): proc = Subcommand(((sys.executable, '-c', Commands.succeed), ), ) self.assertEqual(proc.cmd, (sys.executable, '-c', Commands.succeed)) proc.close()