| #!/usr/bin/python |
| |
| import os |
| import common |
| |
| from autotest_lib.client.common_lib.test_utils import mock, unittest |
| from autotest_lib.client.common_lib import autotemp |
| from autotest_lib.client.bin import local_host |
| |
| |
| class test_local_host_class(unittest.TestCase): |
| def setUp(self): |
| self.god = mock.mock_god() |
| self.god.stub_function(local_host.utils, 'run') |
| |
| self.tmpdir = autotemp.tempdir(unique_id='localhost_unittest') |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| self.tmpdir.clean() |
| |
| |
| def test_init(self): |
| self.god.stub_function(local_host.platform, 'node') |
| local_host.platform.node.expect_call().and_return('foo') |
| |
| # run the actual test |
| host = local_host.LocalHost() |
| self.assertEqual(host.hostname, 'foo') |
| self.god.check_playback() |
| |
| host = local_host.LocalHost(hostname='bar') |
| self.assertEqual(host.hostname, 'bar') |
| self.god.check_playback() |
| |
| |
| def test_wait_up(self): |
| # just test that wait_up always works |
| host = local_host.LocalHost() |
| host.wait_up(1) |
| self.god.check_playback() |
| |
| |
| def _setup_run(self, result): |
| host = local_host.LocalHost() |
| |
| (local_host.utils.run.expect_call(result.command, timeout=123, |
| ignore_status=True, stdout_tee=local_host.utils.TEE_TO_LOGS, |
| stderr_tee=local_host.utils.TEE_TO_LOGS, stdin=None, args=()) |
| .and_return(result)) |
| |
| return host |
| |
| |
| def test_run_success(self): |
| result = local_host.utils.CmdResult(command='yes', stdout='y', |
| stderr='', exit_status=0, duration=1) |
| |
| host = self._setup_run(result) |
| |
| self.assertEqual(host.run('yes', timeout=123, ignore_status=True, |
| stdout_tee=local_host.utils.TEE_TO_LOGS, |
| stderr_tee=local_host.utils.TEE_TO_LOGS, stdin=None), result) |
| self.god.check_playback() |
| |
| |
| def test_run_failure_raised(self): |
| result = local_host.utils.CmdResult(command='yes', stdout='', |
| stderr='err', exit_status=1, duration=1) |
| |
| host = self._setup_run(result) |
| |
| self.assertRaises(local_host.error.AutotestHostRunError, host.run, |
| 'yes', timeout=123) |
| self.god.check_playback() |
| |
| |
| def test_run_failure_ignored(self): |
| result = local_host.utils.CmdResult(command='yes', stdout='', |
| stderr='err', exit_status=1, duration=1) |
| |
| host = self._setup_run(result) |
| |
| self.assertEqual(host.run('yes', timeout=123, ignore_status=True), |
| result) |
| self.god.check_playback() |
| |
| |
| def test_list_files_glob(self): |
| host = local_host.LocalHost() |
| |
| files = (os.path.join(self.tmpdir.name, 'file1'), |
| os.path.join(self.tmpdir.name, 'file2')) |
| |
| # create some files in tmpdir |
| open(files[0], 'w').close() |
| open(files[1], 'w').close() |
| |
| self.assertSameElements( |
| files, |
| host.list_files_glob(os.path.join(self.tmpdir.name, '*'))) |
| |
| |
| def test_symlink_closure_does_not_add_existent_file(self): |
| host = local_host.LocalHost() |
| |
| # create a file and a symlink to it |
| fname = os.path.join(self.tmpdir.name, 'file') |
| sname = os.path.join(self.tmpdir.name, 'sym') |
| open(fname, 'w').close() |
| os.symlink(fname, sname) |
| |
| # test that when the symlinks point to already know files |
| # nothing is added |
| self.assertSameElements( |
| [fname, sname], |
| host.symlink_closure([fname, sname])) |
| |
| |
| def test_symlink_closure_adds_missing_files(self): |
| host = local_host.LocalHost() |
| |
| # create a file and a symlink to it |
| fname = os.path.join(self.tmpdir.name, 'file') |
| sname = os.path.join(self.tmpdir.name, 'sym') |
| open(fname, 'w').close() |
| os.symlink(fname, sname) |
| |
| # test that when the symlinks point to unknown files they are added |
| self.assertSameElements( |
| [fname, sname], |
| host.symlink_closure([sname])) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |