137 lines
4.1 KiB
Python
Executable file
137 lines
4.1 KiB
Python
Executable file
#!/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()
|