Mercurial > treepkg
annotate test/test_run.py @ 310:26c15a0f0e52
When stopping because of an error, do not raise the exception again as
it leads to confusing double tracebacks in the log. Instead, simply log
the reason for the stopping and stop in the same way a stop instruction
is handled.
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Wed, 02 Dec 2009 14:46:37 +0000 |
parents | e3ab8aca2b08 |
children |
rev | line source |
---|---|
123
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
1 # Copyright (C) 2008 by Intevation GmbH |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
2 # Authors: |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
3 # Bernhard Herzog <bh@intevation.de> |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
4 # |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
5 # This program is free software under the GPL (>=v2) |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
6 # Read the file COPYING coming with the software for details. |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
7 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
8 """Tests for treepkg.run""" |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
9 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
10 import sys |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
11 import os |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
12 import unittest |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
13 |
193
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
14 from filesupport import FileTestMixin |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
15 |
165
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
16 from treepkg.run import call, capture_output, SubprocessError |
123
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
17 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
18 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
19 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
20 class TestCall(unittest.TestCase): |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
21 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
22 def test_call_defaults(self): |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
23 call([sys.executable, "-c", "pass"]) |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
24 |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
25 def test_call_error(self): |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
26 """Test call with a subprocess that exits with a non-zero exit code""" |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
27 try: |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
28 call([sys.executable, "-c", "import sys; sys.exit(1)"]) |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
29 except SubprocessError, exc: |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
30 self.assertEquals(exc.returncode, 1) |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
31 else: |
37aadd33ffab
Add tests for treepkg/run.py
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
32 self.fail("call did not raise an exception") |
124
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
33 |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
34 def test_call_extra_env(self): |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
35 """Test call with the extra_env parameter""" |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
36 subprocess_cmd = [sys.executable, "-c", |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
37 "import sys, os;" |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
38 "value = os.environ.get('TREEPKG_TEST');" |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
39 "sys.exit(int(value != 'xyzzy'))" |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
40 ] |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
41 # sanity check that the extra environment variable we use for |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
42 # the test is not set yet |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
43 self.assertRaises(SubprocessError, call, subprocess_cmd) |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
44 |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
45 # the actual test |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
46 try: |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
47 call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy")) |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
48 except SubprocessError, exc: |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
49 self.fail("the extra_env variables were not set properly") |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
50 else: |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
51 # test OK |
e08b4b09d35f
New parameter treepkg.run.call: extra_env for additional environment
Bernhard Herzog <bh@intevation.de>
parents:
123
diff
changeset
|
52 pass |
164
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
53 |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
54 def test_call_inputdata(self): |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
55 """Test call with inputdata passed to the subprocesses stdin""" |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
56 # FIXME: If the feature being tested is not implemented |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
57 # properly, it's likely that the subprocess will wait |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
58 # indefinitely waiting for input. |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
59 data = "1" |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
60 subprocess_cmd = [sys.executable, "-c", |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
61 "import sys; sys.exit(int(raw_input("")))"] |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
62 try: |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
63 call(subprocess_cmd, inputdata=data) |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
64 except SubprocessError, exc: |
a68a4e22549c
Extend treepkg.run.call so that data can be fed to stdin of the subprocess.
Bernhard Herzog <bh@intevation.de>
parents:
124
diff
changeset
|
65 self.assertEquals(exc.returncode, 1) |
165
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
66 |
193
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
67 |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
68 class TestRunWithLogging(unittest.TestCase, FileTestMixin): |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
69 |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
70 def test_run_with_logfile(self): |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
71 logfilename = self.temp_file_name("logfile") |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
72 call([sys.executable, "-c", "print \"I'm a lumber jack and I'm OK\""], |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
73 logfile=logfilename) |
195
e3ab8aca2b08
Make filesupport.py more PEP8 conformant. Rename method
Bernhard Herzog <bh@intevation.de>
parents:
193
diff
changeset
|
74 self.check_file_contents(logfilename, "I'm a lumber jack and I'm OK\n") |
193
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
75 |
98de92b816d4
Add logfile argument to treepkg.run.call to log the output of the
Bernhard Herzog <bh@intevation.de>
parents:
165
diff
changeset
|
76 |
165
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
77 class TestCaptureOutput(unittest.TestCase): |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
78 |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
79 def test_capture_output_stdout(self): |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
80 text = "explicit is better than implicit" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
81 self.assertEquals(capture_output([sys.executable, "-c", |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
82 "print %r" % text]), |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
83 text + "\n") |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
84 |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
85 def test_capture_output_stderr(self): |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
86 self.assertEquals(capture_output([sys.executable, "-c", |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
87 "import sys;" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
88 "print 'on stdout';" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
89 " sys.stdout.flush();" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
90 "print >>sys.stderr, 'on stderr'"]), |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
91 "on stdout\non stderr\n") |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
92 |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
93 def test_capture_output_exception(self): |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
94 try: |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
95 capture_output([sys.executable, "-c", |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
96 "import sys;" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
97 "print 'Beautiful is better than ugly';" |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
98 " sys.exit(1)"]) |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
99 except SubprocessError, exc: |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
100 self.assertEquals(exc.returncode, 1) |
c7ac67366492
Make treepkg.run.capture_output include the output in the
Bernhard Herzog <bh@intevation.de>
parents:
164
diff
changeset
|
101 self.assertEquals(exc.output, "Beautiful is better than ugly\n") |