コード例 #1
0
 def setup(self, mock_machine, mock_exists):
     mock_machine.return_value = 'x86_64'
     mock_exists.return_value = True
     description = XMLDescription(
         '../data/example_disk_config.xml'
     )
     self.device_map = {
         'root': MappedDevice('/dev/root-device', mock.Mock()),
         'boot': MappedDevice('/dev/boot-device', mock.Mock()),
         'efi': MappedDevice('/dev/efi-device', mock.Mock())
     }
     self.id_map = {
         'kiwi_RootPart': 1,
         'kiwi_BootPart': 1
     }
     self.id_map_sorted = OrderedDict(
         sorted(self.id_map.items())
     )
     self.loop_provider = mock.Mock()
     kiwi.disk_builder.LoopDevice = mock.Mock(
         return_value=self.loop_provider
     )
     self.disk = mock.Mock()
     provider = mock.Mock()
     provider.get_device = mock.Mock(
         return_value='/dev/some-loop'
     )
     self.disk.storage_provider = provider
     self.partitioner = mock.Mock()
     self.partitioner.get_id = mock.Mock(
         return_value=1
     )
     self.disk.partitioner = self.partitioner
     self.disk.get_uuid = mock.Mock(
         return_value='0815'
     )
     self.disk.get_partition_id_map = mock.Mock(
         return_value=self.id_map_sorted
     )
     self.disk.get_device = mock.Mock(
         return_value=self.device_map
     )
     self.kernel = mock.Mock()
     self.kernel.get_kernel = mock.Mock()
     self.kernel.get_xen_hypervisor = mock.Mock()
     self.kernel.copy_kernel = mock.Mock()
     self.kernel.copy_xen_hypervisor = mock.Mock()
     kiwi.disk_builder.Kernel = mock.Mock(
         return_value=self.kernel
     )
     self.disk_format = mock.Mock()
     self.disk_format.get_target_name_for_format = mock.Mock(
         return_value='some-target-format-name'
     )
     kiwi.disk_builder.DiskFormat = mock.Mock(
         return_value=self.disk_format
     )
     kiwi.disk_builder.Disk = mock.Mock(
         return_value=self.disk
     )
     self.disk_setup = mock.Mock()
     self.disk_setup.get_efi_label = mock.Mock(
         return_value='EFI'
     )
     self.disk_setup.get_root_label = mock.Mock(
         return_value='ROOT'
     )
     self.disk_setup.get_boot_label = mock.Mock(
         return_value='BOOT'
     )
     self.disk_setup.need_boot_partition = mock.Mock(
         return_value=True
     )
     self.bootloader_install = mock.Mock()
     kiwi.disk_builder.BootLoaderInstall = mock.MagicMock(
         return_value=self.bootloader_install
     )
     self.bootloader_config = mock.Mock()
     kiwi.disk_builder.BootLoaderConfig = mock.MagicMock(
         return_value=self.bootloader_config
     )
     kiwi.disk_builder.DiskSetup = mock.MagicMock(
         return_value=self.disk_setup
     )
     self.boot_image_task = mock.Mock()
     self.boot_image_task.boot_root_directory = 'boot_dir'
     self.boot_image_task.kernel_filename = 'kernel'
     self.boot_image_task.initrd_filename = 'initrd'
     self.boot_image_task.xen_hypervisor_filename = 'xen_hypervisor'
     kiwi.disk_builder.BootImageTask = mock.Mock(
         return_value=self.boot_image_task
     )
     self.firmware = mock.Mock()
     self.firmware.efi_mode = mock.Mock(
         return_value='efi'
     )
     kiwi.disk_builder.FirmWare = mock.Mock(
         return_value=self.firmware
     )
     self.system_setup = mock.Mock()
     kiwi.disk_builder.SystemSetup = mock.Mock(
         return_value=self.system_setup
     )
     self.install_image = mock.Mock()
     kiwi.disk_builder.InstallImageBuilder = mock.Mock(
         return_value=self.install_image
     )
     self.raid_root = mock.Mock()
     kiwi.disk_builder.RaidDevice = mock.Mock(
         return_value=self.raid_root
     )
     self.luks_root = mock.Mock()
     kiwi.disk_builder.LuksDevice = mock.Mock(
         return_value=self.luks_root
     )
     self.disk_builder = DiskBuilder(
         XMLState(description.load()), 'target_dir', 'root_dir'
     )
     self.disk_builder.build_type_name = 'oem'
     self.machine = mock.Mock()
     self.machine.get_domain = mock.Mock(
         return_value='dom0'
     )
     self.disk_builder.machine = self.machine
     self.disk_builder.image_format = None
