def setup(self, mock_machine, mock_exists):
     mock_machine.return_value = 'x86_64'
     mock_exists.return_value = True
     description = XMLDescription('../data/example_config.xml')
     self.state = XMLState(description.load())
     kiwi.bootloader.config.isolinux.Path = mock.Mock()
     kiwi.bootloader.config.base.Path = mock.Mock()
     self.isolinux = mock.Mock()
     kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
         return_value=self.isolinux)
     self.bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')
     self.bootloader.get_hypervisor_domain = mock.Mock(return_value='domU')
Ejemplo n.º 2
0
 def test_post_init_ix86_platform(self, mock_machine):
     xml_state = XMLState(
         XMLDescription('../data/example_config.xml').load()
     )
     mock_machine.return_value = 'i686'
     bootloader = BootLoaderConfigIsoLinux(xml_state, 'root_dir')
     assert bootloader.arch == 'ix86'
Ejemplo n.º 3
0
 def __new__(self, name, xml_state, root_dir, custom_args=None):
     if name == 'grub2':
         return BootLoaderConfigGrub2(xml_state, root_dir, custom_args)
     elif name == 'grub2_s390x_emu':
         return BootLoaderConfigZipl(xml_state, root_dir, custom_args)
     elif name == 'isolinux':
         return BootLoaderConfigIsoLinux(xml_state, root_dir, custom_args)
     else:
         raise KiwiBootLoaderConfigSetupError(
             'Support for %s bootloader config not implemented' % name)
Ejemplo n.º 4
0
 def setup(self, mock_exists):
     Defaults.set_platform_name('x86_64')
     mock_exists.return_value = True
     self.state = mock.Mock()
     self.state.get_build_type_bootloader_console = mock.Mock(
         return_value=None)
     self.state.build_type.get_mediacheck = mock.Mock(return_value=None)
     self.state.build_type.get_volid = mock.Mock(return_value=None)
     self.state.build_type.get_flags = mock.Mock(return_value=None)
     self.state.build_type.get_hybridpersistent = mock.Mock(
         return_value=True)
     self.state.build_type.get_hybridpersistent_filesystem = mock.Mock(
         return_value=None)
     self.state.get_build_type_bootloader_timeout = mock.Mock(
         return_value=None)
     self.state.build_type.get_install_continue_on_timeout = mock.Mock(
         return_value=None)
     self.state.get_initrd_system = mock.Mock(return_value='dracut')
     self.state.build_type.get_kernelcmdline = mock.Mock(
         return_value='splash')
     self.state.build_type.get_firmware = mock.Mock(return_value='efi')
     self.state.build_type.get_initrd_system = mock.Mock(return_value=None)
     self.state.build_type.build_type.get_installboot = mock.Mock(
         return_value=None)
     self.state.xml_data.get_displayname = mock.Mock(return_value='Bob')
     self.state.xml_data.get_name = mock.Mock(
         return_value='LimeJeOS-openSUSE-13.2')
     self.state.build_type.get_image = mock.Mock(return_value='oem')
     preferences = mock.Mock()
     preferences.get_bootloader_theme = mock.Mock(return_value=['openSUSE'])
     self.state.get_preferences_sections = mock.Mock(
         return_value=[preferences])
     self.state.is_xen_server = mock.Mock(return_value=False)
     self.state.is_xen_guest = mock.Mock(return_value=False)
     kiwi.bootloader.config.isolinux.Path = mock.Mock()
     kiwi.bootloader.config.base.Path = mock.Mock()
     self.isolinux = mock.Mock()
     kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
         return_value=self.isolinux)
     self.bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')
 def setup(self, mock_machine, mock_exists):
     mock_machine.return_value = 'x86_64'
     mock_exists.return_value = True
     description = XMLDescription(
         '../data/example_config.xml'
     )
     self.state = XMLState(
         description.load()
     )
     kiwi.bootloader.config.isolinux.Path = mock.Mock()
     kiwi.bootloader.config.base.Path = mock.Mock()
     self.isolinux = mock.Mock()
     kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
         return_value=self.isolinux
     )
     self.bootloader = BootLoaderConfigIsoLinux(
         self.state, 'root_dir'
     )
     self.bootloader.get_hypervisor_domain = mock.Mock(
         return_value='domU'
     )
Ejemplo n.º 6
0
class TestBootLoaderConfigIsoLinux:
    @patch('os.path.exists')
    @patch('platform.machine')
    def setup(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.state = mock.Mock()
        self.state.build_type.get_bootloader_console = mock.Mock(
            return_value=None)
        self.state.build_type.get_mediacheck = mock.Mock(return_value=None)
        self.state.build_type.get_volid = mock.Mock(return_value=None)
        self.state.build_type.get_flags = mock.Mock(return_value=None)
        self.state.build_type.get_hybridpersistent = mock.Mock(
            return_value=True)
        self.state.build_type.get_hybridpersistent_filesystem = mock.Mock(
            return_value=None)
        self.state.build_type.get_boottimeout = mock.Mock(return_value=None)
        self.state.build_type.get_install_continue_on_timeout = mock.Mock(
            return_value=None)
        self.state.get_initrd_system = mock.Mock(return_value='dracut')
        self.state.build_type.get_kernelcmdline = mock.Mock(
            return_value='splash')
        self.state.build_type.get_firmware = mock.Mock(return_value='efi')
        self.state.build_type.get_initrd_system = mock.Mock(return_value=None)
        self.state.build_type.build_type.get_installboot = mock.Mock(
            return_value=None)
        self.state.xml_data.get_displayname = mock.Mock(return_value='Bob')
        self.state.xml_data.get_name = mock.Mock(
            return_value='LimeJeOS-openSUSE-13.2')
        self.state.build_type.get_image = mock.Mock(return_value='oem')
        preferences = mock.Mock()
        preferences.get_bootloader_theme = mock.Mock(return_value=['openSUSE'])
        self.state.get_preferences_sections = mock.Mock(
            return_value=[preferences])
        self.state.is_xen_server = mock.Mock(return_value=False)
        self.state.is_xen_guest = mock.Mock(return_value=False)
        kiwi.bootloader.config.isolinux.Path = mock.Mock()
        kiwi.bootloader.config.base.Path = mock.Mock()
        self.isolinux = mock.Mock()
        kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
            return_value=self.isolinux)
        self.bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')

    @patch('platform.machine')
    def test_post_init_ix86_platform(self, mock_machine):
        mock_machine.return_value = 'i686'
        bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')
        assert bootloader.arch == 'ix86'

    @patch('os.path.exists')
    @patch('platform.machine')
    def test_post_init_dom0(self, mock_machine, mock_exists):
        self.state.is_xen_server = mock.Mock(return_value=True)
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.bootloader.post_init(None)
        assert self.bootloader.multiboot is True

    @patch('os.path.exists')
    def test_write(self, mock_exists):
        mock_exists.return_value = True
        self.bootloader.config = 'some-data'
        self.bootloader.config_message = 'some-message-data'

        m_open = mock_open()
        with patch('builtins.open', m_open, create=True):
            self.bootloader.write()

        assert m_open.call_args_list == [
            call('root_dir/boot/x86_64/loader/isolinux.cfg', 'w'),
            call('root_dir/boot/x86_64/loader/isolinux.msg', 'w')
        ]
        assert m_open.return_value.write.call_args_list == [
            call('some-data'), call('some-message-data')
        ]

    def test_setup_install_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_install_template.return_value = template_cfg
        self.isolinux.get_install_message_template.return_value = template_msg

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, False, None, True)
        self.isolinux.get_install_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_install_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_multiboot_install_template.assert_called_once_with(
            True, False, None, True)

    @patch('os.path.exists')
    def test_setup_install_image_config_with_theme(self, mock_exists):
        mock_exists.return_value = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, True, None, True)

    def test_setup_install_image_config_invalid_template(self):
        self.isolinux.get_install_message_template.side_effect = Exception
        with raises(KiwiTemplateError):
            self.bootloader.setup_install_image_config(mbrid=None)

    def test_setup_install_boot_images(self):
        assert self.bootloader.setup_install_boot_images(mbrid=None) is None

    def test_setup_live_boot_images(self):
        assert self.bootloader.setup_live_boot_images(mbrid=None) is None

    def test_setup_live_image_config_invalid_template(self):
        self.isolinux.get_message_template.side_effect = Exception
        with raises(KiwiTemplateError):
            self.bootloader.setup_live_image_config(mbrid=None)

    def test_setup_live_image_config(self):
        template_parameters = {
            'initrd_file':
            'initrd',
            'default_boot':
            'Bob',
            'title':
            'Bob',
            'gfxmode':
            '800 600',
            'boot_options':
            'splash root=live:CDLABEL=CDROM'
            ' rd.live.image rd.live.overlay.persistent',
            'boot_timeout':
            100,
            'failsafe_boot_options':
            'splash ide=nodma apm=off'
            ' noresume edd=off nomodeset 3'
            ' root=live:CDLABEL=CDROM rd.live.image'
            ' rd.live.overlay.persistent',
            'kernel_file':
            'linux'
        }
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_template.return_value = template_cfg
        self.isolinux.get_message_template.return_value = template_msg

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_template.assert_called_once_with(
            True, False, None, None)
        self.isolinux.get_message_template.assert_called_once_with()
        template_cfg.substitute.assert_called_once_with(template_parameters)
        template_msg.substitute.assert_called_once_with(template_parameters)

    def test_setup_live_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_multiboot_template.assert_called_once_with(
            True, False, None, None)
