| #!/usr/bin/python |
| |
| """Tests for drone_utility.""" |
| |
| import os, sys, unittest |
| from cStringIO import StringIO |
| |
| import common |
| from autotest_lib.client.common_lib import global_config |
| from autotest_lib.client.common_lib.test_utils import mock |
| from autotest_lib.scheduler import drone_utility |
| |
| |
| class TestDroneUtility(unittest.TestCase): |
| def setUp(self): |
| self.drone_utility = drone_utility.DroneUtility() |
| self._fake_command = '!faketest!' |
| self._fake_proc_info = {'pid': 3, 'pgid': 4, 'ppid': 2, |
| 'comm': self._fake_command, 'args': ''} |
| self.god = mock.mock_god() |
| self.god.stub_function(self.drone_utility, '_get_process_info') |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| global_config.global_config.reset_config_values() |
| |
| |
| @staticmethod |
| def _set_check_dark_mark(value): |
| global_config.global_config.override_config_value( |
| 'SCHEDULER', 'check_processes_for_dark_mark', repr(value)) |
| |
| |
| def test_refresh_processes_ignore_dark_mark(self): |
| self._set_check_dark_mark(False) |
| self.drone_utility._get_process_info.expect_call().and_return( |
| [self._fake_proc_info]) |
| fake_open = lambda path, mode: self.fail('dark mark checked!') |
| processes = self.drone_utility._refresh_processes(self._fake_command, |
| open=fake_open) |
| our_pid = self._fake_proc_info['pid'] |
| for process in processes: |
| if our_pid == process['pid']: |
| break |
| else: |
| self.fail("No %s processes found" % self._fake_command) |
| self.god.check_playback() |
| |
| |
| def test_refresh_processes_check_dark_mark(self): |
| self._set_check_dark_mark(True) |
| num_procs = 2 |
| proc_info_list = num_procs * [self._fake_proc_info] |
| |
| self.drone_utility._get_process_info.expect_call().and_return( |
| proc_info_list) |
| # Test processes that have the mark in their env. |
| def _open_mark(path, mode): |
| return StringIO('foo=\0%s=\0bar=\0' % |
| drone_utility.DARK_MARK_ENVIRONMENT_VAR) |
| processes = self.drone_utility._refresh_processes(self._fake_command, |
| open=_open_mark) |
| self.assertEqual(num_procs, len(processes)) |
| self.assertEqual(proc_info_list, processes) |
| |
| self.drone_utility._get_process_info.expect_call().and_return( |
| proc_info_list) |
| # Test processes that do not have the mark in their env |
| def _open_nomark(path, mode): |
| return StringIO('foo=\0bar=\0') # No dark mark. |
| processes = self.drone_utility._refresh_processes(self._fake_command, |
| open=_open_nomark) |
| self.assertEqual([], processes) |
| self.god.check_playback() |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |