def test_fix_boot_catalog(self, mock_open): mock_open.return_value = self.context_manager_mock volume_descriptor = \ 'CD001' + '_' * (0x08c - 0x5) + '0x1d5f23a' eltorito_descriptor = \ 'EL TORITO SPECIFICATION' + '_' * (0x47 - 0x17) + '0x1d5f23a' boot_catalog = '_' * 64 + struct.pack('B', 0x88) + '_' * 32 read_results = [boot_catalog, eltorito_descriptor, volume_descriptor] def side_effect(arg): return read_results.pop() self.file_mock.read.side_effect = side_effect Iso.fix_boot_catalog('isofile') if sys.byteorder == 'big': assert self.file_mock.write.call_args_list == [ call('_' * 44 + '\x01Legacy (isolinux)\x00\x00\x91\xef\x00\x01' + '\x00' * 28 + '\x88___________\x01UEFI (grub)' + '\x00' * 8) ] else: assert self.file_mock.write.call_args_list == [ call('_' * 44 + '\x01Legacy (isolinux)\x00\x00\x91\xef\x01' + '\x00' * 29 + '\x88___________\x01UEFI (grub)' + '\x00' * 8) ]
def test_iso_metadata_path_table_sector_invalid(self, mock_open): mock_open.return_value = self.context_manager_mock read_results = [bytes(b'EL TORITO SPECIFICATION'), bytes(b'CD001')] def side_effect(arg): return read_results.pop() self.file_mock.read.side_effect = side_effect Iso.fix_boot_catalog('isofile')
def test_iso_metadata_catalog_sector_invalid(self, mock_open): mock_open.return_value = self.context_manager_mock volume_descriptor = \ bytes(b'CD001') + bytes(b'_') * (0x08c - 0x5) + bytes(b'0x1d5f23a') read_results = [bytes(b'EL TORITO SPECIFICATION'), volume_descriptor] def side_effect(arg): return read_results.pop() self.file_mock.read.side_effect = side_effect Iso.fix_boot_catalog('isofile')
def test_iso_metadata_catalog_invalid(self, mock_open): mock_open.return_value = self.context_manager_mock volume_descriptor = \ 'CD001' + '_' * (0x08c - 0x5) + '0x1d5f23a' eltorito_descriptor = \ 'EL TORITO SPECIFICATION' + '_' * (0x47 - 0x17) + '0x1d5f23a' read_results = [eltorito_descriptor, volume_descriptor] def side_effect(arg): return read_results.pop() self.file_mock.read.side_effect = side_effect Iso.fix_boot_catalog('isofile')
def test_fix_boot_catalog(self, mock_open): mock_open.return_value = self.context_manager_mock volume_descriptor = \ bytes(b'CD001') + bytes(b'_') * (0x08c - 0x5) + bytes(b'0x1d5f23a') eltorito_descriptor = \ bytes(b'EL TORITO SPECIFICATION') + \ bytes(b'_') * (0x47 - 0x17) + bytes(b'0x1d5f23a') boot_catalog = bytes(b'_') * 64 + struct.pack('B', 0x88) + \ bytes(b'_') * 32 read_results = [ boot_catalog, eltorito_descriptor, volume_descriptor ] def side_effect(arg): return read_results.pop() self.file_mock.read.side_effect = side_effect Iso.fix_boot_catalog('isofile') if sys.byteorder == 'big': assert self.file_mock.write.call_args_list == [ call( bytes(b'_') * 44 + bytes(b'\x01Legacy (isolinux)\x00\x00\x91\xef\x00\x01') + bytes(b'\x00') * 28 + bytes(b'\x88___________\x01UEFI (grub)') + bytes(b'\x00') * 8 ) ] else: assert self.file_mock.write.call_args_list == [ call( bytes(b'_') * 44 + bytes(b'\x01Legacy (isolinux)\x00\x00\x91\xef\x01') + bytes(b'\x00') * 29 + bytes(b'\x88___________\x01UEFI (grub)') + bytes(b'\x00') * 8 ) ]
def create_on_file(self, filename, label=None, exclude=None): """ Create iso filesystem from data tree There is no label which could be set for iso filesystem thus this parameter is not used :param string filename: result file path name :param string label: unused :param string exclude: unused """ iso = Iso(self.root_dir) iso.init_iso_creation_parameters( self.custom_args['create_options'] ) iso.add_efi_loader_parameters() Command.run( [ self._find_iso_creation_tool() ] + iso.get_iso_creation_parameters() + [ '-o', filename, self.root_dir ] ) hybrid_offset = iso.create_header_end_block(filename) Command.run( [ self._find_iso_creation_tool(), '-hide', iso.header_end_name, '-hide-joliet', iso.header_end_name ] + iso.get_iso_creation_parameters() + [ '-o', filename, self.root_dir ] ) iso.relocate_boot_catalog(filename) iso.fix_boot_catalog(filename) return hybrid_offset
def test_iso_metadata_not_bootable(self, mock_open): mock_open.return_value = self.context_manager_mock self.file_mock.read.return_value = bytes(b'CD001') Iso.fix_boot_catalog('isofile')
def test_iso_metadata_iso9660_invalid(self, mock_open): mock_open.return_value = self.context_manager_mock self.file_mock.read.return_value = bytes(b'bogus') Iso.fix_boot_catalog('isofile')