Ejemplo n.º 7
0
 def test_post_init_ix86_platform(self, mock_machine):
     mock_machine.return_value = 'i686'
     bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')
     assert bootloader.arch == 'ix86'
 def test_post_init_invalid_platform(self, mock_machine):
     mock_machine.return_value = 'unsupported-arch'
     BootLoaderConfigIsoLinux(mock.Mock(), 'root_dir')
class TestBootLoaderConfigIsoLinux(object):
    @patch('os.path.exists')
    @patch('platform.machine')
    def setup(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.state = mock.Mock()
        self.state.build_type.get_bootloader_console = mock.Mock(
            return_value=None)
        self.state.build_type.get_mediacheck = mock.Mock(return_value=None)
        self.state.build_type.get_volid = mock.Mock(return_value=None)
        self.state.build_type.get_flags = mock.Mock(return_value=None)
        self.state.build_type.get_hybridpersistent = mock.Mock(
            return_value=True)
        self.state.build_type.get_hybridpersistent_filesystem = mock.Mock(
            return_value=None)
        self.state.build_type.get_boottimeout = mock.Mock(return_value=None)
        self.state.build_type.get_install_continue_on_timeout = mock.Mock(
            return_value=None)
        self.state.get_initrd_system = mock.Mock(return_value='dracut')
        self.state.build_type.get_kernelcmdline = mock.Mock(
            return_value='splash')
        self.state.build_type.get_firmware = mock.Mock(return_value='efi')
        self.state.build_type.get_initrd_system = mock.Mock(return_value=None)
        self.state.build_type.build_type.get_installboot = mock.Mock(
            return_value=None)
        self.state.xml_data.get_displayname = mock.Mock(return_value='Bob')
        self.state.xml_data.get_name = mock.Mock(
            return_value='LimeJeOS-openSUSE-13.2')
        self.state.build_type.get_image = mock.Mock(return_value='oem')
        preferences = mock.Mock()
        preferences.get_bootloader_theme = mock.Mock(return_value=['openSUSE'])
        self.state.get_preferences_sections = mock.Mock(
            return_value=[preferences])
        self.state.is_xen_server = mock.Mock(return_value=False)
        self.state.is_xen_guest = mock.Mock(return_value=False)
        kiwi.bootloader.config.isolinux.Path = mock.Mock()
        kiwi.bootloader.config.base.Path = mock.Mock()
        self.isolinux = mock.Mock()
        kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
            return_value=self.isolinux)
        self.bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')

    @raises(KiwiBootLoaderIsoLinuxPlatformError)
    @patch('platform.machine')
    def test_post_init_invalid_platform(self, mock_machine):
        mock_machine.return_value = 'unsupported-arch'
        BootLoaderConfigIsoLinux(mock.Mock(), 'root_dir')

    @patch('platform.machine')
    def test_post_init_ix86_platform(self, mock_machine):
        xml_state = XMLState(
            XMLDescription('../data/example_config.xml').load())
        mock_machine.return_value = 'i686'
        bootloader = BootLoaderConfigIsoLinux(xml_state, 'root_dir')
        assert bootloader.arch == 'ix86'

    @patch('os.path.exists')
    @patch('platform.machine')
    def test_post_init_dom0(self, mock_machine, mock_exists):
        self.state.is_xen_server = mock.Mock(return_value=True)
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.bootloader.post_init(None)
        assert self.bootloader.multiboot is True

    @patch_open
    @patch('os.path.exists')
    def test_write(self, mock_exists, mock_open):
        mock_exists.return_value = True
        context_manager_mock = mock.Mock()
        mock_open.return_value = context_manager_mock
        file_mock = mock.Mock()
        enter_mock = mock.Mock()
        exit_mock = mock.Mock()
        enter_mock.return_value = file_mock
        setattr(context_manager_mock, '__enter__', enter_mock)
        setattr(context_manager_mock, '__exit__', exit_mock)
        self.bootloader.config = 'some-data'
        self.bootloader.config_message = 'some-message-data'

        self.bootloader.write()
        assert mock_open.call_args_list == [
            call('root_dir/boot/x86_64/loader/isolinux.cfg', 'w'),
            call('root_dir/boot/x86_64/loader/isolinux.msg', 'w')
        ]
        assert file_mock.write.call_args_list == [
            call('some-data'), call('some-message-data')
        ]

    def test_setup_install_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_install_template.return_value = template_cfg
        self.isolinux.get_install_message_template.return_value = template_msg

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, False, None, True)
        self.isolinux.get_install_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_install_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_multiboot_install_template.assert_called_once_with(
            True, False, None, True)

    @patch('os.path.exists')
    def test_setup_install_image_config_with_theme(self, mock_exists):
        mock_exists.return_value = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, True, None, True)

    @raises(KiwiTemplateError)
    def test_setup_install_image_config_invalid_template(self):
        self.isolinux.get_install_message_template.side_effect = Exception
        self.bootloader.setup_install_image_config(mbrid=None)

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    @patch('kiwi.bootloader.config.isolinux.shutil')
    @patch('kiwi.bootloader.config.isolinux.Command.run')
    @patch('os.path.exists')
    def test_setup_install_boot_images(self, mock_exists, mock_command,
                                       mock_shutil, mock_sync):
        mock_exists.return_value = True
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_install_boot_images(mbrid=None)
        assert mock_shutil.copy.call_args_list == [
            call('root_dir/usr/share/syslinux/isolinux.bin',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/isolinux.bin',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/isolinux.bin',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/ldlinux.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/ldlinux.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/ldlinux.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/libcom32.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/libcom32.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/libcom32.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/libutil.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/libutil.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/libutil.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/gfxboot.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/gfxboot.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/gfxboot.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/gfxboot.com',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/gfxboot.com',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/gfxboot.com',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/menu.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/menu.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/menu.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/chain.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/chain.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/chain.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/share/syslinux/mboot.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/syslinux/modules/bios/mboot.c32',
                 'root_dir/image/loader/'),
            call('root_dir/usr/lib/ISOLINUX/mboot.c32',
                 'root_dir/image/loader/')
        ]
        assert mock_command.call_args_list == [
            call(command=[
                'bash', '-c', 'cp root_dir/boot/memtest* '
                'root_dir/image/loader//memtest'
            ],
                 raise_on_error=False),
            call([
                'bash', '-c', 'cp root_dir/etc/bootsplash/themes/openSUSE/'
                'cdrom/* root_dir/image/loader/'
            ]),
            call([
                'gfxboot', '--config-file',
                'root_dir/image/loader//gfxboot.cfg', '--change-config',
                'install::autodown=0'
            ]),
            call([
                'cp', 'root_dir/etc/bootsplash/themes/openSUSE/'
                'bootloader/message', 'root_dir/image/loader/'
            ])
        ]
        mock_sync.assert_called_once_with('root_dir/image/loader/',
                                          'root_dir/boot/x86_64/loader')
        data.sync_data.assert_called_once_with(options=['-z', '-a'])

    @patch.object(BootLoaderConfigIsoLinux, 'setup_install_boot_images')
    def test_setup_live_boot_images(self, mock_install_boot_images):
        self.bootloader.setup_live_boot_images(mbrid=None,
                                               lookup_path='lookup_dir')
        mock_install_boot_images.assert_called_once_with(None, 'lookup_dir')

    @raises(KiwiTemplateError)
    def test_setup_live_image_config_invalid_template(self):
        self.isolinux.get_message_template.side_effect = Exception
        self.bootloader.setup_live_image_config(mbrid=None)

    def test_setup_live_image_config(self):
        template_parameters = {
            'initrd_file':
            'initrd',
            'default_boot':
            'Bob',
            'title':
            'Bob',
            'gfxmode':
            '800 600',
            'boot_options':
            'splash root=live:CDLABEL=CDROM'
            ' rd.live.image rd.live.overlay.persistent',
            'boot_timeout':
            100,
            'failsafe_boot_options':
            'splash ide=nodma apm=off'
            ' noresume edd=off nomodeset 3'
            ' root=live:CDLABEL=CDROM rd.live.image'
            ' rd.live.overlay.persistent',
            'kernel_file':
            'linux'
        }
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_template.return_value = template_cfg
        self.isolinux.get_message_template.return_value = template_msg

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_template.assert_called_once_with(
            True, False, None, None)
        self.isolinux.get_message_template.assert_called_once_with()
        template_cfg.substitute.assert_called_once_with(template_parameters)
        template_msg.substitute.assert_called_once_with(template_parameters)

    def test_setup_live_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_multiboot_template.assert_called_once_with(
            True, False, None, None)
