#!/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()