Home | History | Annotate | Download | only in server
      1 #!/usr/bin/python
      2 
      3 import unittest, os
      4 import common
      5 from autotest_lib.client.common_lib import utils as common_utils
      6 from autotest_lib.client.common_lib.test_utils import mock
      7 from autotest_lib.server import rpm_kernel, utils, hosts
      8 from autotest_lib.server.hosts import bootloader
      9 
     10 
     11 class TestRpmKernel(unittest.TestCase):
     12     def setUp(self):
     13         self.god = mock.mock_god()
     14         self.kernel = rpm_kernel.RPMKernel()
     15         self.god.stub_function(utils, "run")
     16         self.kernel.source_material = "source.rpm"
     17 
     18 
     19     def tearDown(self):
     20         self.god.unstub_all()
     21 
     22 
     23     def test_install(self):
     24         host = self.god.create_mock_class(hosts.RemoteHost, "host")
     25         host.bootloader = self.god.create_mock_class(bootloader.Bootloader,
     26                                                      "bootloader")
     27         self.god.stub_function(self.kernel, "get_image_name")
     28         self.god.stub_function(self.kernel, "get_vmlinux_name")
     29         rpm = self.kernel.source_material
     30         rpm_package = "package.rpm"
     31 
     32         # record
     33         remote_tmpdir = 'remote_tmp_dir'
     34         host.get_tmp_dir.expect_call().and_return(remote_tmpdir)
     35         remote_rpm = os.path.join(remote_tmpdir, os.path.basename(rpm))
     36         result = common_utils.CmdResult()
     37         result.exit_status = 0
     38         result.stdout = rpm_package
     39         utils.run.expect_call('/usr/bin/rpm -q -p %s' % rpm).and_return(result)
     40         self.kernel.get_image_name.expect_call().and_return("vmlinuz")
     41         host.send_file.expect_call(rpm, remote_rpm)
     42         host.run.expect_call('rpm -e ' + rpm_package, ignore_status = True)
     43         host.run.expect_call('rpm --force -i ' + remote_rpm)
     44         self.kernel.get_vmlinux_name.expect_call().and_return("/boot/vmlinux")
     45         host.run.expect_call('cd /;rpm2cpio %s | cpio -imuv ./boot/vmlinux' %
     46                              remote_rpm)
     47         host.run.expect_call('ls /boot/vmlinux')
     48         host.bootloader.remove_kernel.expect_call('autotest')
     49         host.bootloader.add_kernel.expect_call("vmlinuz", 'autotest',
     50                                                args='', default=False)
     51         host.bootloader.boot_once.expect_call('autotest')
     52 
     53         # run and test
     54         self.kernel.install(host)
     55         self.god.check_playback()
     56 
     57 
     58     def test_get_version(self):
     59         # record
     60         result = common_utils.CmdResult()
     61         result.exit_status = 0
     62         result.stdout = "image"
     63 
     64         cmd = ('rpm -qpi %s | grep Version | awk \'{print($3);}\'' %
     65                (utils.sh_escape("source.rpm")))
     66         utils.run.expect_call(cmd).and_return(result)
     67 
     68         # run and test
     69         self.assertEquals(self.kernel.get_version(), result.stdout)
     70         self.god.check_playback()
     71 
     72 
     73     def test_get_image_name(self):
     74         # record
     75         result = common_utils.CmdResult()
     76         result.exit_status = 0
     77         result.stdout = "image"
     78         utils.run.expect_call('rpm -q -l -p source.rpm | grep /boot/vmlinuz'
     79             ).and_return(result)
     80 
     81         # run and test
     82         self.assertEquals(self.kernel.get_image_name(), result.stdout)
     83         self.god.check_playback()
     84 
     85 
     86     def test_get_vmlinux_name(self):
     87         # record
     88         result = common_utils.CmdResult()
     89         result.exit_status = 0
     90         result.stdout = "vmlinuz"
     91         utils.run.expect_call('rpm -q -l -p source.rpm | grep /boot/vmlinux'
     92             ).and_return(result)
     93 
     94         # run and test
     95         self.assertEquals(self.kernel.get_vmlinux_name(), result.stdout)
     96         self.god.check_playback()
     97 
     98 
     99     def test_get_initrd_name(self):
    100         # record
    101         result = common_utils.CmdResult()
    102         result.exit_status = 0
    103         utils.run.expect_call('rpm -q -l -p %s | grep /boot/initrd'
    104             % "source.rpm", ignore_status=True).and_return(result)
    105 
    106         # run and test
    107         self.kernel.get_initrd_name()
    108         self.god.check_playback()
    109 
    110 
    111 if __name__ == "__main__":
    112     unittest.main()
    113