You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/03/26 04:39:36 UTC

[james-project] 05/10: MAILBOX-385 ZipAssert should handle outputStream conversion

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit ab6cf304acf2917080f037dd67271be13c3396e3
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 22 11:24:47 2019 +0700

    MAILBOX-385 ZipAssert should handle outputStream conversion
    
    This technical operation is duplicated in each and every zip test
    
    Note that ZipAssert thus need to be closeable
---
 .../org/apache/james/mailbox/backup/ZipAssert.java | 15 ++++-
 .../apache/james/mailbox/backup/ZipperTest.java    | 70 ++++++++--------------
 .../james/vault/DeletedMessageZipperTest.java      | 17 ++----
 3 files changed, 44 insertions(+), 58 deletions(-)

diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
index cf1c41e..7c46fad 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
@@ -21,6 +21,8 @@ package org.apache.james.mailbox.backup;
 
 import static org.apache.james.mailbox.backup.ZipArchiveEntryAssert.assertThatZipEntry;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
@@ -29,12 +31,13 @@ import java.util.List;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipExtraField;
 import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.assertj.core.api.AbstractAssert;
 import org.assertj.core.error.BasicErrorMessageFactory;
 
 import com.github.steveash.guavate.Guavate;
 
-public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
+public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> implements AutoCloseable {
     interface EntryCheck {
         default EntryCheck compose(EntryCheck other) {
             return assertion -> other.test(this.test(assertion));
@@ -74,10 +77,14 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
         }
     }
 
-    public static ZipAssert assertThatZip(ZipFile zipFile) {
+    static ZipAssert assertThatZip(ZipFile zipFile) {
         return new ZipAssert(zipFile);
     }
 
+    public static ZipAssert assertThatZip(ByteArrayOutputStream outputStream) throws IOException {
+        return assertThatZip(new ZipFile(new SeekableInMemoryByteChannel(outputStream.toByteArray())));
+    }
+
     private static BasicErrorMessageFactory shouldHaveSize(ZipFile zipFile, int expected, int actual) {
         return new BasicErrorMessageFactory("%nExpecting %s to have size %s but was %s", zipFile, expected, actual);
     }
@@ -119,4 +126,8 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
         return myself;
     }
 
+    @Override
+    public void close() throws Exception {
+        zipFile.close();
+    }
 }
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
index e6da066..a7c4ea0 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
@@ -46,8 +46,6 @@ import java.io.ByteArrayOutputStream;
 import java.util.List;
 import java.util.stream.Stream;
 
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -71,8 +69,8 @@ class ZipperTest {
     @Test
     void archiveShouldWriteEmptyValidArchiveWhenNoMessage() throws Exception {
         testee.archive(NO_MAILBOXES, Stream.of(), output);
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile).hasNoEntry();
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.hasNoEntry();
         }
     }
 
@@ -80,9 +78,8 @@ class ZipperTest {
     void archiveShouldWriteOneMessageWhenOne() throws Exception {
         testee.archive(NO_MAILBOXES, Stream.of(MESSAGE_1), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MESSAGE_ID_1.serialize())
                         .hasStringContent(MESSAGE_CONTENT_1));
         }
