class TestBootImageBase(object): @patch('kiwi.boot.image.base.os.path.exists') @patch('platform.machine') def setup(self, mock_machine, mock_exists): mock_machine.return_value = 'x86_64' self.boot_xml_state = mock.Mock() self.xml_state = mock.Mock() self.xml_state.xml_data.get_name = mock.Mock(return_value='some-image') self.xml_state.get_image_version = mock.Mock(return_value='1.2.3') self.xml_state.build_type.get_boot = mock.Mock( return_value='oemboot/suse-13.2') mock_exists.return_value = True self.boot_image = BootImageBase(self.xml_state, 'some-target-dir') @raises(KiwiTargetDirectoryNotFound) def test_boot_image_raises(self): BootImageBase(self.xml_state, 'target-dir-does-not-exist', 'some-root-dir') @raises(NotImplementedError) def test_prepare(self): self.boot_image.prepare() @raises(NotImplementedError) def test_create_initrd(self): self.boot_image.create_initrd() @raises(KiwiBootImageDumpError) @patch_open @patch('pickle.dump') def test_dump_error(self, mock_dump, mock_open): mock_dump.side_effect = Exception self.boot_image.dump('filename') @patch_open @patch('pickle.dump') @patch('kiwi.boot.image.base.BootImageBase.disable_cleanup') def test_dump(self, mock_disable_cleanup, mock_dump, mock_open): 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.boot_image.dump('filename') mock_open.assert_called_once_with('filename', 'wb') mock_dump.assert_called_once_with(self.boot_image, file_mock) mock_disable_cleanup.assert_called_once_with() def test_disable_cleanup(self): self.boot_image.disable_cleanup() assert self.boot_image.call_destructor is False def test_enable_cleanup(self): self.boot_image.enable_cleanup() assert self.boot_image.call_destructor is True @patch('os.listdir') def test_is_prepared(self, mock_listdir): mock_listdir.return_value = True assert self.boot_image.is_prepared() == mock_listdir.return_value @patch('kiwi.boot.image.base.XMLState.copy_strip_sections') def test_import_system_description_elements(self, mock_strip): self.boot_image.import_system_description_elements() assert self.xml_state.copy_displayname.called assert self.xml_state.copy_name.called assert self.xml_state.copy_repository_sections.called assert self.xml_state.copy_drivers_sections.called assert mock_strip.called assert self.xml_state.copy_strip_sections.called assert self.xml_state.copy_preferences_subsections.called assert self.xml_state.copy_bootincluded_packages.called assert self.xml_state.copy_bootincluded_archives.called assert self.xml_state.copy_bootdelete_packages.called assert self.xml_state.copy_build_type_attributes.called assert self.xml_state.copy_systemdisk_section.called assert self.xml_state.copy_machine_section.called assert self.xml_state.copy_oemconfig_section.called @patch('kiwi.defaults.Defaults.get_boot_image_description_path') def test_get_boot_description_directory(self, boot_path): boot_path.return_value = 'boot_path' assert self.boot_image.get_boot_description_directory() == \ 'boot_path/oemboot/suse-13.2' @raises(KiwiConfigFileNotFound) @patch('kiwi.boot.image.base.BootImageBase.get_boot_description_directory') def test_load_boot_xml_description(self, mock_boot_dir): mock_boot_dir.return_value = None self.boot_image.load_boot_xml_description()
class TestBootImageBase: @patch('kiwi.boot.image.base.os.path.exists') @patch('platform.machine') def setup(self, mock_machine, mock_exists): mock_machine.return_value = 'x86_64' self.boot_names_type = namedtuple('boot_names_type', ['kernel_name', 'initrd_name']) self.kernel = Mock() kernel_info = Mock kernel_info.name = 'kernel_name' kernel_info.version = 'kernel_version' self.kernel.get_kernel.return_value = kernel_info self.boot_xml_state = Mock() self.xml_state = Mock() self.xml_state.get_initrd_system = Mock(return_value='dracut') self.xml_state.xml_data.get_name = Mock(return_value='some-image') self.xml_state.get_image_version = Mock(return_value='1.2.3') self.xml_state.build_type.get_boot = Mock( return_value='oemboot/suse-13.2') mock_exists.return_value = True self.boot_image = BootImageBase(self.xml_state, 'some-target-dir', 'system-directory') def test_boot_image_raises(self): with raises(KiwiTargetDirectoryNotFound): BootImageBase(self.xml_state, 'target-dir-does-not-exist', 'some-root-dir') def test_prepare(self): with raises(NotImplementedError): self.boot_image.prepare() def test_create_initrd(self): with raises(NotImplementedError): self.boot_image.create_initrd() @patch('pickle.dump') def test_dump_error(self, mock_dump): mock_dump.side_effect = Exception with patch('builtins.open'): with raises(KiwiBootImageDumpError): self.boot_image.dump('filename') @patch('pickle.dump') def test_dump(self, mock_dump): with patch('builtins.open', create=True) as mock_open: mock_open.return_value = MagicMock(spec=io.IOBase) file_handle = mock_open.return_value.__enter__.return_value self.boot_image.dump('filename') mock_open.assert_called_once_with('filename', 'wb') mock_dump.assert_called_once_with(self.boot_image, file_handle) @patch('os.listdir') def test_is_prepared(self, mock_listdir): mock_listdir.return_value = [] assert self.boot_image.is_prepared() is False mock_listdir.return_value = ['a', 'b', 'c'] assert self.boot_image.is_prepared() is True @patch('kiwi.boot.image.base.XMLState.copy_strip_sections') def test_import_system_description_elements(self, mock_strip): self.boot_image.import_system_description_elements() assert self.xml_state.copy_displayname.called assert self.xml_state.copy_name.called assert self.xml_state.copy_repository_sections.called assert self.xml_state.copy_drivers_sections.called assert mock_strip.called assert self.xml_state.copy_strip_sections.called assert self.xml_state.copy_preferences_subsections.called assert self.xml_state.copy_bootincluded_packages.called assert self.xml_state.copy_bootincluded_archives.called assert self.xml_state.copy_bootdelete_packages.called assert self.xml_state.copy_build_type_attributes.called assert self.xml_state.copy_systemdisk_section.called assert self.xml_state.copy_machine_section.called assert self.xml_state.copy_oemconfig_section.called def test_get_boot_description_directory(self): assert self.boot_image.get_boot_description_directory() == \ '/usr/share/kiwi/custom_boot/oemboot/suse-13.2' @patch('kiwi.boot.image.base.BootImageBase.get_boot_description_directory') def test_load_boot_xml_description(self, mock_boot_dir): mock_boot_dir.return_value = None with raises(KiwiConfigFileNotFound): self.boot_image.load_boot_xml_description() @patch('kiwi.boot.image.base.Kernel') def test_get_boot_names_raises(self, mock_Kernel): kernel = Mock() mock_Kernel.return_value = kernel kernel.get_kernel.return_value = None with raises(KiwiDiskBootImageError): self.boot_image.get_boot_names() @patch('kiwi.boot.image.base.Kernel') @patch('kiwi.boot.image.base.Path.which') @patch('kiwi.boot.image.base.log.warning') @patch('glob.iglob') def test_get_boot_names_default(self, mock_iglob, mock_warning, mock_Path_which, mock_Kernel): mock_iglob.return_value = [] mock_Path_which.return_value = None mock_Kernel.return_value = self.kernel self.xml_state.get_initrd_system.return_value = 'kiwi' assert self.boot_image.get_boot_names() == self.boot_names_type( kernel_name='kernel_name', initrd_name='initrd-kernel_version') self.xml_state.get_initrd_system.return_value = 'dracut' assert self.boot_image.get_boot_names() == self.boot_names_type( kernel_name='kernel_name', initrd_name='initramfs-kernel_version.img') @patch('kiwi.boot.image.base.Kernel') @patch('kiwi.boot.image.base.Path.which') @patch('kiwi.boot.image.base.log.warning') @patch('glob.iglob') @patch('os.path.islink') def test_get_boot_names_from_file(self, mock_islink, mock_iglob, mock_warning, mock_Path_which, mock_Kernel): mock_islink.return_value = False mock_iglob.return_value = ['/boot/initrd.img-kernel_version'] mock_Path_which.return_value = None mock_Kernel.return_value = self.kernel self.xml_state.get_initrd_system.return_value = 'dracut' assert self.boot_image.get_boot_names() == self.boot_names_type( kernel_name='kernel_name', initrd_name='initrd.img-kernel_version') @patch('kiwi.boot.image.base.Kernel') @patch('kiwi.boot.image.base.Path.which') @patch('kiwi.boot.image.base.log.warning') @patch('glob.iglob') def test_get_boot_names_from_dracut(self, mock_iglob, mock_warning, mock_Path_which, mock_Kernel): mock_iglob.return_value = [] mock_Path_which.return_value = 'dracut' mock_Kernel.return_value = self.kernel self.xml_state.get_initrd_system.return_value = 'dracut' with patch('builtins.open', create=True) as mock_open: mock_open.return_value = MagicMock(spec=io.IOBase) file_handle = mock_open.return_value.__enter__.return_value file_handle.read.return_value = 'outfile="/boot/initrd-$kernel"' assert self.boot_image.get_boot_names() == self.boot_names_type( kernel_name='kernel_name', initrd_name='initrd-kernel_version') def test_noop_methods(self): self.boot_image.include_module('module') self.boot_image.omit_module('module') self.boot_image.set_static_modules(['module']) self.boot_image.write_system_config_file({'config_key': 'value'}) self.boot_image.cleanup()
class TestBootImageBase(object): @patch('kiwi.boot.image.base.mkdtemp') @patch('kiwi.boot.image.base.os.path.exists') @patch('platform.machine') def setup(self, mock_machine, mock_exists, mock_mkdtemp): mock_machine.return_value = 'x86_64' self.boot_xml_state = mock.Mock() self.xml_state = mock.Mock() self.xml_state.xml_data.get_name = mock.Mock( return_value='some-image' ) self.xml_state.get_image_version = mock.Mock( return_value='1.2.3' ) self.xml_state.build_type.get_boot = mock.Mock( return_value='oemboot/suse-13.2' ) mock_mkdtemp.return_value = 'boot-root-directory' mock_exists.return_value = True self.boot_image = BootImageBase( self.xml_state, 'some-target-dir' ) mock_mkdtemp.assert_called_once_with( prefix='kiwi_boot_root.', dir='some-target-dir' ) @raises(KiwiTargetDirectoryNotFound) def test_boot_image_raises(self): BootImageBase( self.xml_state, 'target-dir-does-not-exist', 'some-root-dir' ) @raises(NotImplementedError) def test_prepare(self): self.boot_image.prepare() @raises(NotImplementedError) def test_create_initrd(self): self.boot_image.create_initrd() @raises(KiwiBootImageDumpError) @patch_open @patch('pickle.dump') def test_dump_error(self, mock_dump, mock_open): mock_dump.side_effect = Exception self.boot_image.dump('filename') @patch_open @patch('pickle.dump') @patch('kiwi.boot.image.base.BootImageBase.disable_cleanup') def test_dump(self, mock_disable_cleanup, mock_dump, mock_open): 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.boot_image.dump('filename') mock_open.assert_called_once_with('filename', 'wb') mock_dump.assert_called_once_with(self.boot_image, file_mock) mock_disable_cleanup.assert_called_once_with() def test_disable_cleanup(self): self.boot_image.disable_cleanup() assert self.boot_image.call_destructor is False def test_enable_cleanup(self): self.boot_image.enable_cleanup() assert self.boot_image.call_destructor is True @patch('os.listdir') def test_is_prepared(self, mock_listdir): mock_listdir.return_value = True assert self.boot_image.is_prepared() == mock_listdir.return_value @patch('kiwi.boot.image.base.XMLState.copy_strip_sections') def test_import_system_description_elements(self, mock_strip): self.boot_image.import_system_description_elements() assert self.xml_state.copy_displayname.called assert self.xml_state.copy_name.called assert self.xml_state.copy_repository_sections.called assert self.xml_state.copy_drivers_sections.called assert mock_strip.called assert self.xml_state.copy_preferences_subsections.called assert self.xml_state.copy_bootincluded_packages.called assert self.xml_state.copy_bootincluded_archives.called assert self.xml_state.copy_bootdelete_packages.called assert self.xml_state.copy_build_type_attributes.called assert self.xml_state.copy_systemdisk_section.called assert self.xml_state.copy_machine_section.called assert self.xml_state.copy_oemconfig_section.called @patch('kiwi.defaults.Defaults.get_boot_image_description_path') def test_get_boot_description_directory(self, boot_path): boot_path.return_value = 'boot_path' assert self.boot_image.get_boot_description_directory() == \ 'boot_path/oemboot/suse-13.2' @patch('kiwi.boot.image.base.Path.wipe') @patch('os.path.exists') def test_destructor(self, mock_path, mock_wipe): mock_path.return_value = True self.boot_image.__del__() mock_wipe.assert_called_once_with('boot-root-directory')