xref: /aosp_15_r20/external/autotest/server/server_job_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Li
3*9c5db199SXin Liimport os
4*9c5db199SXin Liimport tempfile
5*9c5db199SXin Liimport unittest
6*9c5db199SXin Li
7*9c5db199SXin Liimport common
8*9c5db199SXin Lifrom autotest_lib.server import server_job
9*9c5db199SXin Lifrom autotest_lib.client.common_lib import base_job_unittest
10*9c5db199SXin Lifrom autotest_lib.client.common_lib.test_utils import mock
11*9c5db199SXin Li
12*9c5db199SXin Li
13*9c5db199SXin Liclass test_find_base_directories(
14*9c5db199SXin Li        unittest.TestCase,
15*9c5db199SXin Li        base_job_unittest.test_find_base_directories.generic_tests):
16*9c5db199SXin Li
17*9c5db199SXin Li    def setUp(self):
18*9c5db199SXin Li        self.job = server_job.server_job.__new__(server_job.server_job)
19*9c5db199SXin Li
20*9c5db199SXin Li
21*9c5db199SXin Li    def test_relative_path_layout(self):
22*9c5db199SXin Li        existing_file = server_job.__file__
23*9c5db199SXin Li        server_job.__file__ = '/rootdir/atest/server/server_job.py'
24*9c5db199SXin Li        try:
25*9c5db199SXin Li            autodir, clientdir, serverdir = (
26*9c5db199SXin Li                self.job._find_base_directories())
27*9c5db199SXin Li            self.assertEqual(autodir, '/rootdir/atest')
28*9c5db199SXin Li            self.assertEqual(clientdir, '/rootdir/atest/client')
29*9c5db199SXin Li            self.assertEqual(serverdir, '/rootdir/atest/server')
30*9c5db199SXin Li        finally:
31*9c5db199SXin Li            server_job.__file__ = existing_file
32*9c5db199SXin Li
33*9c5db199SXin Li
34*9c5db199SXin Liclass test_init(base_job_unittest.test_init.generic_tests, unittest.TestCase):
35*9c5db199SXin Li    OPTIONAL_ATTRIBUTES = (
36*9c5db199SXin Li        base_job_unittest.test_init.generic_tests.OPTIONAL_ATTRIBUTES
37*9c5db199SXin Li        - set(['serverdir', 'num_tests_run', 'num_tests_failed',
38*9c5db199SXin Li               'warning_manager', 'warning_loggers', 'in_lab']))
39*9c5db199SXin Li
40*9c5db199SXin Li    def setUp(self):
41*9c5db199SXin Li        self.god = mock.mock_god()
42*9c5db199SXin Li        self.job = server_job.server_job.__new__(
43*9c5db199SXin Li            server_job.server_job)
44*9c5db199SXin Li        self.job._job_directory = base_job_unittest.stub_job_directory
45*9c5db199SXin Li        _, self.control_file = tempfile.mkstemp()
46*9c5db199SXin Li
47*9c5db199SXin Li    def tearDown(self):
48*9c5db199SXin Li        """Cleanup the test control file."""
49*9c5db199SXin Li        os.remove(self.control_file)
50*9c5db199SXin Li
51*9c5db199SXin Li    def call_init(self):
52*9c5db199SXin Li        # TODO(jadmanski): refactor more of the __init__ code to not need to
53*9c5db199SXin Li        # stub out countless random APIs
54*9c5db199SXin Li        self.god.stub_with(server_job.os, 'mkdir', lambda p: None)
55*9c5db199SXin Li        class manager:
56*9c5db199SXin Li            pass
57*9c5db199SXin Li        self.god.stub_with(server_job.logging_manager, 'get_logging_manager',
58*9c5db199SXin Li                           lambda *a,**k: manager())
59*9c5db199SXin Li        class sysi:
60*9c5db199SXin Li            log_per_reboot_data = lambda self: None
61*9c5db199SXin Li        self.god.stub_with(
62*9c5db199SXin Li                server_job.sysinfo, 'sysinfo', lambda r, version=None: sysi())
63*9c5db199SXin Li
64*9c5db199SXin Li        self.job.__init__(
65*9c5db199SXin Li                self.control_file,
66*9c5db199SXin Li                (),
67*9c5db199SXin Li                None,
68*9c5db199SXin Li                'job_label',
69*9c5db199SXin Li                'auser',
70*9c5db199SXin Li                ['mach1', 'mach2'],
71*9c5db199SXin Li                [
72*9c5db199SXin Li                        {'hostname': 'mach1'},  # Incomplete machine_dict.
73*9c5db199SXin Li                        {'hostname': 'mach2'},  # Incomplete machine_dict.
74*9c5db199SXin Li                ],
75*9c5db199SXin Li        )
76*9c5db199SXin Li        self.god.unstub_all()
77*9c5db199SXin Li
78*9c5db199SXin Li
79*9c5db199SXin Liclass WarningManagerTest(unittest.TestCase):
80*9c5db199SXin Li    def test_never_disabled(self):
81*9c5db199SXin Li        manager = server_job.warning_manager()
82*9c5db199SXin Li        self.assertEqual(manager.is_valid(10, "MSGTYPE"), True)
83*9c5db199SXin Li
84*9c5db199SXin Li
85*9c5db199SXin Li    def test_only_enabled(self):
86*9c5db199SXin Li        manager = server_job.warning_manager()
87*9c5db199SXin Li        manager.enable_warnings("MSGTYPE", lambda: 10)
88*9c5db199SXin Li        self.assertEqual(manager.is_valid(20, "MSGTYPE"), True)
89*9c5db199SXin Li
90*9c5db199SXin Li
91*9c5db199SXin Li    def test_disabled_once(self):
92*9c5db199SXin Li        manager = server_job.warning_manager()
93*9c5db199SXin Li        manager.disable_warnings("MSGTYPE", lambda: 10)
94*9c5db199SXin Li        self.assertEqual(manager.is_valid(5, "MSGTYPE"), True)
95*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE"), False)
96*9c5db199SXin Li
97*9c5db199SXin Li
98*9c5db199SXin Li    def test_disable_and_enabled(self):
99*9c5db199SXin Li        manager = server_job.warning_manager()
100*9c5db199SXin Li        manager.disable_warnings("MSGTYPE", lambda: 10)
101*9c5db199SXin Li        manager.enable_warnings("MSGTYPE", lambda: 20)
102*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE"), False)
103*9c5db199SXin Li        self.assertEqual(manager.is_valid(25, "MSGTYPE"), True)
104*9c5db199SXin Li
105*9c5db199SXin Li
106*9c5db199SXin Li    def test_disabled_changes_is_valid(self):
107*9c5db199SXin Li        manager = server_job.warning_manager()
108*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE"), True)
109*9c5db199SXin Li        manager.disable_warnings("MSGTYPE", lambda: 10)
110*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE"), False)
111*9c5db199SXin Li
112*9c5db199SXin Li
113*9c5db199SXin Li    def test_multiple_disabled_calls(self):
114*9c5db199SXin Li        manager = server_job.warning_manager()
115*9c5db199SXin Li        manager.disable_warnings("MSGTYPE", lambda: 10)
116*9c5db199SXin Li        manager.disable_warnings("MSGTYPE", lambda: 20)
117*9c5db199SXin Li        manager.enable_warnings("MSGTYPE", lambda: 30)
118*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE"), False)
119*9c5db199SXin Li        self.assertEqual(manager.is_valid(25, "MSGTYPE"), False)
120*9c5db199SXin Li        self.assertEqual(manager.is_valid(35, "MSGTYPE"), True)
121*9c5db199SXin Li
122*9c5db199SXin Li
123*9c5db199SXin Li    def test_multiple_types(self):
124*9c5db199SXin Li        manager = server_job.warning_manager()
125*9c5db199SXin Li        manager.disable_warnings("MSGTYPE1", lambda: 10)
126*9c5db199SXin Li        manager.disable_warnings("MSGTYPE2", lambda: 20)
127*9c5db199SXin Li        manager.enable_warnings("MSGTYPE2", lambda: 30)
128*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE1"), False)
129*9c5db199SXin Li        self.assertEqual(manager.is_valid(15, "MSGTYPE2"), True)
130*9c5db199SXin Li        self.assertEqual(manager.is_valid(25, "MSGTYPE1"), False)
131*9c5db199SXin Li        self.assertEqual(manager.is_valid(25, "MSGTYPE2"), False)
132*9c5db199SXin Li        self.assertEqual(manager.is_valid(35, "MSGTYPE1"), False)
133*9c5db199SXin Li        self.assertEqual(manager.is_valid(35, "MSGTYPE2"), True)
134*9c5db199SXin Li
135*9c5db199SXin Li
136*9c5db199SXin Liif __name__ == "__main__":
137*9c5db199SXin Li    unittest.main()
138