@@ -92,9 +89,8 @@ class ZipperTest {
     void archiveShouldWriteTwoMessagesWhenTwo() throws Exception {
         testee.archive(NO_MAILBOXES, Stream.of(MESSAGE_1, MESSAGE_2), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MESSAGE_ID_1.serialize())
                         .hasStringContent(MESSAGE_CONTENT_1),
                     hasName(MESSAGE_ID_2.serialize())
@@ -106,9 +102,8 @@ class ZipperTest {
     void archiveShouldWriteMetadata() throws Exception {
         testee.archive(NO_MAILBOXES, Stream.of(MESSAGE_1), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MESSAGE_ID_1.serialize())
                         .containsExtraFields(new SizeExtraField(SIZE_1))
                         .containsExtraFields(new UidExtraField(MESSAGE_UID_1_VALUE))
@@ -123,9 +118,8 @@ class ZipperTest {
     void archiveShouldWriteOneMailboxWhenPresent() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/")
                         .isDirectory());
         }
@@ -135,9 +129,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxesWhenPresent() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_WITHOUT_ANNOTATION, MAILBOX_2_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/")
                         .isDirectory(),
                     hasName(MAILBOX_2.getName() + "/")
@@ -149,9 +142,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxHierarchyWhenPresent() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_WITHOUT_ANNOTATION, MAILBOX_1_SUB_1_WITHOUT_ANNOTATION, MAILBOX_2_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/")
                         .isDirectory(),
                     hasName(MAILBOX_1_SUB_1.getName() + "/")
@@ -165,9 +157,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxHierarchyWhenMissingParent() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_SUB_1_WITHOUT_ANNOTATION, MAILBOX_2_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1_SUB_1.getName() + "/")
                         .isDirectory(),
                     hasName(MAILBOX_2.getName() + "/")
@@ -179,9 +170,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxMetadataWhenPresent() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/")
                         .containsExtraFields(
                             new MailboxIdExtraField(MAILBOX_1.getMailboxId()),
@@ -193,9 +183,8 @@ class ZipperTest {
     void archiveShouldWriteMailBoxWithoutAnAnnotationSubDirWhenEmpty() throws Exception {
         testee.archive(ImmutableList.of(MAILBOX_1_WITHOUT_ANNOTATION), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/")
                 );
         }
@@ -205,9 +194,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxAnnotationsInASubDirWhenPresent() throws Exception {
         testee.archive(ImmutableList.of(new MailboxWithAnnotations(MAILBOX_1, WITH_ANNOTATION_1)), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/"),
                     hasName(MAILBOX_1.getName() + "/annotations/").isDirectory(),
                     hasName(MAILBOX_1.getName() + "/annotations/" + ANNOTATION_1.getKey().asString())
@@ -219,9 +207,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxAnnotationsInASubDirWhenTwoPresent() throws Exception {
         testee.archive(ImmutableList.of(new MailboxWithAnnotations(MAILBOX_1, WITH_ANNOTATION_1_AND_2)), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/"),
                     hasName(MAILBOX_1.getName() + "/annotations/").isDirectory(),
                     hasName(MAILBOX_1.getName() + "/annotations/" + ANNOTATION_1.getKey().asString())
@@ -236,9 +223,8 @@ class ZipperTest {
     void archiveShouldWriteMailboxAnnotationsInASubDirWhenTwoPresentWithTheSameName() throws Exception {
         testee.archive(ImmutableList.of(new MailboxWithAnnotations(MAILBOX_1, ImmutableList.of(ANNOTATION_1, ANNOTATION_1_BIS))), Stream.of(), output);
 
-        try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(output)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MAILBOX_1.getName() + "/"),
                     hasName(MAILBOX_1.getName() + "/annotations/").isDirectory(),
                     hasName(MAILBOX_1.getName() + "/annotations/" + ANNOTATION_1.getKey().asString())
@@ -248,8 +234,4 @@ class ZipperTest {
                 );
         }
     }
-
-    private SeekableInMemoryByteChannel toSeekableByteChannel(ByteArrayOutputStream output) {
-        return new SeekableInMemoryByteChannel(output.toByteArray());
-    }
 }
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
index 9ae108f..3f59798 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
@@ -49,10 +49,9 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Stream;
 
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.apache.james.mailbox.backup.MessageIdExtraField;
 import org.apache.james.mailbox.backup.SizeExtraField;
+import org.apache.james.mailbox.backup.ZipAssert;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.stubbing.Answer;
@@ -75,9 +74,8 @@ class DeletedMessageZipperTest {
 
         zipper.zip(CONTENT_LOADER, Stream.of(DELETED_MESSAGE, DELETED_MESSAGE_2), outputStream);
 
-        try (ZipFile zipFile = zipFile(outputStream)) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(outputStream)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MESSAGE_ID.serialize()).hasStringContent(MESSAGE_CONTENT),
                     hasName(MESSAGE_ID_2.serialize()).hasStringContent(MESSAGE_CONTENT));
         }
@@ -89,9 +87,8 @@ class DeletedMessageZipperTest {
 
         zipper.zip(CONTENT_LOADER, Stream.of(DELETED_MESSAGE), outputStream);
 
-        try (ZipFile zipFile = zipFile(outputStream)) {
-            assertThatZip(zipFile)
-                .containsOnlyEntriesMatching(
+        try (ZipAssert zipAssert = assertThatZip(outputStream)) {
+            zipAssert.containsOnlyEntriesMatching(
                     hasName(MESSAGE_ID.serialize())
                         .containsExtraFields(new MessageIdExtraField(MESSAGE_ID))
                         .containsExtraFields(new SizeExtraField(CONTENT.length)));
@@ -194,10 +191,6 @@ class DeletedMessageZipperTest {
         verify(zipOutputStreamReference.get(), times(1)).close();
     }
 
-    private ZipFile zipFile(ByteArrayOutputStream output) throws IOException {
-        return new ZipFile(new SeekableInMemoryByteChannel(output.toByteArray()));
-    }
-
     private DeletedMessageZipper.DeletedMessageContentLoader spyLoadedContents(Collection<InputStream> loadedContents) {
         Answer<InputStream> spyedContent = invocationOnMock -> {
             InputStream result = spy(new ByteArrayInputStream(CONTENT));


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org