This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 406be06bf49 CAMEL-19229: upgrade commons-compress to 1.24.0
406be06bf49 is described below
commit 406be06bf49262499f05e162a35b153effe597fd
Author: Otavio Rodolfo Piske <[email protected]>
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 | 3 +-
4 files changed, 133 insertions(+), 19 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 9f802ddf1f6..1da76d6d2b8 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -92,8 +92,7 @@
<commons-codec-version>1.16.0</commons-codec-version>
<commons-collections-version>3.2.2</commons-collections-version>
<commons-collections4-version>4.4</commons-collections4-version>
- <!-- Please check CAMEL-19229 before upgrading -->
- <commons-compress-version>1.21</commons-compress-version>
+ <commons-compress-version>1.24.0</commons-compress-version>
<commons-csv-version>1.10.0</commons-csv-version>
<commons-cli-version>1.4</commons-cli-version>
<commons-dbcp-version>1.4</commons-dbcp-version>