普通文本  |  113行  |  3.86 KB

#!/usr/bin/python

import unittest
import common

from autotest_lib.client.common_lib import global_config
from autotest_lib.client.common_lib.test_utils import mock
from autotest_lib.server import utils
from autotest_lib.server.hosts import base_classes, bootloader


class test_host_class(unittest.TestCase):
    def setUp(self):
        self.god = mock.mock_god()
        # stub out get_server_dir, global_config.get_config_value
        self.god.stub_with(utils, "get_server_dir",
                           lambda: "/unittest/server")
        self.god.stub_function(global_config.global_config,
                               "get_config_value")
        # stub out the bootloader
        self.real_bootloader = bootloader.Bootloader
        bootloader.Bootloader = lambda arg: object()


    def tearDown(self):
        self.god.unstub_all()
        bootloader.Bootloader = self.real_bootloader


    def test_init(self):
        self.god.stub_function(utils, "get_server_dir")
        host = base_classes.Host.__new__(base_classes.Host)
        bootloader.Bootloader = \
                self.god.create_mock_class_obj(self.real_bootloader,
                                               "Bootloader")
        # overwrite this attribute as it's irrelevant for these tests
        # and may cause problems with construction of the mock
        bootloader.Bootloader.boottool_path = None
        # set up the recording
        utils.get_server_dir.expect_call().and_return("/unittest/server")
        bootloader.Bootloader.expect_new(host)
        # run the actual test
        host.__init__()
        self.god.check_playback()


    def test_install(self):
        host = base_classes.Host()
        # create a dummy installable class
        class installable(object):
            def install(self, host):
                pass
        installableObj = self.god.create_mock_class(installable,
                                                    "installableObj")
        installableObj.install.expect_call(host)
        # run the actual test
        host.install(installableObj)
        self.god.check_playback()


    def test_get_wait_up_empty(self):
        global_config.global_config.get_config_value.expect_call(
            "HOSTS", "wait_up_processes", default="").and_return("")

        host = base_classes.Host()
        self.assertEquals(host.get_wait_up_processes(), set())
        self.god.check_playback()


    def test_get_wait_up_ignores_whitespace(self):
        global_config.global_config.get_config_value.expect_call(
            "HOSTS", "wait_up_processes", default="").and_return("  ")

        host = base_classes.Host()
        self.assertEquals(host.get_wait_up_processes(), set())
        self.god.check_playback()


    def test_get_wait_up_single_process(self):
        global_config.global_config.get_config_value.expect_call(
            "HOSTS", "wait_up_processes", default="").and_return("proc1")

        host = base_classes.Host()
        self.assertEquals(host.get_wait_up_processes(),
                          set(["proc1"]))
        self.god.check_playback()


    def test_get_wait_up_multiple_process(self):
        global_config.global_config.get_config_value.expect_call(
            "HOSTS", "wait_up_processes", default="").and_return(
            "proc1,proc2,proc3")

        host = base_classes.Host()
        self.assertEquals(host.get_wait_up_processes(),
                          set(["proc1", "proc2", "proc3"]))
        self.god.check_playback()


    def test_get_wait_up_drops_duplicates(self):
        global_config.global_config.get_config_value.expect_call(
            "HOSTS", "wait_up_processes", default="").and_return(
            "proc1,proc2,proc1")

        host = base_classes.Host()
        self.assertEquals(host.get_wait_up_processes(),
                          set(["proc1", "proc2"]))
        self.god.check_playback()


if __name__ == "__main__":
    unittest.main()