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