#!/usr/bin/python

import unittest
import common
from autotest_lib.client.common_lib.test_utils import mock
from autotest_lib.server import source_kernel, autotest, hosts


class TestSourceKernel(unittest.TestCase):
    def setUp(self):
        self.god = mock.mock_god()
        self.host = self.god.create_mock_class(hosts.RemoteHost, "host")
        self.god.stub_class(source_kernel.autotest, "Autotest")
        self.kernel_autotest = source_kernel.autotest.Autotest.expect_new()
        self.k = "kernel"
        self.source_kernel = source_kernel.SourceKernel(self.k)

        # call configure to set config_file
        self.config = "config_file"
        self.source_kernel.configure(self.config)


    def tearDown(self):
        self.god.unstub_all()


    def test_install(self):
        # setup
        ctlfile = ("testkernel = job.kernel('%s')\n"
                   "testkernel.install()\n"
                   "testkernel.add_to_bootloader()\n" %(self.k))

        # record
        self.kernel_autotest.install.expect_call(self.host)
        self.host.get_tmp_dir.expect_call().and_return("tmpdir")
        self.kernel_autotest.run.expect_call(ctlfile, "tmpdir", self.host)

        # run and check
        self.source_kernel.install(self.host)
        self.god.check_playback()


    def test_build(self):
        # setup
        patches = "patches"
        self.source_kernel.patch(patches)
        ctlfile = ("testkernel = job.kernel('%s')\n"
                   "testkernel.patch('%s')\n"
                   "testkernel.config('%s')\n"
                   "testkernel.build()\n" % (self.k, patches, self.config))

        # record
        self.host.get_tmp_dir.expect_call().and_return("tmpdir")
        self.kernel_autotest.run.expect_call(ctlfile, "tmpdir", self.host)

        # run and check
        self.source_kernel.build(self.host)
        self.god.check_playback()


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