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