From 628faf901555f926ad4d9b7294b0be166a215a38 Mon Sep 17 00:00:00 2001 From: ralph isenmann Date: Thu, 27 Jan 2022 16:13:08 +0100 Subject: [Util] Change Tar Dependence to apache commens-compress, fixes #3888 --- pom.xml | 6 +-- src/main/java/org/openslx/util/TarArchiveUtil.java | 36 +++++++++-------- .../java/org/openslx/util/TarArchiveUtilTest.java | 45 ++++++++++++++++++++++ 3 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 src/test/java/org/openslx/util/TarArchiveUtilTest.java diff --git a/pom.xml b/pom.xml index a003d1e..ad04c5b 100644 --- a/pom.xml +++ b/pom.xml @@ -213,9 +213,9 @@ compile - org.kamranzafar - jtar - [2.0,3.0) + org.apache.commons + commons-compress + [1.21,2.0) compile diff --git a/src/main/java/org/openslx/util/TarArchiveUtil.java b/src/main/java/org/openslx/util/TarArchiveUtil.java index 20af003..d691166 100644 --- a/src/main/java/org/openslx/util/TarArchiveUtil.java +++ b/src/main/java/org/openslx/util/TarArchiveUtil.java @@ -1,9 +1,8 @@ package org.openslx.util; -import org.kamranzafar.jtar.TarEntry; -import org.kamranzafar.jtar.TarHeader; -import org.kamranzafar.jtar.TarInputStream; -import org.kamranzafar.jtar.TarOutputStream; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -12,7 +11,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; - import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -23,9 +21,8 @@ public class TarArchiveUtil { public static class TarArchiveReader implements AutoCloseable { private boolean isCompressed; - private final TarInputStream tarInputStream; - - private TarEntry currentEntry = null; + private final TarArchiveInputStream tarInputStream; + private TarArchiveEntry currentEntry = null; public TarArchiveReader(InputStream in) throws IOException { this(in,true,false); @@ -43,11 +40,11 @@ public class TarArchiveUtil { stream = new GZIPInputStream(stream); } - this.tarInputStream = new TarInputStream(stream); + this.tarInputStream = new TarArchiveInputStream(stream); } public boolean hasNextEntry() throws IOException { - this.currentEntry = this.tarInputStream.getNextEntry(); + this.currentEntry = this.tarInputStream.getNextTarEntry(); if (this.currentEntry != null) { return true; } else { @@ -56,6 +53,9 @@ public class TarArchiveUtil { } public String getEntryName() { + if (this.currentEntry == null) + return null; + return this.currentEntry.getName(); } @@ -82,7 +82,8 @@ public class TarArchiveUtil { { private boolean isBuffered; private boolean isCompressed; - private final TarOutputStream tarOutputStream; + // private final TarOutputStream tarOutputStream; + private final TarArchiveOutputStream tarOutputStream; public TarArchiveWriter (OutputStream out) throws IOException { this(out, true, true); @@ -102,7 +103,7 @@ public class TarArchiveUtil { stream = new GZIPOutputStream(stream); } - this.tarOutputStream = new TarOutputStream(stream); + this.tarOutputStream = new TarArchiveOutputStream(stream); } public void writeFile(String filename, String data) throws IOException { @@ -121,13 +122,18 @@ public class TarArchiveUtil { private void putFile(String filename, byte[] data) throws IOException { if (data == null) return; - tarOutputStream.putNextEntry(new TarEntry(TarHeader.createHeader(filename, - data.length, Util.unixTime(), false, 0644))); + + TarArchiveEntry entry = new TarArchiveEntry(filename); + entry.setSize(data.length); + entry.setModTime(System.currentTimeMillis()); + entry.setMode(0644); + tarOutputStream.putArchiveEntry(entry); tarOutputStream.write(data); + tarOutputStream.closeArchiveEntry(); } @Override - public void close() throws Exception { + public void close() throws IOException { tarOutputStream.close(); } } diff --git a/src/test/java/org/openslx/util/TarArchiveUtilTest.java b/src/test/java/org/openslx/util/TarArchiveUtilTest.java new file mode 100644 index 0000000..5df5202 --- /dev/null +++ b/src/test/java/org/openslx/util/TarArchiveUtilTest.java @@ -0,0 +1,45 @@ +package org.openslx.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.openslx.util.TarArchiveUtil.TarArchiveReader; +import org.openslx.util.TarArchiveUtil.TarArchiveWriter; + +public class TarArchiveUtilTest { + + @Test + @DisplayName( "Test creating tgz file" ) + public void testCreateTarGz() throws IOException + { + // dummy content + final String DUMMY_FILENAME = "test"; + final String DUMMY_FILE_DATA = "Hello World"; + + // create targz file with dummy content + ByteArrayOutputStream out = new ByteArrayOutputStream(); + TarArchiveWriter tarArchiveWriter = new TarArchiveWriter(out); + + tarArchiveWriter.writeFile(DUMMY_FILENAME, DUMMY_FILE_DATA); + tarArchiveWriter.close(); + + + // read created targz file, + ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + TarArchiveReader tarArchiveReader = new TarArchiveReader(in, true, true); + + assertTrue(tarArchiveReader.hasNextEntry(), "Tar Archive should contain a file"); + assertEquals(DUMMY_FILENAME, tarArchiveReader.getEntryName()); + + String test_string = new String(tarArchiveReader.readCurrentEntry(), StandardCharsets.UTF_8); + assertEquals(DUMMY_FILE_DATA, test_string); + tarArchiveReader.close(); + } +} -- cgit v1.2.3-55-g7522