def create_image_format(self) -> None: """ Create GCE disk format and manifest """ gce_tar_ball_file_list = [] temp_image_dir = Temporary(prefix='kiwi_gce_subformat.', dir=self.target_dir).new_dir() diskname = ''.join([ self.target_dir, '/', self.xml_state.xml_data.get_name(), '.' + self.arch, '-' + self.xml_state.get_image_version(), '.raw' ]) if self.tag: with open(temp_image_dir.name + '/manifest.json', 'w') as manifest: manifest.write('{"licenses": ["%s"]}' % self.tag) gce_tar_ball_file_list.append('manifest.json') Command.run(['cp', diskname, temp_image_dir.name + '/disk.raw']) gce_tar_ball_file_list.append('disk.raw') archive_name = os.path.basename( self.get_target_file_path_for_format(self.image_format)) # delete the '.gz' suffix from the name. The suffix is appended by # the archive creation method depending on the creation type. archive_name = archive_name.replace('.gz', '') archive = ArchiveTar(filename=self.target_dir + '/' + archive_name, file_list=gce_tar_ball_file_list) archive.create_gnu_gzip_compressed(temp_image_dir.name)
class TestArchiveTar(object): def setup(self): self.archive = ArchiveTar('foo.tar') @patch('kiwi.archive.tar.Command.run') def test_extract(self, mock_command): self.archive.extract('destination') mock_command.assert_called_once_with( ['tar', '-C', 'destination', '-x', '-v', '-f', 'foo.tar']) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir') mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') def test_create_from_dir_with_excludes(self, mock_command): archive = ArchiveTar('foo.tar', False) archive.create('source-dir', ['foo', 'bar']) mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', '.', '--exclude', './foo', '--exclude', './bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create_xz_compressed('source-dir') mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-J', '-f', 'foo.tar.xz', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_gnu_gzip_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create_gnu_gzip_compressed('source-dir') mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--format=gnu', '-cSz', '-f', 'foo.tar.gz', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_exclude(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir', ['foo']) mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'bar' ])
def create_image_format(self): """ Create GCE disk format and manifest """ gce_tar_ball_file_list = [] self.temp_image_dir = mkdtemp( prefix='kiwi_gce_subformat.', dir=self.target_dir ) diskname = ''.join( [ self.target_dir, '/', self.xml_state.xml_data.get_name(), '.' + self.arch, '-' + self.xml_state.get_image_version(), '.raw' ] ) if self.tag: with open(self.temp_image_dir + '/manifest.json', 'w') as manifest: manifest.write('{"licenses": ["%s"]}' % self.tag) gce_tar_ball_file_list.append('manifest.json') Command.run( ['cp', diskname, self.temp_image_dir + '/disk.raw'] ) gce_tar_ball_file_list.append('disk.raw') archive_name = os.path.basename( self.get_target_file_path_for_format(self.image_format) ) # delete the '.gz' suffix from the name. The suffix is appended by # the archive creation method depending on the creation type. archive_name = archive_name.replace('.gz', '') archive = ArchiveTar( filename=self.target_dir + '/' + archive_name, file_list=gce_tar_ball_file_list ) archive.create_gnu_gzip_compressed( self.temp_image_dir )
class TestArchiveTar(object): @patch('kiwi.archive.tar.Command.run') def setup(self, mock_command): command = mock.Mock() command.output = 'version 1.27.0' mock_command.return_value = command self.archive = ArchiveTar('foo.tar') @raises(KiwiCommandCapabilitiesError) @patch('kiwi.archive.tar.Command.run') def test_invalid_tar_command_version(self, mock_command): command = mock.Mock() command.output = 'version cannot be parsed' mock_command.return_value = command self.archive = ArchiveTar('foo.tar') @patch('kiwi.archive.tar.Command.run') def test_extract(self, mock_command): self.archive.extract('destination') mock_command.assert_called_once_with( ['tar', '-C', 'destination', '-x', '-v', '-f', 'foo.tar']) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir') == 'foo.tar' mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') def test_append_files(self, mock_command): assert self.archive.append_files('source-dir', ['foo', 'bar']) \ == 'foo.tar' mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '-r', '--file=' + self.archive.filename, '--xattrs', '--xattrs-include=*', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_with_options(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir', options=['--fake-option', 'fake_arg']) == 'foo.tar' mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--fake-option', 'fake_arg', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_with_old_tar_version(self, mock_os_dir, mock_command): command = mock.Mock() command.output = 'version 1.26.1' mock_command.return_value = command archive = ArchiveTar('foo.tar') mock_os_dir.return_value = ['foo', 'bar'] assert archive.create('source-dir') == 'foo.tar' calls = [ call(['tar', '--version']), call([ 'tar', '-C', 'source-dir', '-c', '-f', 'foo.tar', 'foo', 'bar' ]) ] mock_command.assert_has_calls(calls) assert mock_command.call_count == 2 @patch('kiwi.archive.tar.Command.run') def test_create_from_dir_with_excludes(self, mock_command): command = mock.Mock() command.output = 'version 1.27.0' mock_command.return_value = command archive = ArchiveTar('foo.tar', False) assert archive.create('source-dir', ['foo', 'bar']) == 'foo.tar' calls = [ call(['tar', '--version']), call([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', '.', '--exclude', './foo', '--exclude', './bar' ]) ] mock_command.assert_has_calls(calls) assert mock_command.call_count == 2 @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_xz_compressed('source-dir') == 'foo.tar.xz' mock_command.assert_called_once_with([ 'bash', '-c', ' '.join([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '--to-stdout', 'foo', 'bar', '|', 'xz', '-f', '--threads=0', '>', 'foo.tar.xz' ]) ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed_with_custom_xz_options( self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_xz_compressed('source-dir', xz_options=['-a', '-b' ]) == 'foo.tar.xz' mock_command.assert_called_once_with([ 'bash', '-c', ' '.join([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '--to-stdout', 'foo', 'bar', '|', 'xz', '-f', '-a', '-b', '>', 'foo.tar.xz' ]) ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_gnu_gzip_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_gnu_gzip_compressed('source-dir') \ == 'foo.tar.gz' mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--format=gnu', '-cSz', '-f', 'foo.tar.gz', 'foo', 'bar' ]) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_exclude(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir', ['foo']) == 'foo.tar' mock_command.assert_called_once_with([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'bar' ])
class TestArchiveTar(object): @patch('kiwi.archive.tar.Command.run') def setup(self, mock_command): command = mock.Mock() command.output = 'version 1.27.0' mock_command.return_value = command self.archive = ArchiveTar('foo.tar') @raises(KiwiCommandCapabilitiesError) @patch('kiwi.archive.tar.Command.run') def test_invalid_tar_command_version(self, mock_command): command = mock.Mock() command.output = 'version cannot be parsed' mock_command.return_value = command self.archive = ArchiveTar('foo.tar') @patch('kiwi.archive.tar.Command.run') def test_extract(self, mock_command): self.archive.extract('destination') mock_command.assert_called_once_with( ['tar', '-C', 'destination', '-x', '-v', '-f', 'foo.tar'] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir') == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') def test_append_files(self, mock_command): assert self.archive.append_files('source-dir', ['foo', 'bar']) \ == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '-r', '--file=' + self.archive.filename, '--xattrs', '--xattrs-include=*', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_with_options(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir', options=[ '--fake-option', 'fake_arg' ]) == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--fake-option', 'fake_arg', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_with_old_tar_version(self, mock_os_dir, mock_command): command = mock.Mock() command.output = 'version 1.26.1' mock_command.return_value = command archive = ArchiveTar('foo.tar') mock_os_dir.return_value = ['foo', 'bar'] assert archive.create('source-dir') == 'foo.tar' calls = [ call(['tar', '--version']), call( [ 'tar', '-C', 'source-dir', '-c', '-f', 'foo.tar', 'foo', 'bar' ] ) ] mock_command.assert_has_calls(calls) assert mock_command.call_count == 2 @patch('kiwi.archive.tar.Command.run') def test_create_from_dir_with_excludes(self, mock_command): command = mock.Mock() command.output = 'version 1.27.0' mock_command.return_value = command archive = ArchiveTar('foo.tar', False) assert archive.create('source-dir', ['foo', 'bar']) == 'foo.tar' calls = [ call(['tar', '--version']), call( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', '.', '--exclude', './foo', '--exclude', './bar' ] ) ] mock_command.assert_has_calls(calls) assert mock_command.call_count == 2 @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_xz_compressed('source-dir') == 'foo.tar.xz' mock_command.assert_called_once_with( [ 'bash', '-c', ' '.join([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '--to-stdout', 'foo', 'bar', '|', 'xz', '-f', '--threads=0', '>', 'foo.tar.xz' ]) ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed_with_custom_xz_options( self, mock_os_dir, mock_command ): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_xz_compressed( 'source-dir', xz_options=['-a', '-b'] ) == 'foo.tar.xz' mock_command.assert_called_once_with( [ 'bash', '-c', ' '.join([ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '--to-stdout', 'foo', 'bar', '|', 'xz', '-f', '-a', '-b', '>', 'foo.tar.xz' ]) ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_gnu_gzip_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create_gnu_gzip_compressed('source-dir') \ == 'foo.tar.gz' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--format=gnu', '-cSz', '-f', 'foo.tar.gz', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_exclude(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] assert self.archive.create('source-dir', ['foo']) == 'foo.tar' mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'bar' ] )
class TestArchiveTar(object): def setup(self): self.archive = ArchiveTar('foo.tar') @patch('kiwi.archive.tar.Command.run') def test_extract(self, mock_command): self.archive.extract('destination') mock_command.assert_called_once_with( ['tar', '-C', 'destination', '-x', '-v', '-f', 'foo.tar'] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir') mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') def test_create_from_dir_with_excludes(self, mock_command): archive = ArchiveTar('foo.tar', False) archive.create('source-dir', ['foo', 'bar']) mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', '.', '--exclude', './foo', '--exclude', './bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_xz_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create_xz_compressed('source-dir') mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-J', '-f', 'foo.tar.xz', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_gnu_gzip_compressed(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create_gnu_gzip_compressed('source-dir') mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--format=gnu', '-cSz', '-f', 'foo.tar.gz', 'foo', 'bar' ] ) @patch('kiwi.archive.tar.Command.run') @patch('os.listdir') def test_create_exclude(self, mock_os_dir, mock_command): mock_os_dir.return_value = ['foo', 'bar'] self.archive.create('source-dir', ['foo']) mock_command.assert_called_once_with( [ 'tar', '-C', 'source-dir', '--xattrs', '--xattrs-include=*', '-c', '-f', 'foo.tar', 'bar' ] )