| #!/usr/bin/python |
| |
| import unittest |
| import common |
| |
| from autotest_lib.client.common_lib.test_utils import mock |
| from autotest_lib.client.common_lib import boottool |
| |
| |
| class test_boottool(unittest.TestCase): |
| def setUp(self): |
| self.god = mock.mock_god() |
| # creates a bootloader with _run_boottool mocked out |
| self.bt_mock = boottool.boottool() |
| self.god.stub_function(self.bt_mock, '_run_boottool') |
| |
| |
| def tearDown(self): |
| self.god.unstub_all() |
| |
| |
| def expect_run_boottool(self, args, result=''): |
| self.bt_mock._run_boottool.expect_call(*args).and_return(result) |
| |
| |
| def test_get_type(self): |
| # set up the recording |
| self.expect_run_boottool(('--bootloader-probe',), 'lilo\n') |
| # run the test |
| self.assertEquals(self.bt_mock.get_type(), 'lilo') |
| self.god.check_playback() |
| |
| |
| def test_get_arch(self): |
| # set up the recording |
| self.expect_run_boottool(('--arch-probe',), 'x86_64\n') |
| # run the test |
| self.assertEquals(self.bt_mock.get_architecture(), 'x86_64') |
| self.god.check_playback() |
| |
| |
| def test_get_default(self): |
| # set up the recording |
| self.expect_run_boottool(('--default',), '0\n') |
| # run the test |
| self.assertEquals(self.bt_mock.get_default(), 0) |
| self.god.check_playback() |
| |
| |
| def test_get_titles(self): |
| # set up the recording |
| self.expect_run_boottool( |
| ('--info=all',), '\nindex\t: 0\ntitle\t: title #1\n' |
| '\nindex\t: 1\ntitle\t: title #2\n') |
| # run the test |
| self.assertEquals(self.bt_mock.get_titles(), |
| ['title #1', 'title #2']) |
| self.god.check_playback() |
| |
| |
| def test_get_entry(self): |
| RESULT = ( |
| 'index\t: 5\n' |
| 'args\t: ro single\n' |
| 'boot\t: (hd0,0)\n' |
| 'initrd\t: /boot/initrd.img-2.6.15-23-386\n' |
| 'kernel\t: /boot/vmlinuz-2.6.15-23-386\n' |
| 'root\t: UUID=07D7-0714\n' |
| 'savedefault\t: \n' |
| 'title\t: Distro, kernel 2.6.15-23-386\n' |
| ) |
| # set up the recording |
| self.expect_run_boottool(('--info=5',), RESULT) |
| # run the test |
| info = self.bt_mock.get_entry(5) |
| self.god.check_playback() |
| expected_info = {'index': 5, 'args': 'ro single', |
| 'boot': '(hd0,0)', |
| 'initrd': '/boot/initrd.img-2.6.15-23-386', |
| 'kernel': '/boot/vmlinuz-2.6.15-23-386', |
| 'root': 'UUID=07D7-0714', 'savedefault': '', |
| 'title': 'Distro, kernel 2.6.15-23-386'} |
| self.assertEquals(expected_info, info) |
| |
| |
| def test_get_entry_missing_result(self): |
| # set up the recording |
| self.expect_run_boottool(('--info=4',), '') |
| # run the test |
| info = self.bt_mock.get_entry(4) |
| self.god.check_playback() |
| self.assertEquals({}, info) |
| |
| |
| def test_get_entries(self): |
| RESULT = ( |
| 'index\t: 5\n' |
| 'args\t: ro single\n' |
| 'boot\t: (hd0,0)\n' |
| 'initrd\t: /boot/initrd.img-2.6.15-23-386\n' |
| 'kernel\t: /boot/vmlinuz-2.6.15-23-386\n' |
| 'root\t: UUID=07D7-0714\n' |
| 'savedefault\t: \n' |
| 'title\t: Distro, kernel 2.6.15-23-386\n' |
| '\n' |
| 'index\t: 7\n' |
| 'args\t: ro single\n' |
| 'boot\t: (hd0,0)\n' |
| 'initrd\t: /boot/initrd.img-2.6.15-23-686\n' |
| 'kernel\t: /boot/vmlinuz-2.6.15-23-686\n' |
| 'root\t: UUID=07D7-0714\n' |
| 'savedefault\t: \n' |
| 'title\t: Distro, kernel 2.6.15-23-686\n' |
| ) |
| # set up the recording |
| self.expect_run_boottool(('--info=all',), RESULT) |
| # run the test |
| info = self.bt_mock.get_entries() |
| self.god.check_playback() |
| expected_info = { |
| 5: {'index': 5, 'args': 'ro single', 'boot': '(hd0,0)', |
| 'initrd': '/boot/initrd.img-2.6.15-23-386', |
| 'kernel': '/boot/vmlinuz-2.6.15-23-386', |
| 'root': 'UUID=07D7-0714', 'savedefault': '', |
| 'title': 'Distro, kernel 2.6.15-23-386'}, |
| 7: {'index': 7, 'args': 'ro single', 'boot': '(hd0,0)', |
| 'initrd': '/boot/initrd.img-2.6.15-23-686', |
| 'kernel': '/boot/vmlinuz-2.6.15-23-686', |
| 'root': 'UUID=07D7-0714', 'savedefault': '', |
| 'title': 'Distro, kernel 2.6.15-23-686'}} |
| self.assertEquals(expected_info, info) |
| |
| |
| def test_set_default(self): |
| # set up the recording |
| self.expect_run_boottool(('--set-default=41',)) |
| # run the test |
| self.bt_mock.set_default(41) |
| self.god.check_playback() |
| |
| |
| def test_add_args(self): |
| # set up the recording |
| self.expect_run_boottool( |
| ('--update-kernel=10', '--args=some kernel args')) |
| # run the test |
| self.bt_mock.add_args(10, 'some kernel args') |
| self.god.check_playback() |
| |
| |
| def test_remove_args(self): |
| # set up the recording |
| self.expect_run_boottool( |
| ('--update-kernel=12', '--remove-args=some kernel args')) |
| # run the test |
| self.bt_mock.remove_args(12, 'some kernel args') |
| self.god.check_playback() |
| |
| |
| def setup_add_kernel(self, oldtitle, path, title, root=None, args=None, |
| initrd=None, default=False, position='end', |
| xen_hypervisor=None): |
| self.bt_mock.get_titles = self.god.create_mock_function('get_titles') |
| # set up the recording |
| self.bt_mock.get_titles.expect_call().and_return([oldtitle]) |
| if oldtitle == title: |
| self.expect_run_boottool(('--remove-kernel=%s' % oldtitle,)) |
| |
| parameters = ['--add-kernel=%s' % path, '--title=%s' % title] |
| if root: |
| parameters.append('--root=%s' % root) |
| if args: |
| parameters.append('--args=%s' % args) |
| if initrd: |
| parameters.append('--initrd=%s' % initrd) |
| if default: |
| parameters.append('--make-default') |
| if position: |
| parameters.append('--position=%s' % position) |
| if self.bt_mock.get_xen_mode(): |
| parameters.append('--xen') |
| if xen_hypervisor: |
| parameters.append('--xenhyper=%s' % xen_hypervisor) |
| self.expect_run_boottool(parameters) |
| |
| |
| def test_add_kernel_basic(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_removes_old(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'mylabel', '/unittest/kernels/vmlinuz', 'mylabel') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', 'mylabel') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_adds_root(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| root='/unittest/root') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', root='/unittest/root') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_adds_args(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| args='my kernel args') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', args='my kernel args') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_args_remove_duplicates(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| args='param2 param1') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', args='param1 param2 param1') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_adds_initrd(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| initrd='/unittest/initrd') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', initrd='/unittest/initrd') |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_enables_make_default(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| default=True) |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', default=True) |
| self.god.check_playback() |
| |
| |
| def test_add_kernel_position(self): |
| # set up the recording |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| position=5) |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', position=5) |
| self.god.check_playback() |
| |
| |
| def test_remove_kernel(self): |
| # set up the recording |
| self.expect_run_boottool(('--remove-kernel=14',)) |
| # run the test |
| self.bt_mock.remove_kernel(14) |
| self.god.check_playback() |
| |
| |
| def test_boot_once(self): |
| # set up the recording |
| self.expect_run_boottool(('--boot-once', '--title=autotest')) |
| # run the test |
| self.bt_mock.boot_once('autotest') |
| self.god.check_playback() |
| |
| |
| def test_enable_xen(self): |
| self.bt_mock.enable_xen_mode() |
| self.assertTrue(self.bt_mock.get_xen_mode()) |
| |
| |
| def test_disable_xen(self): |
| self.bt_mock.disable_xen_mode() |
| self.assertFalse(self.bt_mock.get_xen_mode()) |
| |
| |
| def test_add_kernel_xen(self): |
| # set up the recording |
| self.bt_mock.enable_xen_mode() |
| self.setup_add_kernel( |
| 'notmylabel', '/unittest/kernels/vmlinuz', 'mylabel', |
| xen_hypervisor='xen_image') |
| # run the test |
| self.bt_mock.add_kernel('/unittest/kernels/vmlinuz', |
| 'mylabel', xen_hypervisor='xen_image') |
| self.god.check_playback() |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |