97 lines
3.2 KiB
Python
Executable file
97 lines
3.2 KiB
Python
Executable file
#!/usr/bin/python
|
|
|
|
import unittest, os
|
|
import common
|
|
|
|
from autotest_lib.client.common_lib.test_utils import mock
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.server import utils, hosts
|
|
from autotest_lib.server.hosts import bootloader
|
|
|
|
|
|
class test_bootloader(unittest.TestCase):
|
|
def setUp(self):
|
|
self.god = mock.mock_god()
|
|
|
|
# mock out get_server_dir
|
|
self.god.stub_function(utils, "get_server_dir")
|
|
|
|
|
|
def tearDown(self):
|
|
self.god.unstub_all()
|
|
|
|
|
|
def create_mock_host(self):
|
|
# useful for building disposable RemoteHost mocks
|
|
return self.god.create_mock_class(hosts.RemoteHost, "host")
|
|
|
|
|
|
def create_install_boottool_mock(self, loader, dst_dir):
|
|
mock_install_boottool = \
|
|
self.god.create_mock_function("_install_boottool")
|
|
def install_boottool():
|
|
loader._boottool_path = dst_dir
|
|
mock_install_boottool()
|
|
loader._install_boottool = install_boottool
|
|
return mock_install_boottool
|
|
|
|
|
|
def test_install_fails_without_host(self):
|
|
host = self.create_mock_host()
|
|
loader = bootloader.Bootloader(host)
|
|
del host
|
|
self.assertRaises(error.AutoservError, loader._install_boottool)
|
|
|
|
|
|
def test_installs_to_tmpdir(self):
|
|
TMPDIR = "/unittest/tmp"
|
|
SERVERDIR = "/unittest/server"
|
|
BOOTTOOL_SRC = os.path.join(SERVERDIR, bootloader.BOOTTOOL_SRC)
|
|
BOOTTOOL_SRC = os.path.abspath(BOOTTOOL_SRC)
|
|
BOOTTOOL_DST = os.path.join(TMPDIR, "boottool")
|
|
# set up the recording
|
|
host = self.create_mock_host()
|
|
host.get_tmp_dir.expect_call().and_return(TMPDIR)
|
|
utils.get_server_dir.expect_call().and_return(SERVERDIR)
|
|
host.send_file.expect_call(BOOTTOOL_SRC, TMPDIR)
|
|
# run the test
|
|
loader = bootloader.Bootloader(host)
|
|
loader._install_boottool()
|
|
# assert the playback is correct
|
|
self.god.check_playback()
|
|
# assert the final dest is correct
|
|
self.assertEquals(loader._boottool_path, BOOTTOOL_DST)
|
|
|
|
|
|
def test_get_path_automatically_installs(self):
|
|
BOOTTOOL_DST = "/unittest/tmp/boottool"
|
|
host = self.create_mock_host()
|
|
loader = bootloader.Bootloader(host)
|
|
# mock out loader.install_boottool
|
|
mock_install = \
|
|
self.create_install_boottool_mock(loader, BOOTTOOL_DST)
|
|
# set up the recording
|
|
mock_install.expect_call()
|
|
# run the test
|
|
self.assertEquals(loader._get_boottool_path(), BOOTTOOL_DST)
|
|
self.god.check_playback()
|
|
|
|
|
|
def test_install_is_only_called_once(self):
|
|
BOOTTOOL_DST = "/unittest/tmp/boottool"
|
|
host = self.create_mock_host()
|
|
loader = bootloader.Bootloader(host)
|
|
# mock out loader.install_boottool
|
|
mock_install = \
|
|
self.create_install_boottool_mock(loader, BOOTTOOL_DST)
|
|
# set up the recording
|
|
mock_install.expect_call()
|
|
# run the test
|
|
self.assertEquals(loader._get_boottool_path(), BOOTTOOL_DST)
|
|
self.god.check_playback()
|
|
self.assertEquals(loader._get_boottool_path(), BOOTTOOL_DST)
|
|
self.god.check_playback()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|