This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-3.21.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8fa9b8465f8d31120c17e88cd3055e6f7dd245a0 Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Wed Sep 27 09:26:28 2023 +0200 CAMEL-19229: upgrade commons-compress to 1.24.0 --- .../tarfile/SpringTarFileDataFormatTest.java | 44 +++++++++++-- .../dataformat/tarfile/TarFileDataFormatTest.java | 72 ++++++++++++++++++---- .../apache/camel/dataformat/tarfile/TarUtils.java | 33 ++++++++++ parent/pom.xml | 2 +- 4 files changed, 133 insertions(+), 18 deletions(-) diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java index 62a14569b17..b442d407962 100644 --- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java +++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java @@ -17,6 +17,8 @@ package org.apache.camel.dataformat.tarfile; import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.camel.Exchange; @@ -28,11 +30,11 @@ import org.junit.jupiter.api.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import static java.nio.charset.StandardCharsets.UTF_8; -import static java.util.Collections.singletonList; import static org.apache.camel.Exchange.FILE_NAME; import static org.apache.camel.dataformat.tarfile.TarUtils.TEXT; import static org.apache.camel.dataformat.tarfile.TarUtils.getBytes; import static org.apache.camel.dataformat.tarfile.TarUtils.getTaredText; +import static org.apache.camel.dataformat.tarfile.TarUtils.toEntries; import static org.apache.camel.test.junit5.TestSupport.deleteDirectory; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -53,7 +55,14 @@ public class SpringTarFileDataFormatTest extends CamelSpringTestSupport { Exchange exchange = mock.getReceivedExchanges().get(0); assertEquals(exchange.getIn().getMessageId() + ".tar", exchange.getIn().getHeader(FILE_NAME)); - assertArrayEquals(getTaredText(exchange.getIn().getMessageId()), exchange.getIn().getBody(byte[].class)); + + final byte[] resultArray = exchange.getIn().getBody(byte[].class); + Map<String, TarUtils.EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey(exchange.getIn().getMessageId())); + + TarUtils.EntryMetadata entryMetadata = tarData.get(exchange.getIn().getMessageId()); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -67,7 +76,15 @@ public class SpringTarFileDataFormatTest extends CamelSpringTestSupport { MockEndpoint.assertIsSatisfied(context); Exchange exchange = mock.getReceivedExchanges().get(0); - assertArrayEquals(getTaredText("poem.txt"), exchange.getIn().getBody(byte[].class)); + + final byte[] convertedArray = exchange.getIn().getBody(byte[].class); + + Map<String, TarUtils.EntryMetadata> tarData = toEntries(convertedArray); + assertTrue(tarData.containsKey("poem.txt")); + + TarUtils.EntryMetadata entryMetadata = tarData.get("poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -114,7 +131,15 @@ public class SpringTarFileDataFormatTest extends CamelSpringTestSupport { Exchange exchange = mock.getReceivedExchanges().get(0); File file = new File(TEST_DIR, exchange.getIn().getMessageId() + ".tar"); assertTrue(file.exists()); - assertArrayEquals(getTaredText(exchange.getIn().getMessageId()), getBytes(file)); + + final byte[] resultArray = getBytes(file); + + Map<String, TarUtils.EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey(exchange.getIn().getMessageId())); + + TarUtils.EntryMetadata entryMetadata = tarData.get(exchange.getIn().getMessageId()); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -136,12 +161,19 @@ public class SpringTarFileDataFormatTest extends CamelSpringTestSupport { assertTrue(notify.matches(5, TimeUnit.SECONDS)); assertTrue(file.exists()); - assertArrayEquals(getTaredText("poem.txt"), getBytes(file)); + + final byte[] resultArray = getBytes(file); + + Map<String, TarUtils.EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey("poem.txt")); + + TarUtils.EntryMetadata entryMetadata = tarData.get("poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test public void testDslTar() throws Exception { - getMockEndpoint("mock:dslTar").expectedBodiesReceived(singletonList(getTaredText("poem.txt"))); getMockEndpoint("mock:dslTar").expectedHeaderReceived(FILE_NAME, "poem.txt.tar"); template.sendBodyAndHeader("direct:dslTar", TEXT, FILE_NAME, "poem.txt"); diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java index ff6204126fd..958509a756b 100644 --- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java +++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java @@ -26,6 +26,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Iterator; +import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.camel.CamelExecutionException; @@ -34,8 +35,8 @@ import org.apache.camel.Processor; import org.apache.camel.builder.NotifyBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.dataformat.tarfile.TarUtils.EntryMetadata; import org.apache.camel.test.junit5.CamelTestSupport; -import org.apache.camel.util.ObjectHelper; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; @@ -46,7 +47,7 @@ import static org.apache.camel.Exchange.FILE_NAME; import static org.apache.camel.dataformat.tarfile.TarUtils.TEXT; import static org.apache.camel.dataformat.tarfile.TarUtils.getBytes; import static org.apache.camel.dataformat.tarfile.TarUtils.getTaredText; -import static org.apache.camel.dataformat.tarfile.TarUtils.getTaredTextInFolder; +import static org.apache.camel.dataformat.tarfile.TarUtils.toEntries; import static org.apache.camel.test.junit5.TestSupport.deleteDirectory; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -72,8 +73,15 @@ public class TarFileDataFormatTest extends CamelTestSupport { Exchange exchange = mock.getReceivedExchanges().get(0); assertEquals(exchange.getIn().getMessageId() + ".tar", exchange.getIn().getHeader(FILE_NAME)); - assertTrue(ObjectHelper.equalByteArray(getTaredText(exchange.getIn().getMessageId()), - exchange.getIn().getBody(byte[].class))); + + final byte[] resultArray = exchange.getIn().getBody(byte[].class); + + Map<String, EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey(exchange.getIn().getMessageId())); + + EntryMetadata entryMetadata = tarData.get(exchange.getIn().getMessageId()); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -87,7 +95,15 @@ public class TarFileDataFormatTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); Exchange exchange = mock.getReceivedExchanges().get(0); - assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), exchange.getIn().getBody(byte[].class))); + + final byte[] convertedArray = exchange.getIn().getBody(byte[].class); + + Map<String, EntryMetadata> tarData = toEntries(convertedArray); + assertTrue(tarData.containsKey("poem.txt")); + + EntryMetadata entryMetadata = tarData.get("poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -101,7 +117,14 @@ public class TarFileDataFormatTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); Exchange exchange = mock.getReceivedExchanges().get(0); - assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), exchange.getIn().getBody(byte[].class))); + final byte[] convertedArray = exchange.getIn().getBody(byte[].class); + + Map<String, EntryMetadata> tarData = toEntries(convertedArray); + assertTrue(tarData.containsKey("poem.txt")); + + EntryMetadata entryMetadata = tarData.get("poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -117,8 +140,19 @@ public class TarFileDataFormatTest extends CamelTestSupport { MockEndpoint.assertIsSatisfied(context); Exchange exchange = mock.getReceivedExchanges().get(0); - assertTrue(ObjectHelper.equalByteArray(getTaredTextInFolder("poems/", "poems/poem.txt"), - exchange.getIn().getBody(byte[].class))); + + final byte[] convertedArray = exchange.getIn().getBody(byte[].class); + + Map<String, EntryMetadata> tarData = toEntries(convertedArray); + assertTrue(tarData.containsKey("poems/")); + assertTrue(tarData.containsKey("poems/poem.txt")); + + EntryMetadata entryFileMetadata = tarData.get("poems/poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryFileMetadata.size); + assertFalse(entryFileMetadata.isDirectory); + + EntryMetadata entryDirMetadata = tarData.get("poems/"); + assertTrue(entryDirMetadata.isDirectory); } @Test @@ -173,7 +207,15 @@ public class TarFileDataFormatTest extends CamelTestSupport { Exchange exchange = mock.getReceivedExchanges().get(0); File file = new File(TEST_DIR, exchange.getIn().getMessageId() + ".tar"); assertTrue(file.exists()); - assertTrue(ObjectHelper.equalByteArray(getTaredText(exchange.getIn().getMessageId()), getBytes(file))); + + final byte[] resultArray = getBytes(file); + + Map<String, EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey(exchange.getIn().getMessageId())); + + EntryMetadata entryMetadata = tarData.get(exchange.getIn().getMessageId()); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); } @Test @@ -195,12 +237,20 @@ public class TarFileDataFormatTest extends CamelTestSupport { assertTrue(notify.matches(5, TimeUnit.SECONDS)); assertTrue(file.exists()); - assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), getBytes(file))); + + final byte[] resultArray = getBytes(file); + + Map<String, EntryMetadata> tarData = toEntries(resultArray); + assertTrue(tarData.containsKey("poem.txt")); + + EntryMetadata entryMetadata = tarData.get("poem.txt"); + assertEquals(TEXT.getBytes(StandardCharsets.UTF_8).length, entryMetadata.size); + assertFalse(entryMetadata.isDirectory); + } @Test public void testDslTar() throws Exception { - getMockEndpoint("mock:dslTar").expectedBodiesReceived((Object) getTaredText("poem.txt")); getMockEndpoint("mock:dslTar").expectedHeaderReceived(FILE_NAME, "poem.txt.tar"); template.sendBodyAndHeader("direct:dslTar", TEXT, FILE_NAME, "poem.txt"); diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarUtils.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarUtils.java index c5b859f31bb..683b0da800f 100644 --- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarUtils.java +++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarUtils.java @@ -21,9 +21,14 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import org.apache.camel.util.IOHelper; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; final class TarUtils { @@ -91,4 +96,32 @@ final class TarUtils { return baos.toByteArray(); } + static class EntryMetadata { + public final long size; + public final boolean isDirectory; + + public EntryMetadata(long size, boolean isDirectory) { + this.size = size; + this.isDirectory = isDirectory; + } + } + + static Map<String, EntryMetadata> toEntries(byte[] tarFileBytes) throws IOException { + Map<String, EntryMetadata> ret = new HashMap<>(); + try (ArchiveInputStream i = new TarArchiveInputStream(new ByteArrayInputStream(tarFileBytes))) { + ArchiveEntry entry = null; + + while ((entry = i.getNextEntry()) != null) { + if (!i.canReadEntryData(entry)) { + // log something? + continue; + } + + ret.put(entry.getName(), new EntryMetadata(entry.getSize(), entry.isDirectory())); + } + } + + return ret; + } + } diff --git a/parent/pom.xml b/parent/pom.xml index b617b55bf03..4a7555288aa 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -111,7 +111,7 @@ <commons-codec-version>1.15</commons-codec-version> <commons-collections-version>3.2.2</commons-collections-version> <commons-collections4-version>4.4</commons-collections4-version> - <commons-compress-version>1.21</commons-compress-version> + <commons-compress-version>1.24</commons-compress-version> <commons-configuration-version>1.9</commons-configuration-version> <commons-configuration2-version>2.8.0</commons-configuration2-version> <commons-csv-version>1.8</commons-csv-version>