1#!/usr/bin/python3 2 3import logging, os, sys, unittest 4from six.moves import StringIO 5 6# direct imports; autotest_lib has not been setup while testing this. 7from client.common_lib.test_utils import mock 8from client import setup_modules 9 10 11class LoggingErrorStderrTests(unittest.TestCase): 12 """Test the setup_modules.""" 13 14 def setUp(self): 15 autotest_dir = os.path.abspath(os.path.join(setup_modules.dirname, 16 '..')) 17 setup_modules.setup(autotest_dir, root_module_name='autotest_lib') 18 self.god = mock.mock_god() 19 self.test_stderr = StringIO() 20 self.god.stub_with(sys, 'stderr', self.test_stderr) 21 self.old_root_logging_level = logging.root.level 22 logging.basicConfig(level=logging.ERROR) 23 # _autotest_logging_handle_error unsets this after being called once. 24 logging.raiseExceptions = 1 25 26 def tearDown(self): 27 self.god.unstub_all() 28 # Undo the setUp logging.basicConfig call. 29 logging.basicConfig(level=self.old_root_logging_level) 30 31 def assert_autotest_logging_handle_error_called(self): 32 self.stderr_str = self.test_stderr.getvalue() 33 self.assertTrue('Exception occurred formatting' in self.stderr_str, 34 repr(self.stderr_str)) 35 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) 56 57 def test_logging_monkey_patch_wrong_number_of_args(self): 58 logging.error('logging unittest %d %s', 32) 59 self.assert_autotest_logging_handle_error_called() 60 self.assertTrue('logging unittest' in self.stderr_str, 61 repr(self.stderr_str)) 62 63 def test_logging_monkey_patch_wrong_type_of_arg(self): 64 logging.error('logging unittest %d', 'eighteen') 65 self.assert_autotest_logging_handle_error_called() 66 self.assertTrue('logging unittest' in self.stderr_str, 67 repr(self.stderr_str)) 68 69 def test_logging_no_error(self): 70 logging.error('logging unittest. %s %s', 'meep', 'meep!') 71 self.assertEqual('', self.test_stderr.getvalue()) 72 73 74if __name__ == "__main__": 75 unittest.main() 76