Ejemplo n.º 10
0
class TestBootLoaderConfigIsoLinux(object):
    @patch('os.path.exists')
    @patch('platform.machine')
    def setup(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        description = XMLDescription(
            '../data/example_config.xml'
        )
        self.state = XMLState(
            description.load()
        )
        kiwi.bootloader.config.isolinux.Path = mock.Mock()
        kiwi.bootloader.config.base.Path = mock.Mock()
        self.isolinux = mock.Mock()
        kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
            return_value=self.isolinux
        )
        self.bootloader = BootLoaderConfigIsoLinux(
            self.state, 'root_dir'
        )
        self.bootloader.get_hypervisor_domain = mock.Mock(
            return_value='domU'
        )

    @raises(KiwiBootLoaderIsoLinuxPlatformError)
    @patch('platform.machine')
    def test_post_init_invalid_platform(self, mock_machine):
        mock_machine.return_value = 'unsupported-arch'
        BootLoaderConfigIsoLinux(mock.Mock(), 'root_dir')

    @patch('platform.machine')
    def test_post_init_ix86_platform(self, mock_machine):
        xml_state = XMLState(
            XMLDescription('../data/example_config.xml').load()
        )
        mock_machine.return_value = 'i686'
        bootloader = BootLoaderConfigIsoLinux(xml_state, 'root_dir')
        assert bootloader.arch == 'ix86'

    @patch('os.path.exists')
    @patch('platform.machine')
    def test_post_init_dom0(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        self.bootloader.get_hypervisor_domain.return_value = 'dom0'
        mock_exists.return_value = True

        self.bootloader.post_init(None)
        assert self.bootloader.multiboot is True

    @patch('builtins.open')
    @patch('os.path.exists')
    def test_write(self, mock_exists, mock_open):
        mock_exists.return_value = True
        context_manager_mock = mock.Mock()
        mock_open.return_value = context_manager_mock
        file_mock = mock.Mock()
        enter_mock = mock.Mock()
        exit_mock = mock.Mock()
        enter_mock.return_value = file_mock
        setattr(context_manager_mock, '__enter__', enter_mock)
        setattr(context_manager_mock, '__exit__', exit_mock)
        self.bootloader.config = 'some-data'
        self.bootloader.config_message = 'some-message-data'

        self.bootloader.write()
        assert mock_open.call_args_list == [
            call('root_dir/boot/x86_64/loader/isolinux.cfg', 'w'),
            call('root_dir/boot/x86_64/loader/isolinux.msg', 'w')
        ]
        assert file_mock.write.call_args_list == [
            call('some-data'),
            call('some-message-data')
        ]

    def test_setup_install_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_install_template.return_value = template_cfg
        self.isolinux.get_install_message_template.return_value = template_msg

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(True, False)
        self.isolinux.get_install_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_install_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_multiboot_install_template.assert_called_once_with(
            True, False
        )

    @patch('os.path.exists')
    def test_setup_install_image_config_with_theme(self, mock_exists):
        mock_exists.return_value = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(True, True)

    @raises(KiwiTemplateError)
    def test_setup_install_image_config_invalid_template(self):
        self.isolinux.get_install_message_template.side_effect = Exception
        self.bootloader.setup_install_image_config(mbrid=None)

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    def test_setup_install_boot_images(self, mock_sync):
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_install_boot_images(
            mbrid=None, lookup_path='lookup_dir'
        )
        mock_sync.assert_called_once_with(
            'lookup_dir/image/loader/',
            'root_dir/boot/x86_64/loader'
        )
        data.sync_data.assert_called_once_with(
            options=['-z', '-a']
        )

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    def test_setup_live_boot_images(self, mock_sync):
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_live_boot_images(
            mbrid=None
        )
        mock_sync.assert_called_once_with(
            'root_dir/image/loader/',
            'root_dir/boot/x86_64/loader'
        )
        data.sync_data.assert_called_once_with(
            options=['-z', '-a']
        )

    @raises(KiwiTemplateError)
    def test_setup_live_image_config_invalid_template(self):
        self.isolinux.get_message_template.side_effect = Exception
        self.bootloader.setup_live_image_config(mbrid=None)

    def test_setup_live_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_template.return_value = template_cfg
        self.isolinux.get_message_template.return_value = template_msg

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_template.assert_called_once_with(True, False)
        self.isolinux.get_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_live_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_multiboot_template.assert_called_once_with(
            True, False
        )
Ejemplo n.º 11
0
class TestBootLoaderConfigIsoLinux(object):
    @patch('os.path.exists')
    @patch('platform.machine')
    def setup(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        description = XMLDescription('../data/example_config.xml')
        self.state = XMLState(description.load())
        self.state.is_xen_server = mock.Mock(return_value=False)
        self.state.is_xen_guest = mock.Mock(return_value=False)
        kiwi.bootloader.config.isolinux.Path = mock.Mock()
        kiwi.bootloader.config.base.Path = mock.Mock()
        self.isolinux = mock.Mock()
        kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
            return_value=self.isolinux)
        self.bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')

    @raises(KiwiBootLoaderIsoLinuxPlatformError)
    @patch('platform.machine')
    def test_post_init_invalid_platform(self, mock_machine):
        mock_machine.return_value = 'unsupported-arch'
        BootLoaderConfigIsoLinux(mock.Mock(), 'root_dir')

    @patch('platform.machine')
    def test_post_init_ix86_platform(self, mock_machine):
        xml_state = XMLState(
            XMLDescription('../data/example_config.xml').load())
        mock_machine.return_value = 'i686'
        bootloader = BootLoaderConfigIsoLinux(xml_state, 'root_dir')
        assert bootloader.arch == 'ix86'

    @patch('os.path.exists')
    @patch('platform.machine')
    def test_post_init_dom0(self, mock_machine, mock_exists):
        self.state.is_xen_server = mock.Mock(return_value=True)
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.bootloader.post_init(None)
        assert self.bootloader.multiboot is True

    @patch_open
    @patch('os.path.exists')
    def test_write(self, mock_exists, mock_open):
        mock_exists.return_value = True
        context_manager_mock = mock.Mock()
        mock_open.return_value = context_manager_mock
        file_mock = mock.Mock()
        enter_mock = mock.Mock()
        exit_mock = mock.Mock()
        enter_mock.return_value = file_mock
        setattr(context_manager_mock, '__enter__', enter_mock)
        setattr(context_manager_mock, '__exit__', exit_mock)
        self.bootloader.config = 'some-data'
        self.bootloader.config_message = 'some-message-data'

        self.bootloader.write()
        assert mock_open.call_args_list == [
            call('root_dir/boot/x86_64/loader/isolinux.cfg', 'w'),
            call('root_dir/boot/x86_64/loader/isolinux.msg', 'w')
        ]
        assert file_mock.write.call_args_list == [
            call('some-data'), call('some-message-data')
        ]

    def test_setup_install_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_install_template.return_value = template_cfg
        self.isolinux.get_install_message_template.return_value = template_msg

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, False, None)
        self.isolinux.get_install_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_install_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_multiboot_install_template.assert_called_once_with(
            True, False, None)

    @patch('os.path.exists')
    def test_setup_install_image_config_with_theme(self, mock_exists):
        mock_exists.return_value = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, True, None)

    @raises(KiwiTemplateError)
    def test_setup_install_image_config_invalid_template(self):
        self.isolinux.get_install_message_template.side_effect = Exception
        self.bootloader.setup_install_image_config(mbrid=None)

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    def test_setup_install_boot_images(self, mock_sync):
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_install_boot_images(mbrid=None,
                                                  lookup_path='lookup_dir')
        mock_sync.assert_called_once_with('lookup_dir/image/loader/',
                                          'root_dir/boot/x86_64/loader')
        data.sync_data.assert_called_once_with(options=['-z', '-a'])

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    def test_setup_live_boot_images(self, mock_sync):
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_live_boot_images(mbrid=None)
        mock_sync.assert_called_once_with('root_dir/image/loader/',
                                          'root_dir/boot/x86_64/loader')
        data.sync_data.assert_called_once_with(options=['-z', '-a'])

    @raises(KiwiTemplateError)
    def test_setup_live_image_config_invalid_template(self):
        self.isolinux.get_message_template.side_effect = Exception
        self.bootloader.setup_live_image_config(mbrid=None)

    def test_setup_live_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_template.return_value = template_cfg
        self.isolinux.get_message_template.return_value = template_msg

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_template.assert_called_once_with(True, False, None)
        self.isolinux.get_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_live_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_multiboot_template.assert_called_once_with(
            True, False, None)
