3 import cStringIO
, logging
, os
, sys
, unittest
5 # direct imports; autotest_lib has not been setup while testing this.
6 from common_lib
.test_utils
import mock
10 class LoggingErrorStderrTests(unittest
.TestCase
):
12 autotest_dir
= os
.path
.abspath(os
.path
.join(setup_modules
.dirname
,
14 setup_modules
.setup(autotest_dir
, root_module_name
='autotest_lib')
15 self
.god
= mock
.mock_god()
16 self
.test_stderr
= cStringIO
.StringIO()
17 self
.god
.stub_with(sys
, 'stderr', self
.test_stderr
)
18 self
.old_root_logging_level
= logging
.root
.level
19 logging
.basicConfig(level
=logging
.ERROR
)
20 # _autotest_logging_handle_error unsets this after being called once.
21 logging
.raiseExceptions
= 1
26 # Undo the setUp logging.basicConfig call.
27 logging
.basicConfig(level
=self
.old_root_logging_level
)
30 def assert_autotest_logging_handle_error_called(self
):
31 self
.stderr_str
= self
.test_stderr
.getvalue()
32 self
.assertTrue('Exception occurred formatting' in self
.stderr_str
,
33 repr(self
.stderr_str
))
36 def test_autotest_logging_handle_error(self
):
37 record
= logging
.LogRecord(
38 'test', logging
.DEBUG
, __file__
, 0, 'MESSAGE', 'ARGS', None)
40 raise RuntimeError('Exception context needed for the test.')
42 setup_modules
._autotest
_logging
_handle
_error
(logging
.Handler(),
46 self
.assert_autotest_logging_handle_error_called()
47 stderr_repr
= repr(self
.stderr_str
)
48 self
.assertTrue(('MESSAGE' in self
.stderr_str
), stderr_repr
)
49 self
.assertTrue(('ARGS' in self
.stderr_str
), stderr_repr
)
50 self
.assertTrue(('Exception' in self
.stderr_str
), stderr_repr
)
51 self
.assertTrue(('setup_modules_unittest.py' in self
.stderr_str
),
53 self
.assertTrue(('disabled.\n' in self
.stderr_str
), stderr_repr
)
54 # Make sure this was turned off by our handle_error.
55 self
.assertFalse(logging
.raiseExceptions
)
58 def test_logging_monkey_patch_wrong_number_of_args(self
):
59 logging
.error('logging unittest %d %s', 32)
60 self
.assert_autotest_logging_handle_error_called()
61 self
.assertTrue('logging unittest' in self
.stderr_str
,
62 repr(self
.stderr_str
))
65 def test_logging_monkey_patch_wrong_type_of_arg(self
):
66 logging
.error('logging unittest %d', 'eighteen')
67 self
.assert_autotest_logging_handle_error_called()
68 self
.assertTrue('logging unittest' in self
.stderr_str
,
69 repr(self
.stderr_str
))
72 def test_logging_no_error(self
):
73 logging
.error('logging unittest. %s %s', 'meep', 'meep!')
74 self
.assertEqual('', self
.test_stderr
.getvalue())
77 if __name__
== "__main__":