server/autotest.py: Refactor code for site modification
[autotest-zwu.git] / client / setup_modules_unittest.py
blobf017375daafad4200bd904b85e953fd6826715f8
1 #!/usr/bin/python
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
7 import setup_modules
10 class LoggingErrorStderrTests(unittest.TestCase):
11 def setUp(self):
12 autotest_dir = os.path.abspath(os.path.join(setup_modules.dirname,
13 '..'))
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
24 def tearDown(self):
25 self.god.unstub_all()
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)
39 try:
40 raise RuntimeError('Exception context needed for the test.')
41 except RuntimeError:
42 setup_modules._autotest_logging_handle_error(logging.Handler(),
43 record)
44 else:
45 self.fail()
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),
52 stderr_repr)
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__":
78 unittest.main()