xref: /aosp_15_r20/external/autotest/client/setup_modules_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li
3*9c5db199SXin Liimport logging, os, sys, unittest
4*9c5db199SXin Lifrom six.moves import StringIO
5*9c5db199SXin Li
6*9c5db199SXin Li# direct imports; autotest_lib has not been setup while testing this.
7*9c5db199SXin Lifrom client.common_lib.test_utils import mock
8*9c5db199SXin Lifrom client import setup_modules
9*9c5db199SXin Li
10*9c5db199SXin Li
11*9c5db199SXin Liclass LoggingErrorStderrTests(unittest.TestCase):
12*9c5db199SXin Li    """Test the setup_modules."""
13*9c5db199SXin Li
14*9c5db199SXin Li    def setUp(self):
15*9c5db199SXin Li        autotest_dir = os.path.abspath(os.path.join(setup_modules.dirname,
16*9c5db199SXin Li                                                    '..'))
17*9c5db199SXin Li        setup_modules.setup(autotest_dir, root_module_name='autotest_lib')
18*9c5db199SXin Li        self.god = mock.mock_god()
19*9c5db199SXin Li        self.test_stderr = StringIO()
20*9c5db199SXin Li        self.god.stub_with(sys, 'stderr', self.test_stderr)
21*9c5db199SXin Li        self.old_root_logging_level = logging.root.level
22*9c5db199SXin Li        logging.basicConfig(level=logging.ERROR)
23*9c5db199SXin Li        # _autotest_logging_handle_error unsets this after being called once.
24*9c5db199SXin Li        logging.raiseExceptions = 1
25*9c5db199SXin Li
26*9c5db199SXin Li    def tearDown(self):
27*9c5db199SXin Li        self.god.unstub_all()
28*9c5db199SXin Li        # Undo the setUp logging.basicConfig call.
29*9c5db199SXin Li        logging.basicConfig(level=self.old_root_logging_level)
30*9c5db199SXin Li
31*9c5db199SXin Li    def assert_autotest_logging_handle_error_called(self):
32*9c5db199SXin Li        self.stderr_str = self.test_stderr.getvalue()
33*9c5db199SXin Li        self.assertTrue('Exception occurred formatting' in self.stderr_str,
34*9c5db199SXin Li                        repr(self.stderr_str))
35*9c5db199SXin Li
36*9c5db199SXin Li    def test_autotest_logging_handle_error(self):
37*9c5db199SXin Li        record = logging.LogRecord(
38*9c5db199SXin Li                'test', logging.DEBUG, __file__, 0, 'MESSAGE', 'ARGS', None)
39*9c5db199SXin Li        try:
40*9c5db199SXin Li            raise RuntimeError('Exception context needed for the test.')
41*9c5db199SXin Li        except RuntimeError:
42*9c5db199SXin Li            setup_modules._autotest_logging_handle_error(logging.Handler(),
43*9c5db199SXin Li                                                         record)
44*9c5db199SXin Li        else:
45*9c5db199SXin Li            self.fail()
46*9c5db199SXin Li        self.assert_autotest_logging_handle_error_called()
47*9c5db199SXin Li        stderr_repr = repr(self.stderr_str)
48*9c5db199SXin Li        self.assertTrue(('MESSAGE' in self.stderr_str), stderr_repr)
49*9c5db199SXin Li        self.assertTrue(('ARGS' in self.stderr_str), stderr_repr)
50*9c5db199SXin Li        self.assertTrue(('Exception' in self.stderr_str), stderr_repr)
51*9c5db199SXin Li        self.assertTrue(('setup_modules_unittest.py' in self.stderr_str),
52*9c5db199SXin Li                        stderr_repr)
53*9c5db199SXin Li        self.assertTrue(('disabled.\n' in self.stderr_str), stderr_repr)
54*9c5db199SXin Li        # Make sure this was turned off by our handle_error.
55*9c5db199SXin Li        self.assertFalse(logging.raiseExceptions)
56*9c5db199SXin Li
57*9c5db199SXin Li    def test_logging_monkey_patch_wrong_number_of_args(self):
58*9c5db199SXin Li        logging.error('logging unittest %d %s', 32)
59*9c5db199SXin Li        self.assert_autotest_logging_handle_error_called()
60*9c5db199SXin Li        self.assertTrue('logging unittest' in self.stderr_str,
61*9c5db199SXin Li                        repr(self.stderr_str))
62*9c5db199SXin Li
63*9c5db199SXin Li    def test_logging_monkey_patch_wrong_type_of_arg(self):
64*9c5db199SXin Li        logging.error('logging unittest %d', 'eighteen')
65*9c5db199SXin Li        self.assert_autotest_logging_handle_error_called()
66*9c5db199SXin Li        self.assertTrue('logging unittest' in self.stderr_str,
67*9c5db199SXin Li                        repr(self.stderr_str))
68*9c5db199SXin Li
69*9c5db199SXin Li    def test_logging_no_error(self):
70*9c5db199SXin Li        logging.error('logging unittest.  %s %s', 'meep', 'meep!')
71*9c5db199SXin Li        self.assertEqual('', self.test_stderr.getvalue())
72*9c5db199SXin Li
73*9c5db199SXin Li
74*9c5db199SXin Liif __name__ == "__main__":
75*9c5db199SXin Li    unittest.main()
76