コード例 #2
0
class TestDiskBuilder(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_disk_config.xml'
        )
        self.device_map = {
            'root': MappedDevice('/dev/root-device', mock.Mock()),
            'boot': MappedDevice('/dev/boot-device', mock.Mock()),
            'efi': MappedDevice('/dev/efi-device', mock.Mock())
        }
        self.id_map = {
            'kiwi_RootPart': 1,
            'kiwi_BootPart': 1
        }
        self.id_map_sorted = OrderedDict(
            sorted(self.id_map.items())
        )
        self.loop_provider = mock.Mock()
        kiwi.disk_builder.LoopDevice = mock.Mock(
            return_value=self.loop_provider
        )
        self.disk = mock.Mock()
        provider = mock.Mock()
        provider.get_device = mock.Mock(
            return_value='/dev/some-loop'
        )
        self.disk.storage_provider = provider
        self.partitioner = mock.Mock()
        self.partitioner.get_id = mock.Mock(
            return_value=1
        )
        self.disk.partitioner = self.partitioner
        self.disk.get_uuid = mock.Mock(
            return_value='0815'
        )
        self.disk.get_partition_id_map = mock.Mock(
            return_value=self.id_map_sorted
        )
        self.disk.get_device = mock.Mock(
            return_value=self.device_map
        )
        self.kernel = mock.Mock()
        self.kernel.get_kernel = mock.Mock()
        self.kernel.get_xen_hypervisor = mock.Mock()
        self.kernel.copy_kernel = mock.Mock()
        self.kernel.copy_xen_hypervisor = mock.Mock()
        kiwi.disk_builder.Kernel = mock.Mock(
            return_value=self.kernel
        )
        self.disk_format = mock.Mock()
        self.disk_format.get_target_name_for_format = mock.Mock(
            return_value='some-target-format-name'
        )
        kiwi.disk_builder.DiskFormat = mock.Mock(
            return_value=self.disk_format
        )
        kiwi.disk_builder.Disk = mock.Mock(
            return_value=self.disk
        )
        self.disk_setup = mock.Mock()
        self.disk_setup.get_efi_label = mock.Mock(
            return_value='EFI'
        )
        self.disk_setup.get_root_label = mock.Mock(
            return_value='ROOT'
        )
        self.disk_setup.get_boot_label = mock.Mock(
            return_value='BOOT'
        )
        self.disk_setup.need_boot_partition = mock.Mock(
            return_value=True
        )
        self.bootloader_install = mock.Mock()
        kiwi.disk_builder.BootLoaderInstall = mock.MagicMock(
            return_value=self.bootloader_install
        )
        self.bootloader_config = mock.Mock()
        kiwi.disk_builder.BootLoaderConfig = mock.MagicMock(
            return_value=self.bootloader_config
        )
        kiwi.disk_builder.DiskSetup = mock.MagicMock(
            return_value=self.disk_setup
        )
        self.boot_image_task = mock.Mock()
        self.boot_image_task.boot_root_directory = 'boot_dir'
        self.boot_image_task.kernel_filename = 'kernel'
        self.boot_image_task.initrd_filename = 'initrd'
        self.boot_image_task.xen_hypervisor_filename = 'xen_hypervisor'
        kiwi.disk_builder.BootImageTask = mock.Mock(
            return_value=self.boot_image_task
        )
        self.firmware = mock.Mock()
        self.firmware.efi_mode = mock.Mock(
            return_value='efi'
        )
        kiwi.disk_builder.FirmWare = mock.Mock(
            return_value=self.firmware
        )
        self.system_setup = mock.Mock()
        kiwi.disk_builder.SystemSetup = mock.Mock(
            return_value=self.system_setup
        )
        self.install_image = mock.Mock()
        kiwi.disk_builder.InstallImageBuilder = mock.Mock(
            return_value=self.install_image
        )
        self.raid_root = mock.Mock()
        kiwi.disk_builder.RaidDevice = mock.Mock(
            return_value=self.raid_root
        )
        self.luks_root = mock.Mock()
        kiwi.disk_builder.LuksDevice = mock.Mock(
            return_value=self.luks_root
        )
        self.disk_builder = DiskBuilder(
            XMLState(description.load()), 'target_dir', 'root_dir'
        )
        self.disk_builder.build_type_name = 'oem'
        self.machine = mock.Mock()
        self.machine.get_domain = mock.Mock(
            return_value='dom0'
        )
        self.disk_builder.machine = self.machine
        self.disk_builder.image_format = None

    @raises(KiwiInstallMediaError)
    def test_create_invalid_type_for_install_media(self):
        self.disk_builder.build_type_name = 'vmx'
        self.disk_builder.create()

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('random.randrange')
    @patch('kiwi.disk_builder.Command.run')
    @patch('os.path.exists')
    def test_create_standard_root(
        self, mock_path, mock_command, mock_rand, mock_open, mock_fs
    ):
        mock_path.return_value = True
        mock_rand.return_value = 15
        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)
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = None
        self.disk_builder.install_iso = True
        self.disk_builder.install_pxe = True

        self.disk_builder.create()

        self.system_setup.create_recovery_archive.assert_called_once_with()
        self.system_setup.export_modprobe_setup.assert_called_once_with(
            'boot_dir'
        )
        self.disk_setup.get_disksize_mbytes.assert_called_once_with()
        self.loop_provider.create.assert_called_once_with()
        self.disk.wipe.assert_called_once_with()
        self.disk.create_efi_csm_partition.assert_called_once_with(
            self.firmware.get_legacy_bios_partition_size()
        )
        self.disk.create_efi_partition.assert_called_once_with(
            self.firmware.get_efi_partition_size()
        )
        self.disk.create_boot_partition.assert_called_once_with(
            self.disk_setup.boot_partition_size()
        )
        self.disk.create_root_partition.assert_called_once_with(
            'all_free'
        )
        self.disk.map_partitions.assert_called_once_with()
        self.bootloader_config.setup_disk_boot_images.assert_called_once_with(
            '0815'
        )
        self.bootloader_config.setup_disk_image_config.assert_called_once_with(
            '0815'
        )
        self.system_setup.call_edit_boot_config_script.assert_called_once_with(
            'btrfs', 1
        )
        self.bootloader_install.install.assert_called_once_with()
        self.system_setup.call_edit_boot_install_script.assert_called_once_with(
            'target_dir/LimeJeOS-openSUSE-13.2.x86_64-1.13.2.raw',
            '/dev/boot-device'
        )
        self.install_image.create_install_iso.assert_called_once_with()
        self.install_image.create_install_pxe_archive.assert_called_once_with()

        call = filesystem.create_on_device.call_args_list[0]
        assert filesystem.create_on_device.call_args_list[0] == \
            call(label='EFI')
        call = filesystem.create_on_device.call_args_list[1]
        assert filesystem.create_on_device.call_args_list[1] == \
            call(label='BOOT')
        call = filesystem.create_on_device.call_args_list[2]
        assert filesystem.create_on_device.call_args_list[2] == \
            call(label='ROOT')

        call = filesystem.sync_data.call_args_list[0]
        assert filesystem.sync_data.call_args_list[0] == \
            call()
        call = filesystem.sync_data.call_args_list[1]
        assert filesystem.sync_data.call_args_list[1] == \
            call(['efi/*'])
        call = filesystem.sync_data.call_args_list[2]
        assert filesystem.sync_data.call_args_list[2] == \
            call([
                'image', '.profile', '.kconfig', 'var/cache/kiwi',
                'boot/*', 'boot/.*'
            ])
        assert mock_open.call_args_list == [
            call('boot_dir/config.partids', 'w'),
            call('root_dir/boot/mbrid', 'w'),
            call('/dev/some-loop', 'wb')
        ]
        assert file_mock.write.call_args_list == [
            call('kiwi_BootPart="1"\n'),
            call('kiwi_RootPart="1"\n'),
            call('0x0f0f0f0f\n'),
            call('\x0f\x0f\x0f\x0f')
        ]
        assert mock_command.call_args_list == [
            call(['cp', 'root_dir/recovery.partition.size', 'boot_dir']),
            call(['mv', 'initrd', 'root_dir/boot/initrd.vmx']),
        ]
        self.kernel.copy_kernel.assert_called_once_with(
            'root_dir', '/boot/linux.vmx'
        )
        self.kernel.copy_xen_hypervisor.assert_called_once_with(
            'root_dir', '/boot/xen.gz'
        )

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    @raises(KiwiDiskBootImageError)
    def test_create_standard_root_no_kernel_found(
        self, mock_command, mock_open, mock_fs
    ):
        self.kernel.get_kernel.return_value = False
        self.disk_builder.create()

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    @raises(KiwiDiskBootImageError)
    def test_create_standard_root_no_hypervisor_found(
        self, mock_command, mock_open, mock_fs
    ):
        self.kernel.get_xen_hypervisor.return_value = False
        self.disk_builder.create()

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_standard_root_s390_boot(
        self, mock_command, mock_open, mock_fs
    ):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = None
        self.firmware.efi_mode = mock.Mock(
            return_value=False
        )
        self.disk_builder.bootloader = 'grub2_s390x_emu'
        self.disk_builder.create()
        assert mock_fs.call_args_list[1] == call(
            'ext2', self.device_map['boot'], 'root_dir/boot/zipl/'
        )

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_standard_root_secure_boot(
        self, mock_command, mock_open, mock_fs
    ):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = None
        self.firmware.efi_mode = mock.Mock(
            return_value='uefi'
        )
        self.disk_builder.create()
        bootloader = self.bootloader_config
        bootloader.setup_disk_boot_images.assert_called_once_with('0815')

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_mdraid_root(self, mock_command, mock_open, mock_fs):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = None
        self.disk_builder.mdraid = 'mirroring'
        self.disk_builder.create()
        self.disk.create_root_raid_partition.assert_called_once_with(
            'all_free'
        )
        self.raid_root.create_degraded_raid.assert_called_once_with(
            raid_level='mirroring'
        )
        self.raid_root.create_raid_config.assert_called_once_with(
            'boot_dir/etc/mdadm.conf'
        )

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_luks_root(self, mock_command, mock_open, mock_fs):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = None
        self.disk_builder.luks = 'passphrase'
        self.disk_builder.create()
        self.luks_root.create_crypto_luks.assert_called_once_with(
            passphrase='passphrase', os=None
        )
        self.luks_root.create_crypttab.assert_called_once_with(
            'root_dir/etc/crypttab'
        )

    @patch('kiwi.disk_builder.FileSystem')
    @patch('kiwi.disk_builder.VolumeManager')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_volume_managed_root(
        self, mock_command, mock_open, mock_volume_manager, mock_fs
    ):
        volume_manager = mock.Mock()
        volume_manager.get_device = mock.Mock(
            return_value={'root': '/dev/systemVG/LVRoot'}
        )
        mock_volume_manager.return_value = volume_manager
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.volume_manager_name = 'lvm'
        self.disk_builder.create()
        self.disk.create_root_lvm_partition.assert_called_once_with(
            'all_free'
        )
        volume_manager.setup.assert_called_once_with('systemVG')
        volume_manager.create_volumes.assert_called_once_with('btrfs')
        volume_manager.mount_volumes.assert_called_once_with()
        volume_manager.sync_data.assert_called_once_with([
            'image', '.profile', '.kconfig', 'var/cache/kiwi',
            'boot/*', 'boot/.*'
        ])

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    def test_create_with_image_format(self, mock_command, mock_open, mock_fs):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.install_media = False
        self.disk_builder.image_format = 'vmdk'
        self.disk_builder.create()
        self.disk_format.create_image_format.assert_called_once_with()

    @patch('kiwi.disk_builder.FileSystem')
    @patch('__builtin__.open')
    @patch('kiwi.disk_builder.Command.run')
    @patch('kiwi.logger.log.warning')
    def test_create_with_ignore_format_on_install_media(
        self, mock_log_warn, mock_command, mock_open, mock_fs
    ):
        filesystem = mock.Mock()
        mock_fs.return_value = filesystem
        self.disk_builder.install_media = True
        self.disk_builder.image_format = 'vmdk'
        self.disk_builder.create()
        assert mock_log_warn.called