Ejemplo n.º 12
0
 def test_post_init_ix86_platform(self):
     Defaults.set_platform_name('i686')
     bootloader = BootLoaderConfigIsoLinux(self.state, 'root_dir')
     assert bootloader.arch == 'ix86'
 def setup(self, mock_machine, mock_exists):
     mock_machine.return_value = 'x86_64'
     mock_exists.return_value = True
     self.state = mock.Mock()
     self.state.build_type.get_bootloader_console = mock.Mock(
         return_value=None
     )
     self.state.build_type.get_mediacheck = mock.Mock(
         return_value=None
     )
     self.state.build_type.get_volid = mock.Mock(
         return_value=None
     )
     self.state.build_type.get_flags = mock.Mock(
         return_value=None
     )
     self.state.build_type.get_hybridpersistent = mock.Mock(
         return_value=True
     )
     self.state.build_type.get_hybridpersistent_filesystem = mock.Mock(
         return_value=None
     )
     self.state.build_type.get_boottimeout = mock.Mock(
         return_value=None
     )
     self.state.get_initrd_system = mock.Mock(
         return_value='dracut'
     )
     self.state.build_type.get_kernelcmdline = mock.Mock(
         return_value='splash'
     )
     self.state.build_type.get_firmware = mock.Mock(
         return_value='efi'
     )
     self.state.build_type.get_initrd_system = mock.Mock(
         return_value=None
     )
     self.state.build_type.build_type.get_installboot = mock.Mock(
         return_value=None
     )
     self.state.xml_data.get_displayname = mock.Mock(
         return_value='Bob'
     )
     self.state.xml_data.get_name = mock.Mock(
         return_value='LimeJeOS-openSUSE-13.2'
     )
     self.state.build_type.get_image = mock.Mock(
         return_value='oem'
     )
     preferences = mock.Mock()
     preferences.get_bootloader_theme = mock.Mock(
         return_value=['openSUSE']
     )
     self.state.get_preferences_sections = mock.Mock(
         return_value=[preferences]
     )
     self.state.is_xen_server = mock.Mock(
         return_value=False
     )
     self.state.is_xen_guest = mock.Mock(
         return_value=False
     )
     kiwi.bootloader.config.isolinux.Path = mock.Mock()
     kiwi.bootloader.config.base.Path = mock.Mock()
     self.isolinux = mock.Mock()
     kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
         return_value=self.isolinux
     )
     self.bootloader = BootLoaderConfigIsoLinux(
         self.state, 'root_dir'
     )
