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")
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)