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 ro...@apache.org on 2018/06/27 14:44:33 UTC
[11/17] james-project git commit: JAMES-2432 [Export] adding
mailboxId, messageId, UID extra fields
JAMES-2432 [Export] adding mailboxId, messageId, UID extra fields
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f30001c2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f30001c2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f30001c2
Branch: refs/heads/master
Commit: f30001c2258d68e98d6425e23f73933c52466c15
Parents: 7f945d3
Author: duc <dt...@linagora.com>
Authored: Wed Jun 20 12:59:03 2018 +0700
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Wed Jun 27 16:36:12 2018 +0200
----------------------------------------------------------------------
.../mailbox/backup/MailboxIdExtraField.java | 105 ++++++++
.../mailbox/backup/MessageIdExtraField.java | 105 ++++++++
.../james/mailbox/backup/UidExtraField.java | 112 ++++++++
.../org/apache/james/mailbox/backup/Zipper.java | 8 +
.../mailbox/backup/MailboxIdExtraFieldTest.java | 207 +++++++++++++++
.../mailbox/backup/MailboxMessageFixture.java | 13 +-
.../mailbox/backup/MessageIdExtraFieldTest.java | 214 ++++++++++++++++
.../james/mailbox/backup/UidExtraFieldTest.java | 254 +++++++++++++++++++
.../apache/james/mailbox/backup/ZipperTest.java | 9 +-
9 files changed, 1023 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxIdExtraField.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxIdExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxIdExtraField.java
new file mode 100644
index 0000000..5bdbd64
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxIdExtraField.java
@@ -0,0 +1,105 @@
+/****************************************************************
+ * 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 java.nio.charset.StandardCharsets;
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
+import org.apache.commons.compress.archivers.zip.ZipShort;
+
+public class MailboxIdExtraField implements ZipExtraField {
+
+ public static final ZipShort ID = new ZipShort(0x6D61); // "am" in little-endian
+
+ private Optional<String> mailboxId;
+
+ public MailboxIdExtraField() {
+ this(Optional.empty());
+ }
+
+ public MailboxIdExtraField(String mailboxId) {
+ this(Optional.of(mailboxId));
+ }
+
+ public MailboxIdExtraField(Optional<String> mailboxId) {
+ this.mailboxId = mailboxId;
+ }
+
+ @Override
+ public ZipShort getHeaderId() {
+ return ID;
+ }
+
+ @Override
+ public ZipShort getLocalFileDataLength() {
+ return mailboxId
+ .map(value -> value.getBytes(StandardCharsets.UTF_8).length)
+ .map(ZipShort::new)
+ .orElseThrow(() -> new RuntimeException("Value must by initialized"));
+ }
+
+ @Override
+ public ZipShort getCentralDirectoryLength() {
+ return getLocalFileDataLength();
+ }
+
+ @Override
+ public byte[] getLocalFileDataData() {
+ return mailboxId
+ .map(value -> value.getBytes(StandardCharsets.UTF_8))
+ .orElseThrow(() -> new RuntimeException("Value must by initialized"));
+ }
+
+ @Override
+ public byte[] getCentralDirectoryData() {
+ return getLocalFileDataData();
+ }
+
+ @Override
+ public void parseFromLocalFileData(byte[] buffer, int offset, int length) {
+ mailboxId = Optional.of(new String(buffer, offset, length, StandardCharsets.UTF_8));
+ }
+
+ @Override
+ public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) {
+ parseFromLocalFileData(buffer, offset, length);
+ }
+
+ public Optional<String> getMailboxId() {
+ return mailboxId;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof MailboxIdExtraField) {
+ MailboxIdExtraField that = (MailboxIdExtraField) o;
+
+ return Objects.equals(this.mailboxId, that.mailboxId);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(mailboxId);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageIdExtraField.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageIdExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageIdExtraField.java
new file mode 100644
index 0000000..9f68016
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageIdExtraField.java
@@ -0,0 +1,105 @@
+/****************************************************************
+ * 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 java.nio.charset.StandardCharsets;
+import java.util.Objects;
+import java.util.Optional;
+
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
+import org.apache.commons.compress.archivers.zip.ZipShort;
+
+public class MessageIdExtraField implements ZipExtraField {
+
+ public static final ZipShort ID = new ZipShort(0x6C61); // "al" in little-endian
+
+ private Optional<String> messageId;
+
+ public MessageIdExtraField() {
+ this(Optional.empty());
+ }
+
+ public MessageIdExtraField(String messageId) {
+ this(Optional.of(messageId));
+ }
+
+ public MessageIdExtraField(Optional<String> messageId) {
+ this.messageId = messageId;
+ }
+
+ @Override
+ public ZipShort getHeaderId() {
+ return ID;
+ }
+
+ @Override
+ public ZipShort getLocalFileDataLength() {
+ return messageId
+ .map(value -> value.getBytes(StandardCharsets.UTF_8).length)
+ .map(ZipShort::new)
+ .orElseThrow(() -> new RuntimeException("Value must by initialized"));
+ }
+
+ @Override
+ public ZipShort getCentralDirectoryLength() {
+ return getLocalFileDataLength();
+ }
+
+ @Override
+ public byte[] getLocalFileDataData() {
+ return messageId
+ .map(value -> value.getBytes(StandardCharsets.UTF_8))
+ .orElseThrow(() -> new RuntimeException("Value must by initialized"));
+ }
+
+ @Override
+ public byte[] getCentralDirectoryData() {
+ return getLocalFileDataData();
+ }
+
+ @Override
+ public void parseFromLocalFileData(byte[] buffer, int offset, int length) {
+ messageId = Optional.of(new String(buffer, offset, length, StandardCharsets.UTF_8));
+ }
+
+ @Override
+ public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) {
+ parseFromLocalFileData(buffer, offset, length);
+ }
+
+ public Optional<String> getMessageId() {
+ return messageId;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof MessageIdExtraField) {
+ MessageIdExtraField that = (MessageIdExtraField) o;
+
+ return Objects.equals(this.messageId, that.messageId);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(messageId);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UidExtraField.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UidExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UidExtraField.java
new file mode 100644
index 0000000..cd1607e
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UidExtraField.java
@@ -0,0 +1,112 @@
+/****************************************************************
+ * 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 java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.zip.ZipException;
+
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
+import org.apache.commons.compress.archivers.zip.ZipShort;
+
+public class UidExtraField implements ZipExtraField {
+
+ public static final ZipShort ID = new ZipShort(0x6B61); // "ak" in little-endian
+
+ private Optional<Long> uid;
+
+ public UidExtraField() {
+ this(Optional.empty());
+ }
+
+ public UidExtraField(long uid) {
+ this(Optional.of(uid));
+ }
+
+ public UidExtraField(Optional<Long> uid) {
+ this.uid = uid;
+ }
+
+ @Override
+ public ZipShort getHeaderId() {
+ return ID;
+ }
+
+ @Override
+ public ZipShort getLocalFileDataLength() {
+ return new ZipShort(Long.BYTES);
+ }
+
+ @Override
+ public ZipShort getCentralDirectoryLength() {
+ return getLocalFileDataLength();
+ }
+
+ @Override
+ public byte[] getLocalFileDataData() {
+ long value = uid.orElseThrow(() -> new RuntimeException("Value must by initialized"));
+ return ByteBuffer.allocate(Long.BYTES)
+ .order(ByteOrder.LITTLE_ENDIAN)
+ .putLong(value)
+ .array();
+ }
+
+ @Override
+ public byte[] getCentralDirectoryData() {
+ return getLocalFileDataData();
+ }
+
+ @Override
+ public void parseFromLocalFileData(byte[] buffer, int offset, int length) throws ZipException {
+ if (length != Long.BYTES) {
+ throw new ZipException("Unexpected data length for UidExtraField. Expected " + Long.BYTES + " but got " + length + ".");
+ }
+ uid = Optional.of(ByteBuffer
+ .wrap(buffer, offset, Long.BYTES)
+ .order(ByteOrder.LITTLE_ENDIAN)
+ .getLong());
+ }
+
+ @Override
+ public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) throws ZipException {
+ parseFromLocalFileData(buffer, offset, length);
+ }
+
+ public Optional<Long> getUid() {
+ return uid;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof UidExtraField) {
+ UidExtraField that = (UidExtraField) o;
+
+ return Objects.equals(this.uid, that.uid);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(uid);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
index b25a9db..9b13bc2 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
@@ -36,6 +36,9 @@ import com.github.fge.lambdas.Throwing;
public class Zipper implements Backup {
public Zipper() {
ExtraFieldUtils.register(SizeExtraField.class);
+ ExtraFieldUtils.register(UidExtraField.class);
+ ExtraFieldUtils.register(MessageIdExtraField.class);
+ ExtraFieldUtils.register(MailboxIdExtraField.class);
}
@Override
@@ -61,7 +64,12 @@ public class Zipper implements Backup {
private void storeInArchive(MailboxMessage message, ZipArchiveOutputStream archiveOutputStream) throws IOException {
String entryId = message.getMessageId().serialize();
ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File(entryId), entryId);
+
archiveEntry.addExtraField(new SizeExtraField(message.getFullContentOctets()));
+ archiveEntry.addExtraField(new UidExtraField(message.getUid().asLong()));
+ archiveEntry.addExtraField(new MessageIdExtraField(message.getMessageId().serialize()));
+ archiveEntry.addExtraField(new MailboxIdExtraField(message.getMailboxId().serialize()));
+
archiveOutputStream.putArchiveEntry(archiveEntry);
IOUtils.copy(message.getFullContent(), archiveOutputStream);
archiveOutputStream.closeArchiveEntry();
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java
new file mode 100644
index 0000000..684f20c
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java
@@ -0,0 +1,207 @@
+/****************************************************************
+ * 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.commons.lang3.StringUtils.EMPTY;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.base.Charsets;
+
+public class MailboxIdExtraFieldTest {
+
+ private static final String DEFAULT_MAILBOX_ID = "123456789ABCDEF0";
+ private static final byte[] DEFAULT_MAILBOX_ID_BYTE_ARRAY = new byte[] {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30};
+ private static final byte [] EMPTY_BYTE_ARRAY = {};
+
+ @Nested
+ class GetHeaderId {
+
+ @Test
+ void getHeaderIdShouldReturnSpecificStringInLittleEndian() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+ ByteBuffer byteBuffer = ByteBuffer.wrap(testee.getHeaderId().getBytes())
+ .order(ByteOrder.LITTLE_ENDIAN);
+
+ assertThat(Charsets.US_ASCII.decode(byteBuffer).toString())
+ .isEqualTo("am");
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataLength {
+
+ @Test
+ void getLocalFileDataLengthShouldThrowWhenNoValue() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+ assertThatThrownBy(() -> testee.getLocalFileDataLength().getValue())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getLocalFileDataLengthShouldReturnIntegerSize() {
+ MailboxIdExtraField testee = new MailboxIdExtraField(DEFAULT_MAILBOX_ID);
+
+ assertThat(testee.getLocalFileDataLength().getValue())
+ .isEqualTo(16);
+ }
+ }
+
+ @Nested
+ class GetCentralDirectoryLength {
+
+ @Test
+ void getCentralDirectoryLengthShouldThrowWhenNoValue() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+ assertThatThrownBy(() -> testee.getCentralDirectoryLength().getValue())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getCentralDirectoryLengthShouldReturnIntegerSize() {
+ MailboxIdExtraField testee = new MailboxIdExtraField(DEFAULT_MAILBOX_ID);
+
+ assertThat(testee.getCentralDirectoryLength().getValue())
+ .isEqualTo(16);
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataData {
+
+ @Test
+ void getLocalFileDataDataShouldThrowWhenNoValue() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ assertThatThrownBy(() -> testee.getLocalFileDataData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnEmptyArrayWhenValueIsEmpty() {
+ byte[] actual = new MailboxIdExtraField(EMPTY).getLocalFileDataData();
+ assertThat(actual).isEqualTo(EMPTY_BYTE_ARRAY);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnValueInByteArray() {
+ byte[] actual = new MailboxIdExtraField(DEFAULT_MAILBOX_ID).getLocalFileDataData();
+ assertThat(actual).isEqualTo(DEFAULT_MAILBOX_ID_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class GetCentralDirectoryData {
+
+ @Test
+ void getCentralDirectoryDataShouldThrowWhenNoValue() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ assertThatThrownBy(() -> testee.getCentralDirectoryData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnEmptyArrayWhenValueIsEmpty() {
+ byte[] actual = new MailboxIdExtraField(EMPTY).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(EMPTY_BYTE_ARRAY);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnValueInByteArray() {
+ byte[] actual = new MailboxIdExtraField(DEFAULT_MAILBOX_ID).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(DEFAULT_MAILBOX_ID_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class ParseFromLocalFileData {
+
+ @Test
+ void parseFromLocalFileDataShouldParseWhenZero() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromLocalFileData(EMPTY_BYTE_ARRAY, 0, 0);
+
+ assertThat(testee.getMailboxId())
+ .contains(EMPTY);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldParseByteArray() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromLocalFileData(DEFAULT_MAILBOX_ID_BYTE_ARRAY, 0, 16);
+
+ assertThat(testee.getMailboxId())
+ .contains(DEFAULT_MAILBOX_ID);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldHandleOffset() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromLocalFileData(DEFAULT_MAILBOX_ID_BYTE_ARRAY, 2, 14);
+
+ assertThat(testee.getMailboxId())
+ .contains("3456789ABCDEF0");
+ }
+ }
+
+ @Nested
+ class ParseFromCentralDirectoryData {
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseWhenZero() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromCentralDirectoryData(EMPTY_BYTE_ARRAY, 0, 0);
+
+ assertThat(testee.getMailboxId())
+ .contains(EMPTY);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseByteArray() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromCentralDirectoryData(DEFAULT_MAILBOX_ID_BYTE_ARRAY, 0, 16);
+
+ assertThat(testee.getMailboxId())
+ .contains(DEFAULT_MAILBOX_ID);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldHandleOffset() {
+ MailboxIdExtraField testee = new MailboxIdExtraField();
+
+ testee.parseFromCentralDirectoryData(DEFAULT_MAILBOX_ID_BYTE_ARRAY, 2, 14);
+
+ assertThat(testee.getMailboxId())
+ .contains("3456789ABCDEF0");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
index ea4b027..92ff524 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
@@ -30,6 +30,8 @@ import javax.mail.util.SharedByteArrayInputStream;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.model.TestMessageId;
@@ -53,6 +55,11 @@ public interface MailboxMessageFixture {
MessageId MESSAGE_ID_2 = MESSAGE_ID_FACTORY.generate();
long SIZE_1 = 1000;
long SIZE_2 = 2000;
+ long MESSAGE_UID_1_VALUE = 1111L;
+ long MESSAGE_UID_2_VALUE = 2222L;
+ MessageUid MESSAGE_UID_1 = MessageUid.of(MESSAGE_UID_1_VALUE);
+ MessageUid MESSAGE_UID_2 = MessageUid.of(MESSAGE_UID_2_VALUE);
+ MailboxId MAILBOX_ID_1 = TestId.of(1L);
MailboxSession MAILBOX_SESSION = new MockMailboxSession("user");
@@ -62,23 +69,25 @@ public interface MailboxMessageFixture {
SimpleMailboxMessage MESSAGE_1 = SimpleMailboxMessage.builder()
.messageId(MESSAGE_ID_1)
+ .uid(MESSAGE_UID_1)
.content(CONTENT_STREAM_1)
.size(SIZE_1)
.internalDate(new Date(DATE_1.toEpochSecond()))
.bodyStartOctet(0)
.flags(new Flags())
.propertyBuilder(new PropertyBuilder())
- .mailboxId(TestId.of(1L))
+ .mailboxId(MAILBOX_ID_1)
.build();
SimpleMailboxMessage MESSAGE_2 = SimpleMailboxMessage.builder()
.messageId(MESSAGE_ID_2)
+ .uid(MESSAGE_UID_2)
.content(CONTENT_STREAM_2)
.size(SIZE_2)
.internalDate(new Date(DATE_2.toEpochSecond()))
.bodyStartOctet(0)
.flags(new Flags())
.propertyBuilder(new PropertyBuilder())
- .mailboxId(TestId.of(1L))
+ .mailboxId(MAILBOX_ID_1)
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java
new file mode 100644
index 0000000..9aa8698
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java
@@ -0,0 +1,214 @@
+/****************************************************************
+ * 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.commons.lang3.StringUtils.EMPTY;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.base.Charsets;
+
+public class MessageIdExtraFieldTest {
+
+ private static final String DEFAULT_MESSAGE_ID = "123456789ABCDEF0";
+ private static final byte[] DEFAULT_MESSAGE_ID_BYTE_ARRAY = new byte[] {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x30};
+ private static final byte [] EMPTY_BYTE_ARRAY = {};
+
+ @Nested
+ class GetHeaderId {
+
+ @Test
+ void getHeaderIdShouldReturnSpecificStringInLittleEndian() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+ ByteBuffer byteBuffer = ByteBuffer.wrap(testee.getHeaderId().getBytes())
+ .order(ByteOrder.LITTLE_ENDIAN);
+
+ assertThat(Charsets.US_ASCII.decode(byteBuffer).toString())
+ .isEqualTo("al");
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataLength {
+
+ @Test
+ void getLocalFileDataLengthShouldThrowWhenNoValue() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ assertThatThrownBy(() -> testee.getLocalFileDataLength().getValue())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getLocalFileDataLengthShouldReturnIntegerSize() {
+ MessageIdExtraField testee = new MessageIdExtraField(DEFAULT_MESSAGE_ID);
+
+ assertThat(testee.getLocalFileDataLength().getValue())
+ .isEqualTo(16);
+ }
+ }
+
+ @Nested
+ class GetCentralDirectoryLength {
+
+ @Test
+ void getCentralDirectoryLengthShouldThrowWhenNoValue() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ assertThatThrownBy(() -> testee.getCentralDirectoryLength().getValue())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getCentralDirectoryLengthShouldReturnIntegerSize() {
+ MessageIdExtraField testee = new MessageIdExtraField(DEFAULT_MESSAGE_ID);
+
+ assertThat(testee.getCentralDirectoryLength().getValue())
+ .isEqualTo(16);
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataData {
+
+ @Test
+ void getLocalFileDataDataShouldThrowWhenNoValue() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ assertThatThrownBy(() -> testee.getLocalFileDataData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnEmptyArrayWhenValueIsEmpty() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+ byte[] actual = new MessageIdExtraField(EMPTY).getLocalFileDataData();
+
+ assertThat(actual).isEqualTo(EMPTY_BYTE_ARRAY);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnValueInByteArray() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+ byte[] actual = new MessageIdExtraField(DEFAULT_MESSAGE_ID).getLocalFileDataData();
+
+ assertThat(actual).isEqualTo(DEFAULT_MESSAGE_ID_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class GetCentralDirectoryData {
+
+ @Test
+ void getCentralDirectoryDataShouldThrowWhenNoValue() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ assertThatThrownBy(() -> testee.getCentralDirectoryData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnEmptyArrayWhenValueIsEmpty() {
+ byte[] actual = new MessageIdExtraField(EMPTY).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(EMPTY_BYTE_ARRAY);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnValueInByteArray() {
+ byte[] actual = new MessageIdExtraField(DEFAULT_MESSAGE_ID).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(DEFAULT_MESSAGE_ID_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class ParseFromLocalFileData {
+
+ @Test
+ void parseFromLocalFileDataShouldParseWhenZero() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromLocalFileData(EMPTY_BYTE_ARRAY, 0, 0);
+
+ assertThat(testee.getMessageId())
+ .contains(EMPTY);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldParseByteArray() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromLocalFileData(DEFAULT_MESSAGE_ID_BYTE_ARRAY, 0, 16);
+
+ assertThat(testee.getMessageId())
+ .contains(DEFAULT_MESSAGE_ID);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldHandleOffset() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromLocalFileData(DEFAULT_MESSAGE_ID_BYTE_ARRAY, 2, 14);
+
+ assertThat(testee.getMessageId())
+ .contains("3456789ABCDEF0");
+ }
+ }
+
+ @Nested
+ class ParseFromCentralDirectoryData {
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseWhenZero() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromCentralDirectoryData(EMPTY_BYTE_ARRAY, 0, 0);
+
+ assertThat(testee.getMessageId())
+ .contains(EMPTY);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseByteArray() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromCentralDirectoryData(DEFAULT_MESSAGE_ID_BYTE_ARRAY, 0, 16);
+
+ assertThat(testee.getMessageId())
+ .contains(DEFAULT_MESSAGE_ID);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldHandleOffset() {
+ MessageIdExtraField testee = new MessageIdExtraField();
+
+ testee.parseFromCentralDirectoryData(DEFAULT_MESSAGE_ID_BYTE_ARRAY, 2, 14);
+
+ assertThat(testee.getMessageId())
+ .contains("3456789ABCDEF0");
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
new file mode 100644
index 0000000..b920ec5
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
@@ -0,0 +1,254 @@
+/****************************************************************
+ * 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.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.zip.ZipException;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
+
+import com.google.common.base.Charsets;
+
+public class UidExtraFieldTest {
+ private static final byte[] ZERO_AS_BYTE_ARRAY = {0, 0, 0, 0, 0, 0, 0, 0};
+ private static final byte[] _123456789ABCDEF0_AS_LE_BYTE_ARRAY = new byte[] {(byte) 0xF0, (byte) 0xDE, (byte) 0xBC, (byte) 0x9A, 0x78, 0x56, 0x34, 0x12};
+ private static final byte[] FEDCBA9876543210_AS_LE_BYTE_ARRAY = new byte[] {0x10, 0x32, 0x54, 0x76, (byte) 0x98, (byte) 0xBA, (byte) 0xDC, (byte) 0xFE};
+ private static final byte[] UNUSED = new byte[] {(byte) 0xDE, (byte) 0xAD};
+
+ @Nested
+ class GetHeaderId {
+
+ @Test
+ void getHeaderIdShouldReturnSpecificStringInLittleEndian() {
+ UidExtraField testee = new UidExtraField();
+
+ ByteBuffer byteBuffer = ByteBuffer.wrap(testee.getHeaderId().getBytes())
+ .order(ByteOrder.LITTLE_ENDIAN);
+ assertThat(Charsets.US_ASCII.decode(byteBuffer).toString())
+ .isEqualTo("ak");
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataLength {
+ @Test
+ void getLocalFileDataLengthShouldReturnIntegerSize() {
+ UidExtraField testee = new UidExtraField();
+
+ assertThat(testee.getLocalFileDataLength().getValue())
+ .isEqualTo(Long.BYTES);
+ }
+ }
+
+ @Nested
+ class GetCentralDirectoryLength {
+
+ @Test
+ void getCentralDirectoryLengthShouldReturnIntegerSize() {
+ UidExtraField testee = new UidExtraField();
+
+ assertThat(testee.getCentralDirectoryLength().getValue())
+ .isEqualTo(Long.BYTES);
+ }
+
+
+ @Test
+ void getCentralDirectoryDataShouldThrowWhenNoValue() {
+ UidExtraField testee = new UidExtraField();
+
+ assertThatThrownBy(() -> testee.getCentralDirectoryData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnZeroWhenZero() {
+ byte[] actual = new UidExtraField(0).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(ZERO_AS_BYTE_ARRAY);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnValueInLittleIndianWhen123456789ABCDEF0() {
+ byte[] actual = new UidExtraField(0x123456789ABCDEF0L).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(_123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+ }
+
+ @Test
+ void getCentralDirectoryDataShouldReturnValueInLittleIndianWhenFEDCBA9876543210() {
+ byte[] actual = new UidExtraField(0xFEDCBA9876543210L).getCentralDirectoryData();
+ assertThat(actual).isEqualTo(FEDCBA9876543210_AS_LE_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class GetLocalFileDataData {
+
+ @Test
+ void getLocalFileDataDataShouldThrowWhenNoValue() {
+ UidExtraField testee = new UidExtraField();
+
+ assertThatThrownBy(() -> testee.getLocalFileDataData())
+ .isInstanceOf(RuntimeException.class);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnZeroWhenZero() {
+ byte[] actual = new UidExtraField(0).getLocalFileDataData();
+ assertThat(actual).isEqualTo(ZERO_AS_BYTE_ARRAY);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnValueInLittleIndianWhen123456789ABCDEF0() {
+ byte[] actual = new UidExtraField(0x123456789ABCDEF0L).getLocalFileDataData();
+ assertThat(actual).isEqualTo(_123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+ }
+
+ @Test
+ void getLocalFileDataDataShouldReturnValueInLittleIndianWhenFEDCBA9876543210() {
+ byte[] actual = new UidExtraField(0xFEDCBA9876543210L).getLocalFileDataData();
+ assertThat(actual).isEqualTo(FEDCBA9876543210_AS_LE_BYTE_ARRAY);
+ }
+ }
+
+ @Nested
+ class ParseFromLocalFileData {
+
+ @Test
+ void parseFromLocalFileDataShouldThrownWhenLengthIsSmallerThan8() {
+ UidExtraField testee = new UidExtraField();
+
+ byte[] input = new byte[] {0, 0, 0, 0, 0, 0, 0};
+ assertThatThrownBy(() -> testee.parseFromLocalFileData(input, 0, 7))
+ .isInstanceOf(ZipException.class);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldThrownWhenLengthIsBiggerThan8() {
+ UidExtraField testee = new UidExtraField();
+
+ byte[] input = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0};
+ assertThatThrownBy(() -> testee.parseFromLocalFileData(input, 0, 9))
+ .isInstanceOf(ZipException.class);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldParseWhenZero() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ testee.parseFromLocalFileData(ZERO_AS_BYTE_ARRAY, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0L);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldParseWhen123456789ABCDEF0InLittleEndian() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ testee.parseFromLocalFileData(_123456789ABCDEF0_AS_LE_BYTE_ARRAY, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0x123456789ABCDEF0L);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldParseWhenFEDCBA9876543210InLittleEndian() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ byte[] input = FEDCBA9876543210_AS_LE_BYTE_ARRAY;
+ testee.parseFromLocalFileData(input, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0xFEDCBA9876543210L);
+ }
+
+ @Test
+ void parseFromLocalFileDataShouldHandleOffset() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+ testee.parseFromLocalFileData(input, 2, 8);
+ assertThat(testee.getUid())
+ .contains(0x123456789ABCDEF0L);
+ }
+ }
+
+ @Nested
+ class ParseFromCentralDirectoryData {
+
+ @Test
+ void parseFromCentralDirectoryDataShouldThrownWhenLengthIsSmallerThan8() {
+ UidExtraField testee = new UidExtraField();
+ byte[] input = new byte[7];
+
+ assertThatThrownBy(() -> testee.parseFromCentralDirectoryData(input, 0, 7))
+ .isInstanceOf(ZipException.class);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldThrownWhenLengthIsBiggerThan8() {
+ UidExtraField testee = new UidExtraField();
+ byte[] input = new byte[9];
+
+ assertThatThrownBy(() -> testee.parseFromCentralDirectoryData(input, 0, 9))
+ .isInstanceOf(ZipException.class);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseWhenZero() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ testee.parseFromCentralDirectoryData(ZERO_AS_BYTE_ARRAY, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0L);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseWhen123456789ABCDEF0InLittleEndian() throws Exception {
+ UidExtraField testee = new UidExtraField();
+
+ testee.parseFromCentralDirectoryData(_123456789ABCDEF0_AS_LE_BYTE_ARRAY, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0x123456789ABCDEF0L);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldParseWhenFEDCBA9876543210InLittleEndian() throws Exception {
+ UidExtraField testee = new UidExtraField();
+ byte[] input = FEDCBA9876543210_AS_LE_BYTE_ARRAY;
+
+ testee.parseFromCentralDirectoryData(input, 0, 8);
+ assertThat(testee.getUid())
+ .contains(0xFEDCBA9876543210L);
+ }
+
+ @Test
+ void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
+ UidExtraField testee = new UidExtraField();
+ byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+
+ testee.parseFromCentralDirectoryData(input, 2, 8);
+ assertThat(testee.getUid())
+ .contains(0x123456789ABCDEF0L);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/f30001c2/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 d11c8c5..6e67a91 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
@@ -21,12 +21,14 @@ package org.apache.james.mailbox.backup;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MAILBOX_1;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MAILBOX_1_SUB_1;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MAILBOX_2;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MAILBOX_ID_1;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_1;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_2;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONTENT_1;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONTENT_2;
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.MESSAGE_UID_1_VALUE;
import static org.apache.james.mailbox.backup.MailboxMessageFixture.SIZE_1;
import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName;
@@ -89,14 +91,17 @@ class ZipperTest {
}
@Test
- void archiveShouldWriteSizeMetadata() throws Exception {
+ void archiveShouldWriteMetadata() throws Exception {
testee.archive(NO_MAILBOXES, Stream.of(MESSAGE_1), output);
try (ZipFile zipFile = new ZipFile(toSeekableByteChannel(output))) {
assertThatZip(zipFile)
.containsOnlyEntriesMatching(
hasName(MESSAGE_ID_1.serialize())
- .containsExtraFields(new SizeExtraField(SIZE_1)));
+ .containsExtraFields(new SizeExtraField(SIZE_1))
+ .containsExtraFields(new UidExtraField(MESSAGE_UID_1_VALUE))
+ .containsExtraFields(new MessageIdExtraField(MESSAGE_ID_1.serialize()))
+ .containsExtraFields(new MailboxIdExtraField(MAILBOX_ID_1.serialize())));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org