class TestBootLoaderConfigIsoLinux(object):
    @patch('os.path.exists')
    @patch('platform.machine')
    def setup(self, mock_machine, mock_exists):
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.state = mock.Mock()
        self.state.build_type.get_bootloader_console = mock.Mock(
            return_value=None
        )
        self.state.build_type.get_mediacheck = mock.Mock(
            return_value=None
        )
        self.state.build_type.get_volid = mock.Mock(
            return_value=None
        )
        self.state.build_type.get_flags = mock.Mock(
            return_value=None
        )
        self.state.build_type.get_hybridpersistent = mock.Mock(
            return_value=True
        )
        self.state.build_type.get_hybridpersistent_filesystem = mock.Mock(
            return_value=None
        )
        self.state.build_type.get_boottimeout = mock.Mock(
            return_value=None
        )
        self.state.get_initrd_system = mock.Mock(
            return_value='dracut'
        )
        self.state.build_type.get_kernelcmdline = mock.Mock(
            return_value='splash'
        )
        self.state.build_type.get_firmware = mock.Mock(
            return_value='efi'
        )
        self.state.build_type.get_initrd_system = mock.Mock(
            return_value=None
        )
        self.state.build_type.build_type.get_installboot = mock.Mock(
            return_value=None
        )
        self.state.xml_data.get_displayname = mock.Mock(
            return_value='Bob'
        )
        self.state.xml_data.get_name = mock.Mock(
            return_value='LimeJeOS-openSUSE-13.2'
        )
        self.state.build_type.get_image = mock.Mock(
            return_value='oem'
        )
        preferences = mock.Mock()
        preferences.get_bootloader_theme = mock.Mock(
            return_value=['openSUSE']
        )
        self.state.get_preferences_sections = mock.Mock(
            return_value=[preferences]
        )
        self.state.is_xen_server = mock.Mock(
            return_value=False
        )
        self.state.is_xen_guest = mock.Mock(
            return_value=False
        )
        kiwi.bootloader.config.isolinux.Path = mock.Mock()
        kiwi.bootloader.config.base.Path = mock.Mock()
        self.isolinux = mock.Mock()
        kiwi.bootloader.config.isolinux.BootLoaderTemplateIsoLinux = mock.Mock(
            return_value=self.isolinux
        )
        self.bootloader = BootLoaderConfigIsoLinux(
            self.state, 'root_dir'
        )

    @raises(KiwiBootLoaderIsoLinuxPlatformError)
    @patch('platform.machine')
    def test_post_init_invalid_platform(self, mock_machine):
        mock_machine.return_value = 'unsupported-arch'
        BootLoaderConfigIsoLinux(mock.Mock(), 'root_dir')

    @patch('platform.machine')
    def test_post_init_ix86_platform(self, mock_machine):
        xml_state = XMLState(
            XMLDescription('../data/example_config.xml').load()
        )
        mock_machine.return_value = 'i686'
        bootloader = BootLoaderConfigIsoLinux(xml_state, 'root_dir')
        assert bootloader.arch == 'ix86'

    @patch('os.path.exists')
    @patch('platform.machine')
    def test_post_init_dom0(self, mock_machine, mock_exists):
        self.state.is_xen_server = mock.Mock(
            return_value=True
        )
        mock_machine.return_value = 'x86_64'
        mock_exists.return_value = True
        self.bootloader.post_init(None)
        assert self.bootloader.multiboot is True

    @patch_open
    @patch('os.path.exists')
    def test_write(self, mock_exists, mock_open):
        mock_exists.return_value = True
        context_manager_mock = mock.Mock()
        mock_open.return_value = context_manager_mock
        file_mock = mock.Mock()
        enter_mock = mock.Mock()
        exit_mock = mock.Mock()
        enter_mock.return_value = file_mock
        setattr(context_manager_mock, '__enter__', enter_mock)
        setattr(context_manager_mock, '__exit__', exit_mock)
        self.bootloader.config = 'some-data'
        self.bootloader.config_message = 'some-message-data'

        self.bootloader.write()
        assert mock_open.call_args_list == [
            call('root_dir/boot/x86_64/loader/isolinux.cfg', 'w'),
            call('root_dir/boot/x86_64/loader/isolinux.msg', 'w')
        ]
        assert file_mock.write.call_args_list == [
            call('some-data'),
            call('some-message-data')
        ]

    def test_setup_install_image_config(self):
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_install_template.return_value = template_cfg
        self.isolinux.get_install_message_template.return_value = template_msg

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, False, None
        )
        self.isolinux.get_install_message_template.assert_called_once_with()
        assert template_cfg.substitute.called
        assert template_msg.substitute.called

    def test_setup_install_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_multiboot_install_template.assert_called_once_with(
            True, False, None
        )

    @patch('os.path.exists')
    def test_setup_install_image_config_with_theme(self, mock_exists):
        mock_exists.return_value = True

        self.bootloader.setup_install_image_config(mbrid=None)
        self.isolinux.get_install_template.assert_called_once_with(
            True, True, None
        )

    @raises(KiwiTemplateError)
    def test_setup_install_image_config_invalid_template(self):
        self.isolinux.get_install_message_template.side_effect = Exception
        self.bootloader.setup_install_image_config(mbrid=None)

    @patch('kiwi.bootloader.config.isolinux.DataSync')
    @patch('kiwi.bootloader.config.isolinux.shutil')
    @patch('kiwi.bootloader.config.isolinux.Command.run')
    @patch('os.path.exists')
    def test_setup_install_boot_images(
        self, mock_exists, mock_command, mock_shutil, mock_sync
    ):
        mock_exists.return_value = True
        data = mock.Mock()
        mock_sync.return_value = data
        self.bootloader.setup_install_boot_images(
            mbrid=None
        )
        assert mock_shutil.copy.call_args_list == [
            call(
                'root_dir/usr/share/syslinux/isolinux.bin',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/isolinux.bin',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/ldlinux.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/ldlinux.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/libcom32.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/libcom32.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/libutil.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/libutil.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/gfxboot.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/gfxboot.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/gfxboot.com',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/gfxboot.com',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/menu.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/menu.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/chain.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/chain.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/share/syslinux/mboot.c32',
                'root_dir/image/loader/'
            ),
            call(
                'root_dir/usr/lib/syslinux/modules/bios/mboot.c32',
                'root_dir/image/loader/'
            )
        ]
        assert mock_command.call_args_list == [
            call(
                command=[
                    'bash', '-c',
                    'cp root_dir/boot/memtest* ' +
                    'root_dir/image/loader//memtest'
                ], raise_on_error=False
            ),
            call(
                [
                    'bash', '-c',
                    'cp root_dir/etc/bootsplash/themes/openSUSE/' +
                    'cdrom/* root_dir/image/loader/'
                ]
            ),
            call(
                [
                    'gfxboot',
                    '--config-file', 'root_dir/image/loader//gfxboot.cfg',
                    '--change-config', 'install::autodown=0'
                ]
            ),
            call(
                [
                    'cp',
                    'root_dir/etc/bootsplash/themes/openSUSE/' +
                    'bootloader/message', 'root_dir/image/loader/'
                ]
            )
        ]
        mock_sync.assert_called_once_with(
            'root_dir/image/loader/',
            'root_dir/boot/x86_64/loader'
        )
        data.sync_data.assert_called_once_with(
            options=['-z', '-a']
        )

    @patch.object(BootLoaderConfigIsoLinux, 'setup_install_boot_images')
    def test_setup_live_boot_images(self, mock_install_boot_images):
        self.bootloader.setup_live_boot_images(
            mbrid=None, lookup_path='lookup_dir'
        )
        mock_install_boot_images.assert_called_once_with(
            None, 'lookup_dir'
        )

    @raises(KiwiTemplateError)
    def test_setup_live_image_config_invalid_template(self):
        self.isolinux.get_message_template.side_effect = Exception
        self.bootloader.setup_live_image_config(mbrid=None)

    def test_setup_live_image_config(self):
        template_parameters = {
            'initrd_file': 'initrd',
            'default_boot': 'Bob',
            'title': 'Bob',
            'gfxmode': '800 600',
            'boot_options': 'splash root=live:CDLABEL=CDROM' +
            ' rd.live.image rd.live.overlay.persistent',
            'boot_timeout': 100,
            'failsafe_boot_options': 'splash ide=nodma apm=off' +
            ' noresume edd=off nomodeset 3' +
            ' root=live:CDLABEL=CDROM rd.live.image' +
            ' rd.live.overlay.persistent',
            'kernel_file': 'linux'
        }
        template_cfg = mock.Mock()
        template_msg = mock.Mock()
        self.isolinux.get_template.return_value = template_cfg
        self.isolinux.get_message_template.return_value = template_msg

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_template.assert_called_once_with(
            True, False, None, None
        )
        self.isolinux.get_message_template.assert_called_once_with()
        template_cfg.substitute.assert_called_once_with(template_parameters)
        template_msg.substitute.assert_called_once_with(template_parameters)

    def test_setup_live_image_config_multiboot(self):
        self.bootloader.multiboot = True

        self.bootloader.setup_live_image_config(mbrid=None)
        self.isolinux.get_multiboot_template.assert_called_once_with(
            True, False, None, None
        )