JAMES-2426 Relax and test ZipAsserts Order can not be enforced as it highly depends on common-compress internals.
This commit makes the choice to enforce order by natural entry-name order so that we have a reference order. The downside is that entry names needs to be present. Also, extra field ordering had been relaxed. Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/32ed4d8b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/32ed4d8b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/32ed4d8b Branch: refs/heads/master Commit: 32ed4d8b721f719b7c0c89f76605f634089d1841 Parents: feb1801 Author: benwa <[email protected]> Authored: Mon Jun 18 12:06:16 2018 +0700 Committer: benwa <[email protected]> Committed: Tue Jun 19 15:07:55 2018 +0700 ---------------------------------------------------------------------- .../mailbox/backup/ZipArchiveEntryAssert.java | 26 +- .../apache/james/mailbox/backup/ZipAssert.java | 52 ++- .../james/mailbox/backup/ZipAssertTest.java | 328 +++++++++++++++++++ .../apache/james/mailbox/backup/ZipperTest.java | 28 +- 4 files changed, 397 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java ---------------------------------------------------------------------- diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java index 4f268ec..2a6aae3 100644 --- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java +++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java @@ -19,10 +19,11 @@ package org.apache.james.mailbox.backup; +import static org.assertj.core.api.Assertions.assertThat; + import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipExtraField; @@ -49,15 +50,6 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert, return new BasicErrorMessageFactory("%nExpecting %s to have content %s but was %s", zipArchiveEntry, expectedContent, actualContent); } - private static BasicErrorMessageFactory shouldHaveExtraFields(ZipArchiveEntry zipArchiveEntry, - ZipExtraField[] expectedExtraFields, - ZipExtraField[] actualExtraFields) { - return new BasicErrorMessageFactory("%nExpecting %s to contain exactly being %s" + - " but was containing being %s", zipArchiveEntry, - Arrays.toString(expectedExtraFields), - Arrays.toString(actualExtraFields)); - } - private final ZipFile zipFile; private final ZipArchiveEntry actual; @@ -88,17 +80,15 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert, return myself; } - public ZipArchiveEntryAssert containsExactlyExtraFields(ZipExtraField... expectedExtraFields) { + public ZipArchiveEntryAssert containsExtraFields(ZipExtraField... expectedExtraFields) { isNotNull(); ZipExtraField[] actualExtraFields = actual.getExtraFields(); - if (expectedExtraFields.length != actualExtraFields.length) { - throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields)); - } - for (int i = 0; i < expectedExtraFields.length; i++) { - if (!expectedExtraFields[i].equals(actualExtraFields[i])) { - throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields)); - } + if (expectedExtraFields.length == 0) { + return myself; } + assertThat(actualExtraFields) + .as(String.format("Asserting Zip entry %s extra fields.", actual)) + .contains(expectedExtraFields); return myself; } } http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java ---------------------------------------------------------------------- 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 f521b20..c007421 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,17 +21,53 @@ package org.apache.james.mailbox.backup; import static org.apache.james.mailbox.backup.ZipArchiveEntryAssert.assertThatZipEntry; +import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; 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.assertj.core.api.AbstractAssert; import org.assertj.core.error.BasicErrorMessageFactory; +import com.github.steveash.guavate.Guavate; + public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> { interface EntryCheck { - void test(ZipArchiveEntryAssert assertion) throws Exception; + default EntryCheck compose(EntryCheck other) { + return assertion -> other.test(this.test(assertion)); + } + + ZipArchiveEntryAssert test(ZipArchiveEntryAssert assertion) throws Exception; + } + + public static class EntryChecks { + public static EntryChecks hasName(String name) { + return new EntryChecks(name, assertion -> assertion.hasName(name)); + } + + private final String name; + private final EntryCheck check; + + private EntryChecks(String name, EntryCheck check) { + this.name = name; + this.check = check; + } + + public EntryChecks check(EntryCheck additionalCheck) { + return new EntryChecks(name, + check.compose(additionalCheck)); + } + + public EntryChecks hasStringContent(String stringConyent) { + return check(check.compose(assertion -> assertion.hasStringContent(stringConyent))); + } + + public EntryChecks containsExtraFields(ZipExtraField... expectedExtraFields) { + return check(check.compose(assertion -> assertion.containsExtraFields(expectedExtraFields))); + } } public static ZipAssert assertThatZip(ZipFile zipFile) { @@ -39,7 +75,7 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> { } private static BasicErrorMessageFactory shouldHaveSize(ZipFile zipFile, int expected, int actual) { - return new BasicErrorMessageFactory("%nExpecting %s to have side %d but was %d", zipFile, expected, actual); + return new BasicErrorMessageFactory("%nExpecting %s to have side %s but was %s", zipFile, expected, actual); } private static BasicErrorMessageFactory shouldBeEmpty(ZipFile zipFile) { @@ -53,14 +89,20 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> { this.zipFile = zipFile; } - public ZipAssert containsExactlyEntriesMatching(EntryCheck... entryChecks) throws Exception { + public ZipAssert containsOnlyEntriesMatching(EntryChecks... entryChecks) throws Exception { isNotNull(); - List<ZipArchiveEntry> entries = Collections.list(zipFile.getEntries()); + List<EntryChecks> sortedEntryChecks= Arrays.stream(entryChecks) + .sorted(Comparator.comparing(checks -> checks.name)) + .collect(Guavate.toImmutableList()); + List<ZipArchiveEntry> entries = Collections.list(zipFile.getEntries()) + .stream() + .sorted(Comparator.comparing(ZipArchiveEntry::getName)) + .collect(Guavate.toImmutableList()); if (entries.size() != entryChecks.length) { throwAssertionError(shouldHaveSize(zipFile, entryChecks.length, entries.size())); } for (int i = 0; i < entries.size(); i++) { - entryChecks[i].test(assertThatZipEntry(zipFile, entries.get(i))); + sortedEntryChecks.get(i).check.test(assertThatZipEntry(zipFile, entries.get(i))); } return myself; } http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java ---------------------------------------------------------------------- diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java new file mode 100644 index 0000000..b903eb2 --- /dev/null +++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java @@ -0,0 +1,328 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.backup; + +import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName; +import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.compress.archivers.zip.ExtraFieldUtils; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; +import org.apache.commons.compress.archivers.zip.ZipFile; +import org.apache.commons.io.IOUtils; +import org.apache.james.junit.TemporaryFolderExtension; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@ExtendWith(TemporaryFolderExtension.class) +public class ZipAssertTest { + public static final String ENTRY_NAME = "entryName"; + public static final String ENTRY_NAME_2 = "entryName2"; + public static final String STRING_ENTRY_CONTENT = "abcdefghijkl"; + public static final String STRING_ENTRY_CONTENT_2 = "mnopqrstuvwxyz"; + public static final byte[] ENTRY_CONTENT = STRING_ENTRY_CONTENT.getBytes(StandardCharsets.UTF_8); + public static final byte[] ENTRY_CONTENT_2 = STRING_ENTRY_CONTENT_2.getBytes(StandardCharsets.UTF_8); + public static final SizeExtraField EXTRA_FIELD = new SizeExtraField(42); + + + private File destination; + + @BeforeEach + void beforeEach(TemporaryFolderExtension.TemporaryFolder temporaryFolder) throws Exception { + destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir()); + + ExtraFieldUtils.register(SizeExtraField.class); + } + + @Test + public void hasNoEntryShouldNotThrowWhenEmpty() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .hasNoEntry()) + .doesNotThrowAnyException(); + } + + @Test + public void hasNoEntryShouldThrowWhenNotEmpty() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .hasNoEntry()) + .isInstanceOf(AssertionError.class); + } + + @Test + public void containsExactlyEntriesMatchingShouldNotThrowWhenBothEmpty() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching()) + .doesNotThrowAnyException(); + } + + @Test + public void containsExactlyEntriesMatchingShouldNotThrowWhenRightOrder() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2); + archiveOutputStream.putArchiveEntry(archiveEntry2); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME), + hasName(ENTRY_NAME_2))) + .doesNotThrowAnyException(); + } + + @Test + public void hasNameShouldThrowWhenWrongName() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME_2))) + .isInstanceOf(AssertionError.class); + } + + @Test + public void containsExactlyEntriesMatchingShouldNotThrowWhenWrongOrder() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2); + archiveOutputStream.putArchiveEntry(archiveEntry2); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME), + hasName(ENTRY_NAME_2))) + .doesNotThrowAnyException(); + } + + @Test + public void containsExactlyEntriesMatchingShouldThrowWhenExpectingMoreEntries() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2); + archiveOutputStream.putArchiveEntry(archiveEntry2); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME), + hasName(ENTRY_NAME_2), + hasName("extraEntry"))) + .isInstanceOf(AssertionError.class); + } + + @Test + public void containsExactlyEntriesMatchingShouldThrowWhenExpectingLessEntries() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2); + archiveOutputStream.putArchiveEntry(archiveEntry2); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME))) + .isInstanceOf(AssertionError.class); + } + + @Test + public void hasStringContentShouldNotThrowWhenIdentical() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .hasStringContent(STRING_ENTRY_CONTENT))) + .doesNotThrowAnyException(); + } + + @Test + public void hasStringContentShouldThrowWhenDifferent() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .hasStringContent(STRING_ENTRY_CONTENT_2))) + .isInstanceOf(AssertionError.class); + } + + @Test + public void containsExactlyExtraFieldsShouldNotThrowWhenBothEmpty() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .containsExtraFields())) + .doesNotThrowAnyException(); + } + + @Test + public void containsExactlyExtraFieldsShouldThrowWhenMissingExpectedField() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatThrownBy(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .containsExtraFields(EXTRA_FIELD))) + .isInstanceOf(AssertionError.class); + } + + @Test + public void containsExactlyExtraFieldsShouldNotThrowWhenUnexpectedField() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveEntry.addExtraField(EXTRA_FIELD); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .containsExtraFields())) + .doesNotThrowAnyException(); + } + + @Test + public void containsExactlyExtraFieldsShouldNotThrowWhenContainingExpectedExtraFields() throws Exception { + try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) { + + ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME); + archiveEntry.addExtraField(EXTRA_FIELD); + archiveOutputStream.putArchiveEntry(archiveEntry); + IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream); + archiveOutputStream.closeArchiveEntry(); + + archiveOutputStream.finish(); + } + + assertThatCode(() -> assertThatZip(new ZipFile(destination)) + .containsOnlyEntriesMatching( + hasName(ENTRY_NAME) + .containsExtraFields(EXTRA_FIELD))) + .doesNotThrowAnyException(); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java ---------------------------------------------------------------------- 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 ed4e17a..824b022 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 @@ -25,11 +25,13 @@ import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONT import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_1; import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_2; import static org.apache.james.mailbox.backup.MailboxMessageFixture.SIZE_1; +import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName; import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip; import java.io.File; import java.io.FileOutputStream; +import org.apache.commons.compress.archivers.zip.ExtraFieldUtils; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.james.junit.TemporaryFolderExtension; import org.apache.james.junit.TemporaryFolderExtension.TemporaryFolder; @@ -48,6 +50,8 @@ public class ZipperTest { void beforeEach(TemporaryFolder temporaryFolder) throws Exception { testee = new Zipper(); destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir()); + + ExtraFieldUtils.register(SizeExtraField.class); } @Test @@ -65,9 +69,8 @@ public class ZipperTest { try (ZipFile zipFile = new ZipFile(destination)) { assertThatZip(zipFile) - .containsExactlyEntriesMatching( - zipEntryAssert -> zipEntryAssert - .hasName(MESSAGE_ID_1.serialize()) + .containsOnlyEntriesMatching( + hasName(MESSAGE_ID_1.serialize()) .hasStringContent(MESSAGE_CONTENT_1)); } } @@ -78,12 +81,10 @@ public class ZipperTest { try (ZipFile zipFile = new ZipFile(destination)) { assertThatZip(zipFile) - .containsExactlyEntriesMatching( - zipEntryAssert -> zipEntryAssert - .hasName(MESSAGE_ID_1.serialize()) + .containsOnlyEntriesMatching( + hasName(MESSAGE_ID_1.serialize()) .hasStringContent(MESSAGE_CONTENT_1), - zipEntryAssert -> zipEntryAssert - .hasName(MESSAGE_ID_2.serialize()) + hasName(MESSAGE_ID_2.serialize()) .hasStringContent(MESSAGE_CONTENT_2)); } } @@ -95,9 +96,8 @@ public class ZipperTest { try (ZipFile zipFile = new ZipFile(destination)) { assertThatZip(zipFile) - .containsExactlyEntriesMatching( - zipEntryAssert -> zipEntryAssert - .hasName(MESSAGE_ID_2.serialize()) + .containsOnlyEntriesMatching( + hasName(MESSAGE_ID_2.serialize()) .hasStringContent(MESSAGE_CONTENT_2)); } } @@ -108,9 +108,9 @@ public class ZipperTest { try (ZipFile zipFile = new ZipFile(destination)) { assertThatZip(zipFile) - .containsExactlyEntriesMatching( - zipEntryAssert -> zipEntryAssert - .containsExactlyExtraFields(new SizeExtraField(SIZE_1))); + .containsOnlyEntriesMatching( + hasName(MESSAGE_ID_1.serialize()) + .containsExtraFields(new SizeExtraField(SIZE_1))); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
