[james-project] 09/15: JAMES-2817 Rename subscribeWorkQueue to consumeWorkQueue and subscribe in start()
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 87136c39e011e6d0197e3a0e85a8203c1e861e35 Author: Matthieu Baechler AuthorDate: Fri Feb 15 09:14:26 2019 +0100 JAMES-2817 Rename subscribeWorkQueue to consumeWorkQueue and subscribe in start() --- .../apache/james/mailbox/events/GroupRegistration.java | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java index bbdd46b..7730efc 100644 --- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java +++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java @@ -37,7 +37,6 @@ import org.apache.james.util.MDCBuilder; import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; import com.rabbitmq.client.Connection; - import reactor.core.Disposable; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -105,10 +104,11 @@ class GroupRegistration implements Registration { } GroupRegistration start() { -createGroupWorkQueue() -.then(retryHandler.createRetryExchange(queueName)) -.doOnSuccess(any -> this.subscribeWorkQueue()) -.block(); +receiverSubscriber = Optional +.of(createGroupWorkQueue() +.then(retryHandler.createRetryExchange(queueName)) +.then(Mono.fromCallable(() -> this.consumeWorkQueue())) +.block()); return this; } @@ -126,12 +126,12 @@ class GroupRegistration implements Registration { .then(); } -private void subscribeWorkQueue() { -receiverSubscriber = Optional.of(receiver.consumeManualAck(queueName.asString(), new ConsumeOptions().qos(EventBus.EXECUTION_RATE)) +private Disposable consumeWorkQueue() { +return receiver.consumeManualAck(queueName.asString(), new ConsumeOptions().qos(EventBus.EXECUTION_RATE)) +.publishOn(Schedulers.parallel()) .filter(delivery -> Objects.nonNull(delivery.getBody())) .flatMap(this::deliver) -.subscribeOn(Schedulers.elastic()) -.subscribe()); +.subscribe(); } private Mono deliver(AcknowledgableDelivery acknowledgableDelivery) { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 03/15: Allow Store.Impl to cary along a byte[] representation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 30dc0b9f04d5bd3fc7121aedf8af8a972a356d35 Author: Benoit Tellier AuthorDate: Fri Dec 7 15:08:00 2018 +0700 Allow Store.Impl to cary along a byte[] representation Bytes are available but hidded behing an inputStream for implementation purposes. We propose in this commit a new level of indirection allowing to save an object as bytes or as InputSteam. --- .../main/java/org/apache/james/blob/api/Store.java | 24 ++ .../apache/james/blob/mail/MimeMessageStore.java | 6 +++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java index 6a4f859..ce640d5 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java @@ -19,7 +19,6 @@ package org.apache.james.blob.api; -import java.io.InputStream; import java.util.Collection; import java.util.Objects; import java.util.stream.Stream; @@ -66,8 +65,25 @@ public interface Store { class Impl implements Store { +public interface ValueToSave { +Mono saveIn(BucketName bucketName, BlobStore blobStore); +} + +public static class BytesToSave implements ValueToSave { +private final byte[] bytes; + +public BytesToSave(byte[] bytes) { +this.bytes = bytes; +} + +@Override +public Mono saveIn(BucketName bucketName, BlobStore blobStore) { +return blobStore.save(bucketName, bytes); +} +} + public interface Encoder { -Stream> encode(T t); +Stream> encode(T t); } public interface Decoder { @@ -94,9 +110,9 @@ public interface Store { .map(idFactory::generate); } -private Mono> saveEntry(Pair entry) { +private Mono> saveEntry(Pair entry) { return Mono.just(entry.getLeft()) -.zipWith(blobStore.save(BucketName.DEFAULT, entry.getRight())); +.zipWith(entry.getRight().saveIn(BucketName.DEFAULT, blobStore)); } @Override diff --git a/server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java b/server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java index 12683f9..f0c2480 100644 --- a/server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java +++ b/server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java @@ -69,15 +69,15 @@ public class MimeMessageStore { static class MimeMessageEncoder implements Store.Impl.Encoder { @Override -public Stream> encode(MimeMessage message) { +public Stream> encode(MimeMessage message) { try { byte[] messageAsArray = messageToArray(message); int bodyStartOctet = computeBodyStartOctet(messageAsArray); byte[] headerBytes = getHeaderBytes(messageAsArray, bodyStartOctet); byte[] bodyBytes = getBodyBytes(messageAsArray, bodyStartOctet); return Stream.of( -Pair.of(HEADER_BLOB_TYPE, new ByteArrayInputStream(headerBytes)), -Pair.of(BODY_BLOB_TYPE, new ByteArrayInputStream(bodyBytes))); +Pair.of(HEADER_BLOB_TYPE, new Store.Impl.BytesToSave(headerBytes)), +Pair.of(BODY_BLOB_TYPE, new Store.Impl.BytesToSave(bodyBytes))); } catch (MessagingException | IOException e) { throw new RuntimeException(e); } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 10/15: JAMES-2817 Avoid C-like cast syntax in GroupRegistration
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 37b0b39571f9f50268bdfa88979ace839bd84369 Author: Matthieu Baechler AuthorDate: Fri Feb 15 09:47:20 2019 +0100 JAMES-2817 Avoid C-like cast syntax in GroupRegistration --- .../main/java/org/apache/james/mailbox/events/GroupRegistration.java| 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java index 7730efc..c704ad3 100644 --- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java +++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java @@ -164,7 +164,7 @@ class GroupRegistration implements Registration { return Optional.ofNullable(acknowledgableDelivery.getProperties().getHeaders()) .flatMap(headers -> Optional.ofNullable(headers.get(RETRY_COUNT))) .filter(object -> object instanceof Integer) -.map(object -> (Integer) object) +.map(Integer.class::cast) .orElse(DEFAULT_RETRY_COUNT); } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 15/15: Merge remote-tracking branch 'mbaechler/some-small-eventBus-fix'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2548451538098db2912872d06c0421b38be5f372 Merge: 031775a 2338e64 Author: Antoine DUPRAT AuthorDate: Thu Jul 4 11:29:38 2019 +0200 Merge remote-tracking branch 'mbaechler/some-small-eventBus-fix' .../mailbox/events/ErrorHandlingContract.java | 4 ++-- .../james/mailbox/events/GroupRegistration.java| 25 ++ .../james/mailbox/events/WaitDelayGenerator.java | 24 - .../mailbox/events/WaitDelayGeneratorTest.java | 8 +++ 4 files changed, 31 insertions(+), 30 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 08/15: JAMES-2816 Refactor appendMessage method to make it more readable
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 02fb91af65229e1ccd4f714c55682b7abe4673f5 Author: RĂ©mi Kowalski AuthorDate: Mon Jul 1 17:44:22 2019 +0200 JAMES-2816 Refactor appendMessage method to make it more readable --- .../james/mailbox/store/StoreMessageManager.java | 276 - 1 file changed, 160 insertions(+), 116 deletions(-) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 5015d67..3cf9e06 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -133,6 +133,16 @@ public class StoreMessageManager implements MessageManager { */ protected static final Flags MINIMAL_PERMANET_FLAGS; +private static class MediaType { +final String mediaType; +final String subType; + +private MediaType(String mediaType, String subType) { +this.mediaType = mediaType; +this.subType = subType; +} +} + static { MINIMAL_PERMANET_FLAGS = new Flags(); MINIMAL_PERMANET_FLAGS.add(Flags.Flag.ANSWERED); @@ -327,7 +337,6 @@ public class StoreMessageManager implements MessageManager { @Override public ComposedMessageId appendMessage(InputStream msgIn, Date internalDate, final MailboxSession mailboxSession, boolean isRecent, Flags flagsToBeSet) throws MailboxException { - File file = null; if (!isWriteable(mailboxSession)) { @@ -346,126 +355,20 @@ public class StoreMessageManager implements MessageManager { // Disable line length... This should be handled by the smtp server // component and not the parser itself // https://issues.apache.org/jira/browse/IMAP-122 - -final MimeTokenStream parser = new MimeTokenStream(MimeConfig.PERMISSIVE, new DefaultBodyDescriptorBuilder()); - -parser.setRecursionMode(RecursionMode.M_NO_RECURSE); -parser.parse(bIn); -final HeaderImpl header = new HeaderImpl(); - -EntityState next = parser.next(); -while (next != EntityState.T_BODY && next != EntityState.T_END_OF_STREAM && next != EntityState.T_START_MULTIPART) { -if (next == EntityState.T_FIELD) { -header.addField(parser.getField()); -} -next = parser.next(); -} +final MimeTokenStream parser = getParser(bIn); +final HeaderImpl header = readHeader(parser); final MaximalBodyDescriptor descriptor = (MaximalBodyDescriptor) parser.getBodyDescriptor(); -final PropertyBuilder propertyBuilder = new PropertyBuilder(); -final String mediaType; -final String mediaTypeFromHeader = descriptor.getMediaType(); -final String subType; -if (mediaTypeFromHeader == null) { -mediaType = "text"; -subType = "plain"; -} else { -mediaType = mediaTypeFromHeader; -subType = descriptor.getSubType(); -} -propertyBuilder.setMediaType(mediaType); -propertyBuilder.setSubType(subType); -propertyBuilder.setContentID(descriptor.getContentId()); - propertyBuilder.setContentDescription(descriptor.getContentDescription()); - propertyBuilder.setContentLocation(descriptor.getContentLocation()); -propertyBuilder.setContentMD5(descriptor.getContentMD5Raw()); - propertyBuilder.setContentTransferEncoding(descriptor.getTransferEncoding()); - propertyBuilder.setContentLanguage(descriptor.getContentLanguage()); - propertyBuilder.setContentDispositionType(descriptor.getContentDispositionType()); - propertyBuilder.setContentDispositionParameters(descriptor.getContentDispositionParameters()); - propertyBuilder.setContentTypeParameters(descriptor.getContentTypeParameters()); -// Add missing types -final String codeset = descriptor.getCharset(); -if (codeset == null) { -if ("TEXT".equalsIgnoreCase(mediaType)) { -propertyBuilder.setCharset("us-ascii"); -} -} else { -propertyBuilder.setCharset(codeset); -} - -final String boundary = descrip
[james-project] 06/15: JAMES-2816 Use buffered streams to handle mails
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 55257ba20f52d0d91043e2f6733d77209520e2d7 Author: Matthieu Baechler AuthorDate: Fri Feb 15 15:16:34 2019 +0100 JAMES-2816 Use buffered streams to handle mails x3 improvement in micro-benchmark, should be around 5% improvement in real life appendMessage reported to take 8.51% in a flamegraph --- .../java/org/apache/james/mailbox/store/StoreMessageManager.java | 7 +-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 8c32c55..5015d67 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -22,6 +22,8 @@ package org.apache.james.mailbox.store; import static org.apache.james.mailbox.extension.PreDeletionHook.DeleteOperation; import static org.apache.james.mailbox.store.mail.AbstractMessageMapper.UNLIMITED; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -102,7 +104,6 @@ import com.github.steveash.guavate.Guavate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; - import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -339,7 +340,8 @@ public class StoreMessageManager implements MessageManager { // source for the InputStream file = File.createTempFile("imap", ".msg"); try (FileOutputStream out = new FileOutputStream(file); - TeeInputStream tmpMsgIn = new TeeInputStream(msgIn, out); + BufferedOutputStream bufferedOut = new BufferedOutputStream(out); + BufferedInputStream tmpMsgIn = new BufferedInputStream(new TeeInputStream(msgIn, bufferedOut)); BodyOffsetInputStream bIn = new BodyOffsetInputStream(tmpMsgIn)) { // Disable line length... This should be handled by the smtp server // component and not the parser itself @@ -433,6 +435,7 @@ public class StoreMessageManager implements MessageManager { // the file now // via the TeeInputStream } +bufferedOut.close(); int bodyStartOctet = (int) bIn.getBodyStartOffset(); if (bodyStartOctet == -1) { bodyStartOctet = 0; - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 11/15: JAMES-2817 WaitDelayGenerator jitter could remove time from next iteration
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit d3c5a61f0591a9538be670188c59894c8f5862c8 Author: Matthieu Baechler AuthorDate: Fri Feb 15 12:31:45 2019 +0100 JAMES-2817 WaitDelayGenerator jitter could remove time from next iteration --- .../mailbox/events/ErrorHandlingContract.java | 4 ++-- .../james/mailbox/events/WaitDelayGenerator.java | 24 +- .../mailbox/events/WaitDelayGeneratorTest.java | 8 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java index c6f4494..d0b3923 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java @@ -167,8 +167,8 @@ interface ErrorHandlingContract extends EventBusContract { softly.assertThat(timeElapsed).hasSize(4); long minFirstDelayAfter = 100; // first backOff -long minSecondDelayAfter = 100; // 200 * jitter factor (200 * 0.5) -long minThirdDelayAfter = 200; // 400 * jitter factor (400 * 0.5) +long minSecondDelayAfter = 50; // 50 * jitter factor (50 * 0.5) +long minThirdDelayAfter = 100; // 100 * jitter factor (100 * 0.5) softly.assertThat(timeElapsed.get(1)) .isAfterOrEqualTo(timeElapsed.get(0).plusMillis(minFirstDelayAfter)); diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/WaitDelayGenerator.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/WaitDelayGenerator.java index ff0378b..33a3586 100644 --- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/WaitDelayGenerator.java +++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/WaitDelayGenerator.java @@ -24,7 +24,7 @@ import java.time.Duration; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; - +import com.google.common.primitives.Ints; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -34,12 +34,14 @@ class WaitDelayGenerator { return new WaitDelayGenerator(retryBackoff); } -private static int randomBetween(int lowest, int highest) { -Preconditions.checkArgument(lowest <= highest, "lowest always has to be less than or equals highest"); -if (lowest == highest) { -return lowest; +private static Duration randomBetween(Duration base, Duration jitter) { +Preconditions.checkArgument(!jitter.isNegative(), "jitter value should always be positive"); +if (jitter.isZero()) { +return base; } -return SECURE_RANDOM.nextInt(highest - lowest) + lowest; +long maxJitterAsMillis = jitter.toMillis(); +long jitterAsMillis = SECURE_RANDOM.nextInt(Ints.checkedCast(maxJitterAsMillis * 2)) / 2; +return base.plusMillis(jitterAsMillis); } private static final SecureRandom SECURE_RANDOM = new SecureRandom(); @@ -65,11 +67,13 @@ class WaitDelayGenerator { if (!shouldDelay(retryCount)) { return Duration.ZERO; } -int exponentialFactor = Double.valueOf(Math.pow(2, retryCount - 1)).intValue(); -int minDelay = exponentialFactor * (int) retryBackoff.getFirstBackoff().toMillis(); -int maxDelay = Double.valueOf(minDelay + minDelay * retryBackoff.getJitterFactor()).intValue(); +long exponentialFactor = Double.valueOf(Math.pow(2, retryCount - 1)).longValue(); +Duration minDelay = retryBackoff.getFirstBackoff().multipliedBy(exponentialFactor); +Duration jitterDelay = retryBackoff.getFirstBackoff() +.multipliedBy(Double.valueOf(retryBackoff.getJitterFactor() * 100).intValue()) +.dividedBy(100); -return Duration.ofMillis(randomBetween(minDelay, maxDelay)); +return randomBetween(minDelay, jitterDelay); } private boolean shouldDelay(int retryCount) { diff --git a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/WaitDelayGeneratorTest.java b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/WaitDelayGeneratorTest.java index 9cb2d62..e7f1fb6 100644 --- a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/WaitDelayGeneratorTest.java +++ b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/WaitDelayGeneratorTest.java @@ -46,13 +46,13 @@ class WaitDelayGeneratorTest { SoftAssertions.assertSoftly(softly -> { softly.assertThat
[james-project] 05/15: JAMES-2816 Avoid copying the whole message when we only need to copy metadata
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 6c20dff5a87926ba0657fec8a185c925ce000c26 Author: Matthieu Baechler AuthorDate: Fri Feb 15 15:15:34 2019 +0100 JAMES-2816 Avoid copying the whole message when we only need to copy metadata --- mailbox/memory/src/test/resources/test.eml | 0 .../mailbox/spamassassin/SpamAssassinListenerTest.java | 4 ++-- .../apache/james/mailbox/store/StoreMessageIdManager.java | 2 +- .../org/apache/james/mailbox/store/StoreMessageManager.java | 13 ++--- .../org/apache/james/mailbox/store/event/EventFactory.java | 4 .../james/mailbox/store/MessageIdManagerTestSystem.java | 2 +- 6 files changed, 6 insertions(+), 19 deletions(-) diff --git a/mailbox/memory/src/test/resources/test.eml b/mailbox/memory/src/test/resources/test.eml new file mode 100644 index 000..e69de29 diff --git a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java index 36922be..72d8b39 100644 --- a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java +++ b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java @@ -241,7 +241,7 @@ public class SpamAssassinListenerTest { .randomEventId() .mailboxSession(MAILBOX_SESSION) .mailbox(inbox) -.addMessage(message) +.addMetaData(message.metaData()) .build(); listener.event(addedEvent); @@ -257,7 +257,7 @@ public class SpamAssassinListenerTest { .randomEventId() .mailboxSession(MAILBOX_SESSION) .mailbox(mailbox1) -.addMessage(message) +.addMetaData(message.metaData()) .build(); listener.event(addedEvent); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java index 1b28585..20a5b0f 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java @@ -395,7 +395,7 @@ public class StoreMessageIdManager implements MessageIdManager { .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailboxMapper.findMailboxById(mailboxId)) -.addMessage(copy) +.addMetaData(copy.metaData()) .build(), new MailboxIdRegistrationKey(mailboxId)) .block(); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 5d63d3b..8c32c55 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -451,12 +451,12 @@ public class StoreMessageManager implements MessageManager { MessageMetaData data = appendMessageToStore(message, attachments, mailboxSession); Mailbox mailbox = getMailboxEntity(); -MailboxMessage copy = copyMessage(message); + eventBus.dispatch(EventFactory.added() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailbox) -.addMessage(copy) +.addMetaData(message.metaData()) .build(), new MailboxIdRegistrationKey(mailbox.getMailboxId())) .block(); @@ -500,15 +500,6 @@ public class StoreMessageManager implements MessageManager { return new SimpleMailboxMessage(messageIdFactory.generate(), internalDate, size, bodyStartOctet, content, flags, propertyBuilder, getMailboxEntity().getMailboxId(), attachments); } -private MailboxMessage copyMessage(MailboxMessage message) throws MailboxException { -return SimpleMailboxMessage -.from(message) -.mailboxId(message.getMailboxId()) -.uid(message.getUid()) -.modseq(message.getModSeq()) -.build(); -} - @Override public boolean isWriteable(MailboxSession session) throws MailboxException { return storeRightManager.isReadWrite(session, mailbox, getSharedPermanentFlags(session)); diff --git a/mailbox
[james-project] 04/15: fixup! Avoid blob copy when saving byte arrays
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 088123b1cc97da4b48bc277a04f27604971615be Author: Gautier DI FOLCO AuthorDate: Tue Jul 2 11:33:56 2019 +0200 fixup! Avoid blob copy when saving byte arrays --- .../org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index c38ea12..c80f23e 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@ -134,9 +134,8 @@ public class ObjectStorageBlobsDAO implements BlobStore { .then(Mono.fromCallable(() -> blobIdFactory.from(hashingInputStream.hash().toString(; } -private Mono save(BucketName bucketName, Blob blob) { -String containerName = this.containerName.value(); -return Mono.fromCallable(() -> blobStore.putBlob(containerName, blob)); +private Mono save(BucketName bucketName, Blob blob) { +return Mono.fromRunnable(() -> putBlobFunction.putBlob(blob)); } @Override - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 12/15: JAMES-2817 GroupRegistration deliver doesn't need to use subscribeWith
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2338e6461779ec114a9eb13f1da887a2f6030a64 Author: Matthieu Baechler AuthorDate: Fri Feb 15 14:26:33 2019 +0100 JAMES-2817 GroupRegistration deliver doesn't need to use subscribeWith --- .../main/java/org/apache/james/mailbox/events/GroupRegistration.java | 5 + 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java index c704ad3..8d477e7 100644 --- a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java +++ b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java @@ -40,7 +40,6 @@ import com.rabbitmq.client.Connection; import reactor.core.Disposable; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import reactor.core.publisher.MonoProcessor; import reactor.core.scheduler.Schedulers; import reactor.rabbitmq.AcknowledgableDelivery; import reactor.rabbitmq.BindingSpecification; @@ -143,9 +142,7 @@ class GroupRegistration implements Registration { .publishOn(Schedulers.elastic()) .flatMap(any -> Mono.fromRunnable(Throwing.runnable(() -> runListener(event .onErrorResume(throwable -> retryHandler.handleRetry(event, currentRetryCount, throwable)) -.then(Mono.fromRunnable(acknowledgableDelivery::ack)) -.subscribeWith(MonoProcessor.create()) -.then(); +.then(Mono.fromRunnable(acknowledgableDelivery::ack)); } Mono reDeliver(Event event) { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 13/15: Merge remote-tracking branch 'btellier/improve-blob-store-efficiency-v4'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 859161869055c9ec79d9ab851ff6a9362885da63 Merge: 78813a8 088123b Author: Antoine DUPRAT AuthorDate: Thu Jul 4 11:28:31 2019 +0200 Merge remote-tracking branch 'btellier/improve-blob-store-efficiency-v4' .../main/java/org/apache/james/blob/api/Store.java | 24 ++ .../james/blob/objectstorage/AESPayloadCodec.java | 5 + .../blob/objectstorage/DefaultPayloadCodec.java| 9 .../blob/objectstorage/ObjectStorageBlobsDAO.java | 24 -- .../james/blob/objectstorage/PayloadCodec.java | 2 ++ .../apache/james/blob/mail/MimeMessageStore.java | 6 +++--- 6 files changed, 57 insertions(+), 13 deletions(-) diff --cc server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index 48840f8,c80f23e..aa209b5 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@@ -146,14 -158,8 +159,13 @@@ public class ObjectStorageBlobsDAO impl "Failed to readBytes blob " + blobId.asString(), cause); } - } +@Override +public Mono deleteBucket(BucketName bucketName) { +throw new NotImplementedException("not implemented"); +} + public void deleteContainer() { blobStore.deleteContainer(containerName.value()); } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 07/15: JAMES-2816 Fix Intelij warnings in SimpleMailboxMessage
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 398594db2e6869c37d8d65357ff82b1f3c3ab60b Author: Benoit Tellier AuthorDate: Mon Feb 18 10:12:45 2019 +0700 JAMES-2816 Fix Intelij warnings in SimpleMailboxMessage --- .../mailbox/store/mail/model/impl/SimpleMailboxMessage.java| 10 +++--- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java index 479053d..34b3b5c 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java @@ -138,13 +138,9 @@ public class SimpleMailboxMessage extends DelegatingMailboxMessage { SimpleMailboxMessage simpleMailboxMessage = new SimpleMailboxMessage(messageId, internalDate, size, bodyStartOctet, content, flags, propertyBuilder, mailboxId, attachments.build()); -if (uid.isPresent()) { -simpleMailboxMessage.setUid(uid.get()); -} +uid.ifPresent(simpleMailboxMessage::setUid); +modseq.ifPresent(simpleMailboxMessage::setModSeq); -if (modseq.isPresent()) { -simpleMailboxMessage.setModSeq(modseq.get()); -} return simpleMailboxMessage; } } @@ -218,7 +214,7 @@ public class SimpleMailboxMessage extends DelegatingMailboxMessage { PropertyBuilder propertyBuilder, MailboxId mailboxId) { this(messageId, internalDate, size, bodyStartOctet, content, flags, -propertyBuilder, mailboxId, ImmutableList.of()); +propertyBuilder, mailboxId, ImmutableList.of()); } @Override - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch master updated (78813a8 -> 2548451)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from 78813a8 JAMES-2771 Fix dirty provisionning for CI benchmarks new 862dd15 Avoid blob copy when saving byte arrays new ed91ea3 Position data length when possible new 30dc0b9 Allow Store.Impl to cary along a byte[] representation new 088123b fixup! Avoid blob copy when saving byte arrays new 8591618 Merge remote-tracking branch 'btellier/improve-blob-store-efficiency-v4' new 6c20dff JAMES-2816 Avoid copying the whole message when we only need to copy metadata new 55257ba JAMES-2816 Use buffered streams to handle mails new 398594d JAMES-2816 Fix Intelij warnings in SimpleMailboxMessage new 02fb91a JAMES-2816 Refactor appendMessage method to make it more readable new 031775a Merge remote-tracking branch 'mbaechler/optimize-append-message' new 87136c3 JAMES-2817 Rename subscribeWorkQueue to consumeWorkQueue and subscribe in start() new 37b0b39 JAMES-2817 Avoid C-like cast syntax in GroupRegistration new d3c5a61 JAMES-2817 WaitDelayGenerator jitter could remove time from next iteration new 2338e64 JAMES-2817 GroupRegistration deliver doesn't need to use subscribeWith new 2548451 Merge remote-tracking branch 'mbaechler/some-small-eventBus-fix' The 15 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../mailbox/events/ErrorHandlingContract.java | 4 +- .../james/mailbox/events/GroupRegistration.java| 25 +- .../james/mailbox/events/WaitDelayGenerator.java | 24 +- .../mailbox/events/WaitDelayGeneratorTest.java | 8 +- .../memory/src/test/resources/test.eml | 0 .../spamassassin/SpamAssassinListenerTest.java | 4 +- .../james/mailbox/store/StoreMessageIdManager.java | 2 +- .../james/mailbox/store/StoreMessageManager.java | 290 - .../james/mailbox/store/event/EventFactory.java| 4 - .../mail/model/impl/SimpleMailboxMessage.java | 10 +- .../mailbox/store/MessageIdManagerTestSystem.java | 2 +- .../main/java/org/apache/james/blob/api/Store.java | 24 +- .../james/blob/objectstorage/AESPayloadCodec.java | 5 + .../blob/objectstorage/DefaultPayloadCodec.java| 9 + .../blob/objectstorage/ObjectStorageBlobsDAO.java | 24 +- .../james/blob/objectstorage/PayloadCodec.java | 2 + .../apache/james/blob/mail/MimeMessageStore.java | 6 +- 17 files changed, 259 insertions(+), 184 deletions(-) copy server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/service/CassandraMigrationService.java => mailbox/memory/src/test/resources/test.eml (100%) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 14/15: Merge remote-tracking branch 'mbaechler/optimize-append-message'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 031775a2051f4b9f92dbb6cd2cc7377c8f049ab9 Merge: 8591618 02fb91a Author: Antoine DUPRAT AuthorDate: Thu Jul 4 11:29:09 2019 +0200 Merge remote-tracking branch 'mbaechler/optimize-append-message' mailbox/memory/src/test/resources/test.eml | 0 .../spamassassin/SpamAssassinListenerTest.java | 4 +- .../james/mailbox/store/StoreMessageIdManager.java | 2 +- .../james/mailbox/store/StoreMessageManager.java | 290 - .../james/mailbox/store/event/EventFactory.java| 4 - .../mail/model/impl/SimpleMailboxMessage.java | 10 +- .../mailbox/store/MessageIdManagerTestSystem.java | 2 +- 7 files changed, 171 insertions(+), 141 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 02/15: Position data length when possible
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit ed91ea3e94f57cf14719a199dcd3f15f7ad38f01 Author: Benoit Tellier AuthorDate: Fri Dec 7 14:47:30 2018 +0700 Position data length when possible --- .../james/blob/objectstorage/AESPayloadCodec.java | 5 + .../james/blob/objectstorage/DefaultPayloadCodec.java | 9 + .../blob/objectstorage/ObjectStorageBlobsDAO.java | 18 ++ .../apache/james/blob/objectstorage/PayloadCodec.java | 2 ++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java index 2b0eaee..e19e51d 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java @@ -72,6 +72,11 @@ public class AESPayloadCodec implements PayloadCodec { } @Override +public Payload write(byte[] bytes) { +return write(new ByteArrayInputStream(bytes)); +} + +@Override public Payload write(InputStream inputStream) { try (FileBackedOutputStream outputStream = new FileBackedOutputStream(MAX_BYTES.intValue())) { outputStream.write(aead.encrypt(IOUtils.toByteArray(inputStream), EMPTY_ASSOCIATED_DATA)); diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java index 6f56b26..9a6fcc3 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java @@ -19,6 +19,7 @@ package org.apache.james.blob.objectstorage; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; @@ -32,6 +33,14 @@ public class DefaultPayloadCodec implements PayloadCodec { } @Override +public Payload write(byte[] bytes) { +if (bytes.length == 0) { +return write(new ByteArrayInputStream(bytes)); +} +return new Payload(Payloads.newByteArrayPayload(bytes), Optional.of(new Long(bytes.length))); +} + +@Override public InputStream read(Payload payload) throws IOException { return payload.getPayload().openStream(); } diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index fb22164..c38ea12 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@ -19,7 +19,6 @@ package org.apache.james.blob.objectstorage; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; @@ -93,15 +92,18 @@ public class ObjectStorageBlobsDAO implements BlobStore { } @Override -public Mono save(byte[] data) { +public Mono save(BucketName bucketName, byte[] data) { +Preconditions.checkNotNull(data); BlobId blobId = blobIdFactory.forPayload(data); +Payload payload = payloadCodec.write(data); Blob blob = blobStore.blobBuilder(blobId.asString()) -.payload(payloadCodec.write(new ByteArrayInputStream(data))) +.payload(payload.getPayload()) +.contentLength(payload.getLength().orElse(new Long(data.length))) .build(); return save(bucketName, blob) -.thenApply(any -> blobId); +.thenReturn(blobId); } @Override @@ -109,7 +111,7 @@ public class ObjectStorageBlobsDAO implements BlobStore { Preconditions.checkNotNull(data); BlobId tmpId = blobIdFactory.randomId(); -return save(data, tmpId) +return save(bucketName, data, tmpId) .flatMap(id -> updateBlobId(tmpId, id)); } @@ -121,18 +123,18 @@ public class ObjectStorageBlobsDAO implements BlobStore { .thenReturn(to); } -private Mono save(InputStream data, BlobId id) { +private Mono save(BucketName bucketName, InputStream data, BlobId id) { HashingInputStream hashingInputStream = new HashingInputStream(Hashing.sha256(), data); Payload payload = payloadCodec.write(hashingInput
[james-project] 01/15: Avoid blob copy when saving byte arrays
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 862dd154133317eacffc8e5434083ac0d0452b1d Author: Benoit Tellier AuthorDate: Fri Dec 7 14:14:26 2018 +0700 Avoid blob copy when saving byte arrays We can iterate the in memory byte array first to compute the blobId to use, saving a blob copy. --- .../blob/objectstorage/ObjectStorageBlobsDAO.java | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index 7bbd2da..fb22164 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@ -93,8 +93,15 @@ public class ObjectStorageBlobsDAO implements BlobStore { } @Override -public Mono save(BucketName bucketName, byte[] data) { -return save(bucketName, new ByteArrayInputStream(data)); +public Mono save(byte[] data) { +BlobId blobId = blobIdFactory.forPayload(data); + +Blob blob = blobStore.blobBuilder(blobId.asString()) +.payload(payloadCodec.write(new ByteArrayInputStream(data))) +.build(); + +return save(bucketName, blob) +.thenApply(any -> blobId); } @Override @@ -121,10 +128,15 @@ public class ObjectStorageBlobsDAO implements BlobStore { .payload(payload.getPayload()) .build(); -return Mono.fromRunnable(() -> putBlobFunction.putBlob(blob)) +return save(blob) .then(Mono.fromCallable(() -> blobIdFactory.from(hashingInputStream.hash().toString(; } +private Mono save(Blob blob) { +String containerName = this.containerName.value(); +return Mono.fromCallable(() -> blobStore.putBlob(containerName, blob)); +} + @Override public Mono readBytes(BucketName bucketName, BlobId blobId) { return Mono.fromCallable(() -> IOUtils.toByteArray(read(bucketName, blobId))); @@ -145,7 +157,6 @@ public class ObjectStorageBlobsDAO implements BlobStore { "Failed to readBytes blob " + blobId.asString(), cause); } - } public void deleteContainer() { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 02/03: JAMES-2771 Fix concurrency issues on CI benchmark
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit bc257bc82ab29aad7a1e7e4b2f5f096261a07495 Author: Gautier DI FOLCO AuthorDate: Wed Jul 3 13:42:18 2019 +0200 JAMES-2771 Fix concurrency issues on CI benchmark --- JenkinsfileStressTests.groovy | 4 1 file changed, 4 insertions(+) diff --git a/JenkinsfileStressTests.groovy b/JenkinsfileStressTests.groovy index 076cbdb..737f690 100644 --- a/JenkinsfileStressTests.groovy +++ b/JenkinsfileStressTests.groovy @@ -10,6 +10,10 @@ // It may be used to wait for a service to be available. pipeline { +options { +disableConcurrentBuilds() +} + agent none stages { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch master updated (aec776e -> 78813a8)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from aec776e Merge remote-tracking branch 'btellier/JAMES-2807' new f7cf967 JAMES-2773 Fix CI benchmark glowroot creation new bc257bc JAMES-2771 Fix concurrency issues on CI benchmark new 78813a8 JAMES-2771 Fix dirty provisionning for CI benchmarks The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: JenkinsfileStressTests| 88 --- JenkinsfileStressTests.groovy | 9 + 2 files changed, 9 insertions(+), 88 deletions(-) delete mode 100644 JenkinsfileStressTests - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 03/03: JAMES-2771 Fix dirty provisionning for CI benchmarks
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 78813a88b126936a38180547a089aa5fbc47f113 Author: Gautier DI FOLCO AuthorDate: Wed Jul 3 14:13:25 2019 +0200 JAMES-2771 Fix dirty provisionning for CI benchmarks --- JenkinsfileStressTests.groovy | 4 1 file changed, 4 insertions(+) diff --git a/JenkinsfileStressTests.groovy b/JenkinsfileStressTests.groovy index 737f690..b621958 100644 --- a/JenkinsfileStressTests.groovy +++ b/JenkinsfileStressTests.groovy @@ -50,6 +50,10 @@ pipeline { stage('Start James') { steps { script { +if (fileExists('/srv/bench-running-docker')) { +echo 'Last build failed, cleaning provisionning' +sh 'sudo btrfs subvolume delete /srv/bench-running-docker' +} sh "cd /srv && sudo btrfs subvolume snapshot bench-snapshot bench-running-docker" sh 'docker run -d --name=cassandra -p 9042:9042 -v /srv/bench-running-docker/cassandra:/var/lib/cassandra cassandra:3.11.3' sh 'docker run -d --name=elasticsearch -p 9200:9200 -v /srv/bench-running-docker/elasticsearch:/usr/share/elasticsearch/data/elasticsearch --env "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2' - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 01/03: JAMES-2773 Fix CI benchmark glowroot creation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit f7cf9679f0d0437fa5745619251956d5f7e84ad0 Author: Gautier DI FOLCO AuthorDate: Tue Jul 2 15:00:08 2019 +0200 JAMES-2773 Fix CI benchmark glowroot creation --- JenkinsfileStressTests| 88 --- JenkinsfileStressTests.groovy | 1 + 2 files changed, 1 insertion(+), 88 deletions(-) diff --git a/JenkinsfileStressTests b/JenkinsfileStressTests deleted file mode 100644 index 9bf9425..000 --- a/JenkinsfileStressTests +++ /dev/null @@ -1,88 +0,0 @@ -// This file should respect the Jenkinsfile format describe here: -// https://jenkins.io/doc/book/pipeline/jenkinsfile/ -// -// It may be used by any Jenkins instance you own. -// -// In order to work properly, it requires the following parameters: -// - SENARIO: the Gatling scenrio you want to play (ex. com.linagora.gatling.imap.scenario.ImapSimpleScenario) - -// Method in order to retry a command. -// It may be used to wait for a service to be available. -def maxRetries = 120 -def waitForCommandSuccess(command, maxRetries) { -def tries = 0; -while (tries++ < maxRetries) { -try { -sh command -return true -} catch (Exception e) { -if (tries >= maxRetries) { -throw new Exception("${maxRetries} tries exceeded. ${command} failed.", e) -} -sleep 1 SECONDS -} -} -} - -pipeline { -agent { label 'my-slave' } - -tools { -maven 'maven' -} - -stages { -stage('Compile') { -steps { -sh "mvn clean install -T1C -DskipTests" -} -} -stage('Build image') { -steps { -script { -docker.withTool('docker') { -sh "cp server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.jar dockerfiles/run/guice/cassandra-rabbitmq/destination" -sh "cp -r server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.lib dockerfiles/run/guice/cassandra-rabbitmq/destination" -sh "cp server/container/cli/target/james-server-cli.jar dockerfiles/run/guice/cassandra-rabbitmq/destination" -sh "cp -r server/container/cli/target/james-server-cli.lib dockerfiles/run/guice/cassandra-rabbitmq/destination" -sh "docker build -t james_run dockerfiles/run/guice/cassandra-rabbitmq" -} -} -} -} -stage('Start James') { -steps { -script { -docker.withTool('docker') { -sh "docker run -d --name=cassandra cassandra:3.11.3" -sh "docker run -d --name=rabbitmq rabbitmq:3.7.7-management" -sh "docker run -d --name=elasticsearch --env 'discovery.type=single-node' docker.elastic.co/elasticsearch/elasticsearch:6.3.2" - -sh "docker run -d --hostname HOSTNAME -p 25:25 -p 8081:80 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 --link cassandra:cassandra --link rabbitmq:rabbitmq --link elasticsearch:elasticsearch --name james_run -t james_run" -try { -def jamesCliWithOptions = 'java -jar /root/james-cli.jar -h 127.0.0.1' -waitForCommandSuccess("docker exec james_run ${jamesCliWithOptions} listusers", maxRetries) -} catch (Exception e) { -sh "docker logs james_run" -} -} -} -} -} -stage('Run Gatling test') { -steps { -build job: 'Gatling job', parameters: [[$class: 'StringParameterValue', name: 'SBT_ACTION', value: "gatling:testOnly ${params.SCENARIO}"]] -} -} -} - -post { -always { -script { -docker.withTool('docker') { -sh "docker rm -f cassandra rabbitmq elasticsearch james_run" -} -} -} -} -} diff --git a/JenkinsfileStressTests.groovy b/JenkinsfileStressTests.groovy index f9fb851..076cbdb 100644 --- a/JenkinsfileStressTests.groovy +++ b/JenkinsfileStressTests.groovy @@ -38,6 +38,7 @@ pipeline { sh "cp server/container/cli/target/james-server-cli.jar dockerfiles/run/guice/cassandra-rabbitmq/destination" sh "cp -r server/container/cli/targ
[james-project] 11/13: JAMES-2807 Make it clear that DeletedMessageMetadataVault do not actually store buckets
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit e7b56830237716782a7dac3dc2476a44452f379f Author: Benoit Tellier AuthorDate: Mon Jul 1 16:00:12 2019 +0700 JAMES-2807 Make it clear that DeletedMessageMetadataVault do not actually store buckets It only exposes primitives to take actions on metadata related to a bucket used for the DeletedMessageVault --- .../metadata/MemoryDeletedMessageMetadataVault.java| 6 +++--- .../vault/metadata/DeletedMessageMetadataVault.java| 4 ++-- .../metadata/DeletedMessageMetadataVaultContract.java | 18 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java index ccf5fc6..59ede6d 100644 --- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java +++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java @@ -62,7 +62,7 @@ public class MemoryDeletedMessageMetadataVault implements DeletedMessageMetadata } @Override -public Publisher removeBucket(BucketName bucketName) { +public Publisher removeMetadataRelatedToBucket(BucketName bucketName) { return Mono.fromRunnable(() -> { synchronized (table) { table.row(bucketName).clear(); @@ -81,7 +81,7 @@ public class MemoryDeletedMessageMetadataVault implements DeletedMessageMetadata @Override public Publisher retrieveStorageInformation(User user, MessageId messageId) { -return Flux.from(listBuckets()) +return Flux.from(listRelatedBuckets()) .concatMap(bucket -> { synchronized (table) { return Mono.justOrEmpty(userVault(bucket, user).get(messageId)); @@ -102,7 +102,7 @@ public class MemoryDeletedMessageMetadataVault implements DeletedMessageMetadata } @Override -public Publisher listBuckets() { +public Publisher listRelatedBuckets() { synchronized (table) { return Flux.fromIterable(ImmutableSet.copyOf(table.rowKeySet())); } diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java index 25b5a4a..3aab7aa 100644 --- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java +++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java @@ -27,7 +27,7 @@ import org.reactivestreams.Publisher; public interface DeletedMessageMetadataVault { Publisher store(DeletedMessageWithStorageInformation deletedMessage); -Publisher removeBucket(BucketName bucketName); +Publisher removeMetadataRelatedToBucket(BucketName bucketName); Publisher remove(BucketName bucketName, User user, MessageId messageId); @@ -35,5 +35,5 @@ public interface DeletedMessageMetadataVault { Publisher listMessages(BucketName bucketName, User user); -Publisher listBuckets(); +Publisher listRelatedBuckets(); } diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java index 3b85bc5..0052f0e 100644 --- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java +++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java @@ -79,7 +79,7 @@ public interface DeletedMessageMetadataVaultContract { @Test default void listBucketsShouldBeEmptyWhenNoMessageInserted() { -Stream messages = Flux.from(metadataVault().listBuckets()).toStream(); +Stream messages = Flux.from(metadataVault().listRelatedBuckets()).toStream(); assertThat(messages).isEmpty(); } @@ -88,7 +88,7 @@ public interface DeletedMessageMetadataVaultContract { Mono.from(metadataVault().store(DELETED_MESSAGE)).block(); Mono.from(metadataVault().store(DELETED_MESSAGE_2_OTHER_BUCKET)).block(); -Stream messages = Flux.from(metadataVault().listBuckets()).toStream(); +Stream messages = Flux.from(metadataVault().listRelatedBuckets()).to
[james-project] 07/13: JAMES-2807 Create POJOs for DeletedMessageMetadataVault API
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 9ebaa14a0ace03e0b2b19b7cee18b15e95376183 Author: Benoit Tellier AuthorDate: Tue Jun 25 11:21:36 2019 +0700 JAMES-2807 Create POJOs for DeletedMessageMetadataVault API --- .../deleted-messages-vault-blobstore/pom.xml | 86 ++ .../DeletedMessageWithStorageInformation.java | 61 +++ .../org/apache/james/vault/StorageInformation.java | 64 .../vault/DeletedMessageVaultMetadataFixture.java | 30 .../DeletedMessageWithStorageInformationTest.java | 47 .../apache/james/vault/StorageInformationTest.java | 47 mailbox/pom.xml| 4 + 7 files changed, 339 insertions(+) diff --git a/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml b/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml new file mode 100644 index 000..5575f57 --- /dev/null +++ b/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml @@ -0,0 +1,86 @@ + + +http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;> +4.0.0 + + +apache-james-mailbox +org.apache.james +3.4.0-SNAPSHOT +../../pom.xml + + + apache-james-mailbox-deleted-messages-vault-blobstore +Apache James :: Mailbox :: Plugin :: Deleted Messages Vault :: BlobStore +Apache James Mailbox Deleted Messages Vault implementation on top of BlobStore + + + +${james.groupId} +apache-james-mailbox-api +test-jar +test + + +${james.groupId} + apache-james-mailbox-deleted-messages-vault + + +${james.groupId} + apache-james-mailbox-deleted-messages-vault +test-jar +test + + +${james.groupId} +apache-james-mailbox-memory +test + + +${james.groupId} +apache-james-mailbox-memory +test +test-jar + + +${james.groupId} +blob-api + + +nl.jqno.equalsverifier +equalsverifier +test + + +org.assertj +assertj-core +test + + +org.junit.jupiter +junit-jupiter-engine +test + + +org.junit.platform +junit-platform-launcher +test + + + + \ No newline at end of file diff --git a/mailbox/plugin/deleted-messages-vault-blobstore/src/main/java/org/apache/james/vault/DeletedMessageWithStorageInformation.java b/mailbox/plugin/deleted-messages-vault-blobstore/src/main/java/org/apache/james/vault/DeletedMessageWithStorageInformation.java new file mode 100644 index 000..669b3a6 --- /dev/null +++ b/mailbox/plugin/deleted-messages-vault-blobstore/src/main/java/org/apache/james/vault/DeletedMessageWithStorageInformation.java @@ -0,0 +1,61 @@ +/ + * 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.vault; + +import java.util.Objects; + +import com.google.common.base.Preconditions; + +public class DeletedMessageWithStorageInformation { +private final DeletedMessage deletedmessage; +private final StorageInformation storageInformation; + +public DeletedMessageWithStorageInformation(DeletedMessage deletedmessage, StorageInformation storageInformation) { +Precondi
[james-project] 05/13: JAMES-2806 add a metric for deleteBucket method and test in its contract
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 6ec43fb87bd37317da03574c3a5939aa50263563 Author: Rene Cordier AuthorDate: Tue Jul 2 10:35:48 2019 +0700 JAMES-2806 add a metric for deleteBucket method and test in its contract --- .../org/apache/james/blob/api/MetricableBlobStore.java | 4 +++- .../apache/james/blob/api/MetricableBlobStoreContract.java | 14 ++ .../apache/james/blob/cassandra/CassandraBlobsDAOTest.java | 7 +++ .../blob/objectstorage/ObjectStorageBlobsDAOTest.java | 7 +++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java index 89548d8..11fd997 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java @@ -36,6 +36,7 @@ public class MetricableBlobStore implements BlobStore { static final String SAVE_INPUT_STREAM_TIMER_NAME = BLOB_STORE_METRIC_PREFIX + "saveInputStream"; static final String READ_BYTES_TIMER_NAME = BLOB_STORE_METRIC_PREFIX + "readBytes"; static final String READ_TIMER_NAME = BLOB_STORE_METRIC_PREFIX + "read"; +static final String DELETE_TIMER_NAME = BLOB_STORE_METRIC_PREFIX + "delete"; private final MetricFactory metricFactory; private final BlobStore blobStoreImpl; @@ -73,6 +74,7 @@ public class MetricableBlobStore implements BlobStore { @Override public Mono deleteBucket(BucketName bucketName) { -return blobStoreImpl.deleteBucket(bucketName); +return metricFactory +.runPublishingTimerMetric(DELETE_TIMER_NAME, () -> blobStoreImpl.deleteBucket(bucketName)); } } diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java index 74a30ff..983c516 100644 --- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java @@ -19,6 +19,7 @@ package org.apache.james.blob.api; +import static org.apache.james.blob.api.MetricableBlobStore.DELETE_TIMER_NAME; import static org.apache.james.blob.api.MetricableBlobStore.READ_BYTES_TIMER_NAME; import static org.apache.james.blob.api.MetricableBlobStore.READ_TIMER_NAME; import static org.apache.james.blob.api.MetricableBlobStore.SAVE_BYTES_TIMER_NAME; @@ -101,4 +102,17 @@ public interface MetricableBlobStoreContract extends BlobStoreContract { assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(READ_TIMER_NAME)) .hasSize(2); } + +@Test +default void deleteBucketShouldPublishDeleteTimerMetrics() { +BucketName bucketName = BucketName.of("custom"); +testee().save(BucketName.DEFAULT, BYTES_CONTENT).block(); +testee().save(bucketName, BYTES_CONTENT).block(); + +testee().deleteBucket(BucketName.DEFAULT); +testee().deleteBucket(bucketName); + + assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(DELETE_TIMER_NAME)) +.hasSize(2); +} } \ No newline at end of file diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java index 758ad7e..23e3375 100644 --- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java +++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java @@ -35,6 +35,7 @@ import org.apache.james.blob.api.MetricableBlobStore; import org.apache.james.blob.api.MetricableBlobStoreContract; import org.apache.james.util.ZeroedInputStream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -70,6 +71,12 @@ public class CassandraBlobsDAOTest implements MetricableBlobStoreContract { return new HashBlobId.Factory(); } +@Override +@Disabled("JAMES-2806: delete bucket not implemented yet for Cassandra") +public void deleteBucketShouldPublishDeleteTimerMetrics() { + +} + @Test void readBytesShouldReturnSplitSavedDataByChunk() { String longString = Strings.repeat("0123456789\n", MULTIPLE_CHUNK_SIZE); diff --git a/server/blob/blob-objectstorage/src/test/ja
[james-project] branch master updated (9d244d5 -> aec776e)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from 9d244d5 JAMES-2813 small fixes on TaskManagerContract new 7257bc8 JAMES-2806 add deleteBucket method in BlobStore new 53d3ed7 JAMES-2806 implement buckets with memory BlobStore new 2672ea9 JAMES-2806 add contract for BlobStore with custom buckets new 1a7e058 JAMES-2806 Add deleteBucket implementation for memory and its contract new 6ec43fb JAMES-2806 add a metric for deleteBucket method and test in its contract new 2a2af71 JAMES-2806 add tests for deleteBucket with UnionBlobStore new 40292be Merge remote-tracking branch 'rcordier/james-2806-bucket-name-memory' new 9ebaa14 JAMES-2807 Create POJOs for DeletedMessageMetadataVault API new c7177df JAMES-2807 DeletedMessageMetadataVault API and memory skeleton new 5063bfc JAMES-2807 Implement Memory DeletedMessageMetadataVault and related contract new 092e127 JAMES-2807 Simplify maven structure for the vault new e7b5683 JAMES-2807 Make it clear that DeletedMessageMetadataVault do not actually store buckets new aec776e Merge remote-tracking branch 'btellier/JAMES-2807' The 13 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: mailbox/plugin/deleted-messages-vault/pom.xml | 4 + .../MemoryDeletedMessageMetadataVault.java | 115 .../DeletedMessageMetadataVault.java} | 21 +-- .../DeletedMessageWithStorageInformation.java} | 51 +++--- .../james/vault/metadata/StorageInformation.java | 44 ++--- .../MemoryDeletedMessageMetadataVaultTest.java | 19 +- .../DeletedMessageMetadataVaultContract.java | 199 + .../DeletedMessageVaultMetadataFixture.java| 23 +-- .../DeletedMessageWithStorageInformationTest.java | 24 ++- .../vault/metadata/StorageInformationTest.java | 30 ++-- mailbox/pom.xml| 3 + .../java/org/apache/james/blob/api/BlobStore.java | 2 + .../apache/james/blob/api/MetricableBlobStore.java | 7 + .../james/blob/api/BucketBlobStoreContract.java| 142 +++ .../blob/api/MetricableBlobStoreContract.java | 14 ++ .../james/blob/cassandra/CassandraBlobsDAO.java| 6 + .../blob/cassandra/CassandraBlobsDAOTest.java | 7 + .../apache/james/blob/memory/MemoryBlobStore.java | 44 +++-- .../james/blob/memory/MemoryBlobStoreTest.java | 3 +- .../blob/objectstorage/ObjectStorageBlobsDAO.java | 6 + .../objectstorage/ObjectStorageBlobsDAOTest.java | 7 + .../apache/james/blob/union/UnionBlobStore.java| 7 + .../james/blob/union/UnionBlobStoreTest.java | 49 + 23 files changed, 692 insertions(+), 135 deletions(-) create mode 100644 mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java copy mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/{DeletedMessageVault.java => metadata/DeletedMessageMetadataVault.java} (68%) copy mailbox/plugin/{quota-search/src/main/java/org/apache/james/quota/search/Limit.java => deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformation.java} (56%) copy server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/ClearCommand.java => mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/StorageInformation.java (62%) copy server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryTest.java => mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVaultTest.java (68%) create mode 100644 mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java copy server/container/guice/blob-memory-guice/src/main/java/org/apache/james/modules/BlobMemoryModule.java => mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageVaultMetadataFixture.java (69%) copy server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommandTest.java => mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformationTest.java (67%) copy mailet/api/src/test/java/org/apache/mailet/AttributeNameTest.java => mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/StorageInformationTest.java (70%) create mode 1
[james-project] 12/13: Merge remote-tracking branch 'rcordier/james-2806-bucket-name-memory'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 40292bec751517ba5c64a0026dea219a9e939e43 Merge: 9d244d5 2a2af71 Author: Antoine DUPRAT AuthorDate: Thu Jul 4 10:32:39 2019 +0200 Merge remote-tracking branch 'rcordier/james-2806-bucket-name-memory' .../java/org/apache/james/blob/api/BlobStore.java | 2 + .../apache/james/blob/api/MetricableBlobStore.java | 7 + .../james/blob/api/BucketBlobStoreContract.java| 142 + .../blob/api/MetricableBlobStoreContract.java | 14 ++ .../james/blob/cassandra/CassandraBlobsDAO.java| 6 + .../blob/cassandra/CassandraBlobsDAOTest.java | 7 + .../apache/james/blob/memory/MemoryBlobStore.java | 44 +-- .../james/blob/memory/MemoryBlobStoreTest.java | 3 +- .../blob/objectstorage/ObjectStorageBlobsDAO.java | 6 + .../objectstorage/ObjectStorageBlobsDAOTest.java | 7 + .../apache/james/blob/union/UnionBlobStore.java| 7 + .../james/blob/union/UnionBlobStoreTest.java | 49 +++ 12 files changed, 282 insertions(+), 12 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 13/13: Merge remote-tracking branch 'btellier/JAMES-2807'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit aec776ebb4bce831dd4ae08ab38e28b0b9d6c4e7 Merge: 40292be e7b5683 Author: Antoine DUPRAT AuthorDate: Thu Jul 4 10:33:15 2019 +0200 Merge remote-tracking branch 'btellier/JAMES-2807' mailbox/plugin/deleted-messages-vault/pom.xml | 4 + .../MemoryDeletedMessageMetadataVault.java | 115 .../metadata/DeletedMessageMetadataVault.java | 39 .../DeletedMessageWithStorageInformation.java | 63 +++ .../james/vault/metadata/StorageInformation.java | 64 +++ .../MemoryDeletedMessageMetadataVaultTest.java | 38 .../DeletedMessageMetadataVaultContract.java | 199 + .../DeletedMessageVaultMetadataFixture.java| 31 .../DeletedMessageWithStorageInformationTest.java | 48 + .../vault/metadata/StorageInformationTest.java | 47 + mailbox/pom.xml| 3 + 11 files changed, 651 insertions(+) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 06/13: JAMES-2806 add tests for deleteBucket with UnionBlobStore
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2a2af7101ec83fa49173412499ea569f84200b36 Author: Rene Cordier AuthorDate: Tue Jul 2 10:39:04 2019 +0700 JAMES-2806 add tests for deleteBucket with UnionBlobStore --- .../james/blob/union/UnionBlobStoreTest.java | 39 ++ 1 file changed, 39 insertions(+) diff --git a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java index a44fd0d..1789129 100644 --- a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java +++ b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java @@ -489,4 +489,43 @@ class UnionBlobStoreTest implements BlobStoreContract { assertThat(pushBackIS) .hasSameContentAs(new ByteArrayInputStream(new byte[0])); } + +@Test +void deleteBucketShouldDeleteBothCurrentAndLegacyBuckets() { +BlobId legacyBlobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block(); +BlobId currentBlobId = currentBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block(); + +unionBlobStore.deleteBucket(BucketName.DEFAULT).block(); + +assertThatThrownBy(() -> legacyBlobStore.readBytes(BucketName.DEFAULT, legacyBlobId).block()) +.isInstanceOf(ObjectStoreException.class); +assertThatThrownBy(() -> currentBlobStore.readBytes(BucketName.DEFAULT, currentBlobId).block()) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +void deleteBucketShouldDeleteCurrentBucketEvenWhenLegacyDoesNotExist() { +BlobId currentBlobId = currentBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block(); + +unionBlobStore.deleteBucket(BucketName.DEFAULT).block(); + +assertThatThrownBy(() -> currentBlobStore.readBytes(BucketName.DEFAULT, currentBlobId).block()) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +void deleteBucketShouldDeleteLegacyBucketEvenWhenCurrentDoesNotExist() { +BlobId legacyBlobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block(); + +unionBlobStore.deleteBucket(BucketName.DEFAULT).block(); + +assertThatThrownBy(() -> legacyBlobStore.readBytes(BucketName.DEFAULT, legacyBlobId).block()) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +void deleteBucketShouldNotThrowWhenCurrentAndLegacyBucketsDoNotExist() { +assertThatCode(() -> unionBlobStore.deleteBucket(BucketName.DEFAULT).block()) +.doesNotThrowAnyException(); +} } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 04/13: JAMES-2806 Add deleteBucket implementation for memory and its contract
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 1a7e0588d24a86728dd04289c899fead15c78355 Author: Rene Cordier AuthorDate: Mon Jul 1 10:55:21 2019 +0700 JAMES-2806 Add deleteBucket implementation for memory and its contract --- .../james/blob/api/BucketBlobStoreContract.java| 36 ++ .../apache/james/blob/memory/MemoryBlobStore.java | 11 --- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java index 4655bb0..d52d703 100644 --- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java @@ -20,6 +20,7 @@ package org.apache.james.blob.api; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.io.ByteArrayInputStream; @@ -39,6 +40,30 @@ public interface BucketBlobStoreContract { BlobId.Factory blobIdFactory(); @Test +default void deleteBucketShouldThrowWhenNullBucketName() { +assertThatThrownBy(() -> testee().deleteBucket(null).block()) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void deleteBucketShouldDeleteExistingBucketWithItsData() { +BlobId blobId = testee().save(CUSTOM, SHORT_BYTEARRAY).block(); +testee().deleteBucket(CUSTOM).block(); + +assertThatThrownBy(() -> testee().read(CUSTOM, blobId)) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +default void deleteBucketShouldBeIdempotent(){ +testee().save(CUSTOM, SHORT_BYTEARRAY).block(); +testee().deleteBucket(CUSTOM).block(); + +assertThatCode(() -> testee().deleteBucket(CUSTOM).block()) +.doesNotThrowAnyException(); +} + +@Test default void saveBytesShouldThrowWhenNullBucketName() { assertThatThrownBy(() -> testee().save(null, SHORT_BYTEARRAY).block()) .isInstanceOf(NullPointerException.class); @@ -103,4 +128,15 @@ public interface BucketBlobStoreContract { .operationCount(10) .runSuccessfullyWithin(Duration.ofMinutes(1)); } + +@Test +default void deleteBucketConcurrentlyShouldNotFail() throws Exception { +testee().save(CUSTOM, SHORT_BYTEARRAY).block(); + +ConcurrentTestRunner.builder() +.operation(((threadNumber, step) -> testee().deleteBucket(CUSTOM).block())) +.threadCount(10) +.operationCount(10) +.runSuccessfullyWithin(Duration.ofMinutes(1)); +} } diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java index b7f907a..812ea3d 100644 --- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java +++ b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java @@ -27,7 +27,6 @@ import java.util.Optional; import javax.inject.Inject; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.NotImplementedException; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; import org.apache.james.blob.api.BucketName; @@ -35,10 +34,8 @@ import org.apache.james.blob.api.ObjectStoreException; import com.google.common.base.Preconditions; import com.google.common.collect.HashBasedTable; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Table; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class MemoryBlobStore implements BlobStore { @@ -92,7 +89,13 @@ public class MemoryBlobStore implements BlobStore { @Override public Mono deleteBucket(BucketName bucketName) { -throw new NotImplementedException("not implemented"); +Preconditions.checkNotNull(bucketName); + +return Mono.fromRunnable(() -> { +synchronized (blobs) { +blobs.row(bucketName).clear(); +} +}); } private byte[] retrieveStoredValue(BucketName bucketName, BlobId blobId) { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 09/13: JAMES-2807 Implement Memory DeletedMessageMetadataVault and related contract
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 5063bfca0d28010a508fa7b132a0b6b4b199ab7d Author: Benoit Tellier AuthorDate: Tue Jun 25 14:14:26 2019 +0700 JAMES-2807 Implement Memory DeletedMessageMetadataVault and related contract --- .../pom.xml| 51 +- .../vault/MemoryDeletedMessageMetadataVault.java | 68 ++- .../MemoryDeletedMessageMetadataVaultTest.java}| 22 ++- .../DeletedMessageWithStorageInformation.java | 16 +- .../vault/DeletedMessageMetadataVaultContract.java | 198 + .../vault/DeletedMessageVaultMetadataFixture.java | 1 + 6 files changed, 331 insertions(+), 25 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml b/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml index d5ae54e..faf54ee 100644 --- a/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml +++ b/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml @@ -31,10 +31,57 @@ -org.apache.james +${james.groupId} +apache-james-mailbox-api +test-jar +test + + +${james.groupId} + apache-james-mailbox-deleted-messages-vault +test-jar +test + + +${james.groupId} + apache-james-mailbox-deleted-messages-vault-blobstore + + +${james.groupId} apache-james-mailbox-deleted-messages-vault-blobstore +test-jar +test + + +${james.groupId} +apache-james-mailbox-memory +test + + +${james.groupId} +apache-james-mailbox-memory +test +test-jar + + +com.google.guava +guava + + +org.assertj +assertj-core +test + + +org.junit.jupiter +junit-jupiter-engine +test + + +org.junit.platform +junit-platform-launcher +test - \ No newline at end of file diff --git a/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java b/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java index 33f11f6..4bafe68 100644 --- a/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java +++ b/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java @@ -19,40 +19,94 @@ package org.apache.james.vault; -import org.apache.commons.lang3.NotImplementedException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + import org.apache.james.blob.api.BucketName; import org.apache.james.core.User; import org.apache.james.mailbox.model.MessageId; import org.reactivestreams.Publisher; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + public class MemoryDeletedMessageMetadataVault implements DeletedMessageMetadataVault { +private final Table> table; + +public MemoryDeletedMessageMetadataVault() { +table = HashBasedTable.create(); +} + @Override public Publisher store(DeletedMessageWithStorageInformation deletedMessage) { -throw new NotImplementedException("Not yet implemented"); +BucketName bucketName = deletedMessage.getStorageInformation().getBucketName(); +User owner = deletedMessage.getDeletedMessage().getOwner(); +MessageId messageId = deletedMessage.getDeletedMessage().getMessageId(); + +return Mono.fromRunnable(() -> { +synchronized (table) { +Map userVault = userVault(bucketName, owner); +userVault.put(messageId, deletedMessage); +table.put(bucketName, owner, userVault); +} +}); } @Override public Publisher removeBucket(BucketName bucketName) { -throw new NotImplementedException("Not yet implemented"); +return Mono.fromRunnable(() -> { +synchronized (table) { +table.row(bucketName).clear(); +} +}); } @Override public Publisher remove(BucketName bucketName, User user, MessageId messageId) { -thro
[james-project] 03/13: JAMES-2806 add contract for BlobStore with custom buckets
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2672ea9c839bbaca795ebe0146bcfdaab7014a75 Author: Rene Cordier AuthorDate: Tue Jun 25 16:49:46 2019 +0700 JAMES-2806 add contract for BlobStore with custom buckets --- .../james/blob/api/BucketBlobStoreContract.java| 106 + .../james/blob/memory/MemoryBlobStoreTest.java | 3 +- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java new file mode 100644 index 000..4655bb0 --- /dev/null +++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java @@ -0,0 +1,106 @@ +/ + * 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.blob.api; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.time.Duration; + +import org.apache.james.util.concurrency.ConcurrentTestRunner; +import org.junit.jupiter.api.Test; + +public interface BucketBlobStoreContract { +String SHORT_STRING = "toto"; +byte[] SHORT_BYTEARRAY = SHORT_STRING.getBytes(StandardCharsets.UTF_8); +BucketName CUSTOM = BucketName.of("custom"); + +BlobStore testee(); + +BlobId.Factory blobIdFactory(); + +@Test +default void saveBytesShouldThrowWhenNullBucketName() { +assertThatThrownBy(() -> testee().save(null, SHORT_BYTEARRAY).block()) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void saveStringShouldThrowWhenNullBucketName() { +assertThatThrownBy(() -> testee().save(null, SHORT_STRING).block()) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void saveInputStreamShouldThrowWhenNullBucketName() { +assertThatThrownBy(() -> testee().save(null, new ByteArrayInputStream(SHORT_BYTEARRAY)).block()) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void readShouldThrowWhenNullBucketName() { +BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block(); +assertThatThrownBy(() -> testee().read(null, blobId)) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void readBytesStreamShouldThrowWhenNullBucketName() { +BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block(); +assertThatThrownBy(() -> testee().readBytes(null, blobId).block()) +.isInstanceOf(NullPointerException.class); +} + +@Test +default void readStringShouldThrowWhenBucketDoesNotExist() { +BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block(); +assertThatThrownBy(() -> testee().read(CUSTOM, blobId)) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +default void readBytesStreamShouldThrowWhenBucketDoesNotExist() { +BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block(); +assertThatThrownBy(() -> testee().readBytes(CUSTOM, blobId).block()) +.isInstanceOf(ObjectStoreException.class); +} + +@Test +default void shouldBeAbleToSaveDataInMultipleBuckets() { +BlobId blobIdDefault = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block(); +BlobId blobIdCustom = testee().save(CUSTOM, SHORT_BYTEARRAY).block(); + +byte[] bytesDefault =
[james-project] 02/13: JAMES-2806 implement buckets with memory BlobStore
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 53d3ed7317abf7f541f2fa01c1b6d0d8473da996 Author: Rene Cordier AuthorDate: Tue Jun 25 14:50:54 2019 +0700 JAMES-2806 implement buckets with memory BlobStore --- .../apache/james/blob/memory/MemoryBlobStore.java | 35 +++--- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java index 154a9b5..b7f907a 100644 --- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java +++ b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java @@ -23,7 +23,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; import javax.inject.Inject; @@ -35,31 +34,41 @@ import org.apache.james.blob.api.BucketName; import org.apache.james.blob.api.ObjectStoreException; import com.google.common.base.Preconditions; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Table; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class MemoryBlobStore implements BlobStore { -private final ConcurrentHashMap blobs; private final BlobId.Factory factory; +private final Table blobs; @Inject public MemoryBlobStore(BlobId.Factory factory) { this.factory = factory; -blobs = new ConcurrentHashMap<>(); +blobs = HashBasedTable.create(); } @Override public Mono save(BucketName bucketName, byte[] data) { +Preconditions.checkNotNull(bucketName); Preconditions.checkNotNull(data); -BlobId blobId = factory.forPayload(data); -blobs.put(blobId, data); +BlobId blobId = factory.forPayload(data); -return Mono.just(blobId); +return Mono.fromCallable(() -> { +synchronized (blobs) { +blobs.put(bucketName, blobId, data); +return blobId; +} +}); } @Override public Mono save(BucketName bucketName, InputStream data) { +Preconditions.checkNotNull(bucketName); Preconditions.checkNotNull(data); try { byte[] bytes = IOUtils.toByteArray(data); @@ -71,12 +80,14 @@ public class MemoryBlobStore implements BlobStore { @Override public Mono readBytes(BucketName bucketName, BlobId blobId) { -return Mono.fromCallable(() -> retrieveStoredValue(blobId)); +Preconditions.checkNotNull(bucketName); +return Mono.fromCallable(() -> retrieveStoredValue(bucketName, blobId)); } @Override public InputStream read(BucketName bucketName, BlobId blobId) { -return new ByteArrayInputStream(retrieveStoredValue(blobId)); +Preconditions.checkNotNull(bucketName); +return new ByteArrayInputStream(retrieveStoredValue(bucketName, blobId)); } @Override @@ -84,8 +95,10 @@ public class MemoryBlobStore implements BlobStore { throw new NotImplementedException("not implemented"); } -private byte[] retrieveStoredValue(BlobId blobId) { -return Optional.ofNullable(blobs.get(blobId)) -.orElseThrow(() -> new ObjectStoreException("unable to find blob with id " + blobId)); +private byte[] retrieveStoredValue(BucketName bucketName, BlobId blobId) { +synchronized (blobs) { +return Optional.ofNullable(blobs.get(bucketName, blobId)) +.orElseThrow(() -> new ObjectStoreException("Unable to find blob with id " + blobId + " in bucket " + bucketName.asString())); +} } } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 10/13: JAMES-2807 Simplify maven structure for the vault
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 092e127f8f324b1f51bce87b58882856c517227b Author: Benoit Tellier AuthorDate: Mon Jul 1 14:17:53 2019 +0700 JAMES-2807 Simplify maven structure for the vault Define the metadata storage API within the vault API. As the memory implementation is shipped as part of the vault API, include the memory implementation for metadata storage there too. --- .../pom.xml| 87 -- .../deleted-messages-vault-blobstore/pom.xml | 86 - mailbox/plugin/deleted-messages-vault/pom.xml | 4 + .../MemoryDeletedMessageMetadataVault.java | 5 +- .../metadata}/DeletedMessageMetadataVault.java | 2 +- .../DeletedMessageWithStorageInformation.java | 4 +- .../james/vault/metadata}/StorageInformation.java | 2 +- .../MemoryDeletedMessageMetadataVaultTest.java | 4 +- .../DeletedMessageMetadataVaultContract.java | 9 ++- .../DeletedMessageVaultMetadataFixture.java| 2 +- .../DeletedMessageWithStorageInformationTest.java | 5 +- .../vault/metadata}/StorageInformationTest.java| 6 +- mailbox/pom.xml| 2 - pom.xml| 11 --- 14 files changed, 28 insertions(+), 201 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml b/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml deleted file mode 100644 index faf54ee..000 --- a/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - -http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;> -4.0.0 - - -apache-james-mailbox -org.apache.james -3.4.0-SNAPSHOT -../../pom.xml - - - apache-james-mailbox-deleted-messages-vault-blobstore-memory -Apache James :: Mailbox :: Plugin :: Deleted Messages Vault :: BlobStore :: Memory -Memory implementation of the metadata storage API required by the Deleted Messages Vault implementation on top of BlobStore - - - -${james.groupId} -apache-james-mailbox-api -test-jar -test - - -${james.groupId} - apache-james-mailbox-deleted-messages-vault -test-jar -test - - -${james.groupId} - apache-james-mailbox-deleted-messages-vault-blobstore - - -${james.groupId} - apache-james-mailbox-deleted-messages-vault-blobstore -test-jar -test - - -${james.groupId} -apache-james-mailbox-memory -test - - -${james.groupId} -apache-james-mailbox-memory -test -test-jar - - -com.google.guava -guava - - -org.assertj -assertj-core -test - - -org.junit.jupiter -junit-jupiter-engine -test - - -org.junit.platform -junit-platform-launcher -test - - - - \ No newline at end of file diff --git a/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml b/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml deleted file mode 100644 index 5575f57..000 --- a/mailbox/plugin/deleted-messages-vault-blobstore/pom.xml +++ /dev/null @@ -1,86 +0,0 @@ - - -http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;> -4.0.0 - - -apache-james-mailbox -org.apache.james -3.4.0-SNAPSHOT -../../pom.xml - - - apache-james-mailbox-deleted-messages-vault-blobstore -Apache James :: Mailbox :: Plugin :: Deleted Messages Vault :: BlobStore -Apache James Mailbox Deleted Messages Vault implementation on top of BlobStore - - - -${james.groupId} -apache-james-mailbox-api -test-jar -test - - -${james.groupId} - apache-james-mailbox-deleted-messages-vault - - -${james.groupId} - apache-james-mailbox-deleted-messages-vault -test-jar -test - - -${james.groupId} -apache-james-mailbox-memory -test - - -${james.groupId} -
[james-project] 08/13: JAMES-2807 DeletedMessageMetadataVault API and memory skeleton
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit c7177df2f5be728270516db4580cba6e4acefa13 Author: Benoit Tellier AuthorDate: Tue Jun 25 11:31:16 2019 +0700 JAMES-2807 DeletedMessageMetadataVault API and memory skeleton --- .../pom.xml| 40 +++ .../vault/MemoryDeletedMessageMetadataVault.java | 58 ++ .../james/vault/DeletedMessageMetadataVault.java | 39 +++ mailbox/pom.xml| 1 + pom.xml| 11 5 files changed, 149 insertions(+) diff --git a/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml b/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml new file mode 100644 index 000..d5ae54e --- /dev/null +++ b/mailbox/plugin/deleted-messages-vault-blobstore-memory/pom.xml @@ -0,0 +1,40 @@ + + +http://maven.apache.org/POM/4.0.0; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;> +4.0.0 + + +apache-james-mailbox +org.apache.james +3.4.0-SNAPSHOT +../../pom.xml + + + apache-james-mailbox-deleted-messages-vault-blobstore-memory +Apache James :: Mailbox :: Plugin :: Deleted Messages Vault :: BlobStore :: Memory +Memory implementation of the metadata storage API required by the Deleted Messages Vault implementation on top of BlobStore + + + +org.apache.james + apache-james-mailbox-deleted-messages-vault-blobstore + + + + + \ No newline at end of file diff --git a/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java b/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java new file mode 100644 index 000..33f11f6 --- /dev/null +++ b/mailbox/plugin/deleted-messages-vault-blobstore-memory/src/main/java/org/apache/james/vault/MemoryDeletedMessageMetadataVault.java @@ -0,0 +1,58 @@ +/ + * 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.vault; + +import org.apache.commons.lang3.NotImplementedException; +import org.apache.james.blob.api.BucketName; +import org.apache.james.core.User; +import org.apache.james.mailbox.model.MessageId; +import org.reactivestreams.Publisher; + +public class MemoryDeletedMessageMetadataVault implements DeletedMessageMetadataVault { +@Override +public Publisher store(DeletedMessageWithStorageInformation deletedMessage) { +throw new NotImplementedException("Not yet implemented"); +} + +@Override +public Publisher removeBucket(BucketName bucketName) { +throw new NotImplementedException("Not yet implemented"); +} + +@Override +public Publisher remove(BucketName bucketName, User user, MessageId messageId) { +throw new NotImplementedException("Not yet implemented"); +} + +@Override +public Publisher retrieveStorageInformation(User user, MessageId messageId) { +throw new NotImplementedException("Not yet implemented"); +} + +@Override +public Publisher listMessages(BucketName bucketName, User user) { +throw new NotImplementedException("Not yet implemented"); +} + +@Override +public Publisher listBuckets() { +throw new NotImplementedException("Not yet implemented"); +} +} diff --git a/mailbox/plugin/deleted-messages-vault-blobs
[james-project] 01/13: JAMES-2806 add deleteBucket method in BlobStore
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 7257bc83bb487a22f96449fa48ae7696d83bf322 Author: Rene Cordier AuthorDate: Wed Jun 26 15:55:31 2019 +0700 JAMES-2806 add deleteBucket method in BlobStore --- .../src/main/java/org/apache/james/blob/api/BlobStore.java | 2 ++ .../java/org/apache/james/blob/api/MetricableBlobStore.java| 5 + .../org/apache/james/blob/cassandra/CassandraBlobsDAO.java | 6 ++ .../java/org/apache/james/blob/memory/MemoryBlobStore.java | 6 ++ .../apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java | 6 ++ .../main/java/org/apache/james/blob/union/UnionBlobStore.java | 7 +++ .../java/org/apache/james/blob/union/UnionBlobStoreTest.java | 10 ++ 7 files changed, 42 insertions(+) diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java index ed7f6f7..3302203 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java @@ -36,4 +36,6 @@ public interface BlobStore { default Mono save(BucketName bucketName, String data) { return save(bucketName, data.getBytes(StandardCharsets.UTF_8)); } + +Mono deleteBucket(BucketName bucketName); } diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java index 3976bcd..89548d8 100644 --- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java +++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java @@ -70,4 +70,9 @@ public class MetricableBlobStore implements BlobStore { return metricFactory .runPublishingTimerMetric(READ_TIMER_NAME, () -> blobStoreImpl.read(bucketName, blobId)); } + +@Override +public Mono deleteBucket(BucketName bucketName) { +return blobStoreImpl.deleteBucket(bucketName); +} } diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java index 23be4e5..38edc21 100644 --- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java +++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java @@ -34,6 +34,7 @@ import java.util.stream.Stream; import javax.inject.Inject; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.tuple.Pair; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; @@ -218,4 +219,9 @@ public class CassandraBlobsDAO implements BlobStore { return Mono.fromCallable(() -> IOUtils.toByteArray(data)) .flatMap(this::saveAsMono); } + +@Override +public Mono deleteBucket(BucketName bucketName) { +throw new NotImplementedException("not implemented"); +} } diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java index 173ce78..154a9b5 100644 --- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java +++ b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java @@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; import javax.inject.Inject; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.NotImplementedException; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; import org.apache.james.blob.api.BucketName; @@ -78,6 +79,11 @@ public class MemoryBlobStore implements BlobStore { return new ByteArrayInputStream(retrieveStoredValue(blobId)); } +@Override +public Mono deleteBucket(BucketName bucketName) { +throw new NotImplementedException("not implemented"); +} + private byte[] retrieveStoredValue(BlobId blobId) { return Optional.ofNullable(blobs.get(blobId)) .orElseThrow(() -> new ObjectStoreException("unable to find blob with id " + blobId)); diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index 7bbd2da..48840f8 100644 --
[james-project] branch master updated: JAMES-2714 Xdoc Blob Configuration
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git The following commit(s) were added to refs/heads/master by this push: new 741b9fb JAMES-2714 Xdoc Blob Configuration new 71390f1 Merge remote-tracking branch 'dtran/blob-xdoc' 741b9fb is described below commit 741b9fb41ef076a882310c52a5137b57be00201f Author: Tran Tien Duc AuthorDate: Fri Apr 12 15:57:54 2019 +0700 JAMES-2714 Xdoc Blob Configuration --- src/homepage/howTo/deleted-messages-vault.html | 4 ++ src/site/xdoc/server/config-blob-export.xml| 58 ++ src/site/xdoc/server/config.xml| 6 +++ 3 files changed, 68 insertions(+) diff --git a/src/homepage/howTo/deleted-messages-vault.html b/src/homepage/howTo/deleted-messages-vault.html index 0cf7d0c..782278d 100644 --- a/src/homepage/howTo/deleted-messages-vault.html +++ b/src/homepage/howTo/deleted-messages-vault.html @@ -257,6 +257,10 @@ layout: default blob.export.implementation=localFile + + +More details about configuration & example at Blob Export Configuration + diff --git a/src/site/xdoc/server/config-blob-export.xml b/src/site/xdoc/server/config-blob-export.xml new file mode 100644 index 000..ac03f06 --- /dev/null +++ b/src/site/xdoc/server/config-blob-export.xml @@ -0,0 +1,58 @@ + + + + + + Apache James Server 3 - Blob Configuration + + + + + + Consult https://github.com/apache/james-project/blob/master/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/blob.properties;>blob.properties in GIT to get some examples and hints. + + + Configuration for exporting blob content + + + blob.export.implementation + localFile: Local File Exporting Mechanism (explained below). Default: localFile + + + + + For each request, this mechanism retrieves the content of a blob and save it to a distinct local file, then send an email containing the absolute path of that file to the target mail address. + Note: that absolute file path is the file location on James server. Therefore, if there are two or more James servers connected, it should not be considered an option. + + + blob.export.localFile.directory + + The directory URL to store exported blob data in files, and the URL following + http://james.apache.org/server/3/apidocs/org/apache/james/filesystem/api/FileSystem.html;>James File System scheme. + Default: file://var/blobExporting + + + + + + + + + diff --git a/src/site/xdoc/server/config.xml b/src/site/xdoc/server/config.xml index 013c4e2..97d753a 100644 --- a/src/site/xdoc/server/config.xml +++ b/src/site/xdoc/server/config.xml @@ -138,6 +138,12 @@ Deleted Messages Vault Configuration + +https://github.com/apache/james-project/blob/master/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/blob.properties;>blob.properties +Blob Export Configuration + + + For most advanced system configuration, you can configure James for the following: - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 11/12: JAMES-2709 little cleanup of dockerized Linshare
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 9dd292325e1a5572405bb3568b9a8c94363f825a Author: Rene Cordier AuthorDate: Fri Apr 12 14:43:08 2019 +0700 JAMES-2709 little cleanup of dockerized Linshare --- .../java/org/apache/james/linshare/Linshare.java | 1 - third-party/linshare/src/test/resources/ssl/ca.pem | 28 --- third-party/linshare/src/test/resources/ssl/id_rsa | 27 -- .../linshare/src/test/resources/ssl/id_rsa.pub | 1 - .../linshare/src/test/resources/ssl/linshare.key | 28 --- .../linshare/src/test/resources/ssl/linshare.pem | 97 -- 6 files changed, 182 deletions(-) diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java index 4dec0f7..9986bd7 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java @@ -37,7 +37,6 @@ import io.restassured.specification.RequestSpecification; public class Linshare { private static final String WAIT_FOR_BACKEND_INIT_LOG = ".*Server startup.*"; -private static final String WAIT_FOR_DB_INIT_LOG = ".*/linshare/webservice/rest/admin/authentication/change_password.*"; private static final int LINSHARE_BACKEND_PORT = 8080; private final GenericContainer linshareBackend; diff --git a/third-party/linshare/src/test/resources/ssl/ca.pem b/third-party/linshare/src/test/resources/ssl/ca.pem deleted file mode 100644 index 208dd8d..000 --- a/third-party/linshare/src/test/resources/ssl/ca.pem +++ /dev/null @@ -1,28 +0,0 @@ --BEGIN CERTIFICATE- -MIIEzTCCA7WgAwIBAgIJAMikNamqqRPjMA0GCSqGSIb3DQEBCwUAMIGfMQswCQYD -VQQGEwJGUjEMMAoGA1UECBMDSWRGMQ4wDAYDVQQHEwVQYXJpczERMA8GA1UEChMI -TGluYWdvcmExETAPBgNVBAsUCFImRCBTYWFzMRQwEgYDVQQDEwtMaW5hZ29yYSBD -QTEQMA4GA1UEKRMHRWFzeVJTQTEkMCIGCSqGSIb3DQEJARYVdHNhcmJvbmlAbGlu -YWdvcmEuY29tMB4XDTE1MDkxNDA4NTAxOVoXDTI1MDkxMTA4NTAxOVowgZ8xCzAJ -BgNVBAYTAkZSMQwwCgYDVQQIEwNJZEYxDjAMBgNVBAcTBVBhcmlzMREwDwYDVQQK -EwhMaW5hZ29yYTERMA8GA1UECxQIUiZEIFNhYXMxFDASBgNVBAMTC0xpbmFnb3Jh -IENBMRAwDgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0c2FyYm9uaUBs -aW5hZ29yYS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnX76W -/7NAsYW9SvK/jPCY3QlpL5lNtiN99OV2hD/Hk1PSG34rwe9GyFCL/4YikcHTnWuk -vizK1/IDGhi482FlljecWH5UxMlHG8yxUG9ahs86pNjcsyUafDAryXC3ocFtGk4v -e2kAOatGlqlV7EH2rKi0t5jnMXdV2stMeitUNSFs8+iyDQK4V3T6n/hXpxO8VXsB -wF7vd/4+idyAcC1YwUKiB+PAbUvpot+hJ8OaM1q5i3CXEFEbUCrJLh/oC2srOdhr -7Rk4YK6oz+Pw3NQTvVZBByfziE2H6YRHWdRDVcOfWh2L0z42C5tCr23LDAray/9d -uOYKl+cLKdvv4ymHAgMBAAGjggEIMIIBBDAdBgNVHQ4EFgQUnLuJzgwZk9X8Rgb0 -QUyYz6zdILQwgdQGA1UdIwSBzDCByYAUnLuJzgwZk9X8Rgb0QUyYz6zdILShgaWk -gaIwgZ8xCzAJBgNVBAYTAkZSMQwwCgYDVQQIEwNJZEYxDjAMBgNVBAcTBVBhcmlz -MREwDwYDVQQKEwhMaW5hZ29yYTERMA8GA1UECxQIUiZEIFNhYXMxFDASBgNVBAMT -C0xpbmFnb3JhIENBMRAwDgYDVQQpEwdFYXN5UlNBMSQwIgYJKoZIhvcNAQkBFhV0 -c2FyYm9uaUBsaW5hZ29yYS5jb22CCQDIpDWpqqkT4zAMBgNVHRMEBTADAQH/MA0G -CSqGSIb3DQEBCwUAA4IBAQCiEAmG+czlm/HT0s1ahWTtqcbzGl0+j3Io/JtyVNWW -ALmmYid3VejcHYDbKd0rN+yFJtI+p6CMjpRVZCDEJo8eLZr9P7YZa+jKc0OhjSgr -mD7FVwyZePid33VuKzWaMLbKiNVIcXroKkm2pEvENdibMZWBuhgrs6Pa00iYH68g -s5Y1glQV7IeCmHkwNmHtgkiLDIzJYYukxAQSnaz7su8wnGtEJS6iz8+iCtEJm8XR -FoUzfMS1/TI+C2tU80qfkc7D4kL7eEDob0zfdlZlqMKEWen47EuVuB+4DdImaI1P -i+10msgMl2o6K4tNYVlfcM3qkHSXFfwEwvWtIqvRYsx4 --END CERTIFICATE- diff --git a/third-party/linshare/src/test/resources/ssl/id_rsa b/third-party/linshare/src/test/resources/ssl/id_rsa deleted file mode 100644 index 24dd555..000 --- a/third-party/linshare/src/test/resources/ssl/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ --BEGIN RSA PRIVATE KEY- -MIIEowIBAAKCAQEA18mc6QTlSdwFqVUzLPr4h9Wpw8qOQ+MhU0fzNIqKHFZ5zwP+ -TEi5iqAoj8tSkBG5SeQFMNzYo/Botd2JkOO6rGaIaNZzTZXg9kjZ9YxtZoM+LX0f -Jm5Ts9bLWgA3rRTK1NDhpCKkUoHIfelqjOCVuCBkmL7s9UwRmAdZ9YI4jw6HOLT1 -72QhOj4Z21iD1F3JAKy4gs0H7vGQZBYxWE3NqUGlx0pb6v7N5qh4DkIKulo+QJDz -AHQeiOgCm0ZcZUu7kcVU+GbCgPyjk0l6McIG55/G8t672Krrc5HiRqvSIxqsOYt+ -NR0HBo51mXVitS+tAyFMGhGk2Z9S/mCmNeKNPQIDAQABAoIBAA9Va0n/qA9sjBZx -UHakyt5UJ4EbNqrKTAbv+O9F3PSQjI1SWlKvZEfeg6NcLlzAdaszgc7sEpTrs3Ug -7fKWzCAOFSll+8GKofa+TIavWOLM9rEi0ADaHCaOX9rgYxRwgs1GnpIcSBL41/di -i8jA+MKhwqQ8BPiVVDa6ZwEUJNK9cxPlenwSZOl12/aAPW6DATftdL7xv+fjw9Bz -BexEPHklbphHGwoTxvQfiCmTN96CGn1/W99xABKTH70tprAFgOZ78klQjXYwtxVW -rQiXmvgOTEhbrqBMxpRIzFgP+ryrEgcn02jbaq8Aa4BNbD96PJsMIo0psuTHSsnZ -Tcqe2MECgYEA+nVL50qSGlXSvPNTrnjYJHt6mkifke5clmLgX4HegjQqi2+wBjlR -QM1M+1neqB53ueJrlxS8+fZR00SyaUg7ANub5jkqiK5YsVUJk9CvlhUfDlXEW1Ce -quYvuYWr2LX7K8sh+mXDCwttDms/aaJASSvTExMV/GeWFeJpsBs8QJECgYEA3I/t -S+gAbGByUirMKXoP2sfIl3inApU93SIXgpvFnRF87GcC30bE95VYZJ8X8MdsYmro -UiWbWq/8P7PzxYFukbQw+etUs0SV6eJ2FLR7n9dTWfj2Juw86HxERoA57L9Qt6os -d0tEBWm5+ZVlRdGoavi+ADnRRbD3ugzz2QdR1+0CgYEAhxBmRG6U
[james-project] 06/12: JAMES-2709 Integration test for LinShare Blob Export Mechanism provisioning
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 7bc454914ffc826922e768b65a43f95516372537 Author: Benoit Tellier AuthorDate: Thu Apr 11 11:27:15 2019 +0700 JAMES-2709 Integration test for LinShare Blob Export Mechanism provisioning --- pom.xml| 12 + server/container/guice/blob-export-guice/pom.xml | 6 +++ .../james/modules/LinshareGuiceExtension.java | 58 ++ server/container/guice/memory-guice/pom.xml| 22 .../LinshareBlobExportMechanismProvidingTest.java | 42 .../java/org/apache/james/linshare/Linshare.java | 2 +- .../apache/james/linshare/LinshareExtension.java | 18 +++ .../resources/backend/conf/{id_rsa => id_rsa.pri} | 0 8 files changed, 150 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 1acee52..7100134 100644 --- a/pom.xml +++ b/pom.xml @@ -725,6 +725,12 @@ ${james.groupId} +apache-james-linshare +${project.version} +test-jar + + +${james.groupId} apache-james-spamassassin ${project.version} @@ -1120,6 +1126,12 @@ ${james.groupId} +blob-export-guice +${project.version} +test-jar + + +${james.groupId} blob-memory ${project.version} diff --git a/server/container/guice/blob-export-guice/pom.xml b/server/container/guice/blob-export-guice/pom.xml index b55785d..4aaf28e 100644 --- a/server/container/guice/blob-export-guice/pom.xml +++ b/server/container/guice/blob-export-guice/pom.xml @@ -37,6 +37,12 @@ ${james.groupId} apache-james-linshare +test-jar +test + + +${james.groupId} +apache-james-linshare ${james.groupId} diff --git a/server/container/guice/blob-export-guice/src/test/java/org/apache/james/modules/LinshareGuiceExtension.java b/server/container/guice/blob-export-guice/src/test/java/org/apache/james/modules/LinshareGuiceExtension.java new file mode 100644 index 000..090395f --- /dev/null +++ b/server/container/guice/blob-export-guice/src/test/java/org/apache/james/modules/LinshareGuiceExtension.java @@ -0,0 +1,58 @@ +/ + * 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.modules; + +import org.apache.james.GuiceModuleTestExtension; +import org.apache.james.linshare.LinshareConfiguration; +import org.apache.james.linshare.LinshareExtension; +import org.apache.james.linshare.LinshareFixture; +import org.junit.jupiter.api.extension.ExtensionContext; + +import com.google.inject.Module; +import com.google.inject.util.Modules; + +public class LinshareGuiceExtension implements GuiceModuleTestExtension { +private final LinshareExtension linshareExtension; + +public LinshareGuiceExtension() { +linshareExtension = new LinshareExtension(); +} + +@Override +public void beforeEach(ExtensionContext extensionContext) throws Exception { +linshareExtension.beforeEach(extensionContext); +} + +@Override +public Module getModule() { +return Modules.combine( +binder -> binder.bind(BlobExportImplChoice.class) +.toInstance(BlobExportImplChoice.LINSHARE), +binder -> { +try { +binder.bin
[james-project] 12/12: Merge remote-tracking branch 'btellier/JAMES-2709'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 1155f53813e44b59e89095835f43ae42310dbdcc Merge: 6fb06d5 9dd2923 Author: Antoine Duprat AuthorDate: Fri Apr 19 09:42:44 2019 +0200 Merge remote-tracking branch 'btellier/JAMES-2709' pom.xml| 17 +++ .../james/blob/export/api/FileExtension.java | 9 +- .../james/blob/export/api/FileExtensionTest.java | 40 +-- server/container/cli-integration/pom.xml | 6 + server/container/guice/blob-export-guice/pom.xml | 11 ++ .../apache/james/modules/BlobExportImplChoice.java | 3 +- .../james/modules/BlobExportMechanismModule.java | 8 +- .../modules/LinshareBlobExportMechanismModule.java | 47 .../modules/BlobExportMechanismModuleTest.java | 11 +- .../james/modules/LinshareGuiceExtension.java | 58 ++ server/container/guice/memory-guice/pom.xml| 23 .../LinshareBlobExportMechanismProvidingTest.java | 38 +++--- .../memory-jmap-integration-testing/pom.xml| 6 + .../main/java/org/apache/james/utils/FakeSmtp.java | 23 ++-- third-party/linshare/pom.xml | 33 ++ .../linshare/LinshareBlobExportMechanism.java | 82 + .../james/linshare/LinshareConfiguration.java | 17 ++- .../james/linshare/client/ReceivedShare.java | 2 +- .../apache/james/linshare/client/ShareRequest.java | 39 +-- .../java/org/apache/james/linshare/Linshare.java | 27 - .../linshare/LinshareBlobExportMechanismTest.java | 127 + .../james/linshare/LinshareConfigurationTest.java | 58 -- .../apache/james/linshare/LinshareExtension.java | 22 ++-- .../james/linshare/client/LinshareAPITest.java | 46 +++- .../james/linshare/client/ShareRequestTest.java| 20 +++- .../src/test/resources/backend/conf/id_rsa | 27 - .../{ssl/id_rsa => backend/conf/id_rsa.pri}| 0 .../linshare/src/test/resources/smtp/Dockerfile| 3 - .../src/test/resources/smtp/conf/smtpd.conf| 14 --- third-party/linshare/src/test/resources/ssl/ca.pem | 28 - .../linshare/src/test/resources/ssl/id_rsa.pub | 1 - .../linshare/src/test/resources/ssl/linshare.key | 28 - .../linshare/src/test/resources/ssl/linshare.pem | 97 third-party/spamassassin/pom.xml | 3 + 34 files changed, 659 insertions(+), 315 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 05/12: JAMES-2709 Provide the LinShare BlobExport mechanism as a viable choice
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit fe0a43d1b17c9ff34d6a3965e6691991bfc590a7 Author: Benoit Tellier AuthorDate: Thu Apr 11 11:08:39 2019 +0700 JAMES-2709 Provide the LinShare BlobExport mechanism as a viable choice --- pom.xml| 5 ++ server/container/guice/blob-export-guice/pom.xml | 4 ++ .../apache/james/modules/BlobExportImplChoice.java | 3 +- .../james/modules/BlobExportMechanismModule.java | 8 +++- .../modules/LinshareBlobExportMechanismModule.java | 53 ++ .../modules/BlobExportMechanismModuleTest.java | 11 - .../linshare/LinshareBlobExportMechanism.java | 5 +- 7 files changed, 85 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3110ef9..1acee52 100644 --- a/pom.xml +++ b/pom.xml @@ -720,6 +720,11 @@ ${james.groupId} +apache-james-linshare +${project.version} + + +${james.groupId} apache-james-spamassassin ${project.version} diff --git a/server/container/guice/blob-export-guice/pom.xml b/server/container/guice/blob-export-guice/pom.xml index c465ffc..b55785d 100644 --- a/server/container/guice/blob-export-guice/pom.xml +++ b/server/container/guice/blob-export-guice/pom.xml @@ -36,6 +36,10 @@ ${james.groupId} +apache-james-linshare + + +${james.groupId} blob-api-guice diff --git a/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportImplChoice.java b/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportImplChoice.java index a00eb78..8f4f201 100644 --- a/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportImplChoice.java +++ b/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportImplChoice.java @@ -30,7 +30,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; enum BlobExportImplChoice { -LOCAL_FILE("localFile"); +LOCAL_FILE("localFile"), +LINSHARE("linshare"); private static Optional from(String implNameString) { Preconditions.checkNotNull(implNameString); diff --git a/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java b/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java index ae1d6c3..6e258c9 100644 --- a/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java +++ b/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java @@ -27,6 +27,7 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.james.blob.export.api.BlobExportMechanism; import org.apache.james.blob.export.file.LocalFileBlobExportMechanism; +import org.apache.james.linshare.LinshareBlobExportMechanism; import org.apache.james.modules.mailbox.ConfigurationComponent; import org.apache.james.utils.PropertiesProvider; import org.slf4j.Logger; @@ -44,6 +45,7 @@ public class BlobExportMechanismModule extends AbstractModule { @Override protected void configure() { install(new LocalFileBlobExportMechanismModule()); +install(new LinshareBlobExportMechanismModule()); } @VisibleForTesting @@ -66,10 +68,14 @@ public class BlobExportMechanismModule extends AbstractModule { @VisibleForTesting @Provides @Singleton -BlobExportMechanism provideMechanism(BlobExportImplChoice implChoice, Provider localFileMechanismProvider) { +BlobExportMechanism provideMechanism(BlobExportImplChoice implChoice, + Provider localFileMechanismProvider, + Provider linshareMechanismProvider) { switch (implChoice) { case LOCAL_FILE: return localFileMechanismProvider.get(); +case LINSHARE: +return linshareMechanismProvider.get(); default: throw new RuntimeException("blobExportMechanism '" + implChoice.getImplName() + "' is not supported yet"); } diff --git a/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/LinshareBlobExportMechanismModule.java b/server/container/guice/blob-export-guice/src/main/java/org/apache/james/modules/LinshareBlobExportMechanismModule.java new file mode
[james-project] 07/12: JAMES-2709 Fix POMs issues
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 08d77750c4a56c5499255bd8399e4d19c5f2c49e Author: Benoit Tellier AuthorDate: Thu Apr 11 11:37:24 2019 +0700 JAMES-2709 Fix POMs issues --- server/container/cli-integration/pom.xml| 6 ++ server/container/guice/blob-export-guice/pom.xml| 1 + server/container/guice/memory-guice/pom.xml | 1 + .../memory-jmap-integration-testing/pom.xml | 6 ++ 4 files changed, 14 insertions(+) diff --git a/server/container/cli-integration/pom.xml b/server/container/cli-integration/pom.xml index 3742426..7f64b2f 100644 --- a/server/container/cli-integration/pom.xml +++ b/server/container/cli-integration/pom.xml @@ -33,6 +33,12 @@ ${james.groupId} +apache-james-mailbox-scanning-search +test-jar +test + + +${james.groupId} james-server-cli test diff --git a/server/container/guice/blob-export-guice/pom.xml b/server/container/guice/blob-export-guice/pom.xml index 4aaf28e..79ac090 100644 --- a/server/container/guice/blob-export-guice/pom.xml +++ b/server/container/guice/blob-export-guice/pom.xml @@ -64,6 +64,7 @@ ${james.groupId} james-server-guice-common test-jar +test nl.jqno.equalsverifier diff --git a/server/container/guice/memory-guice/pom.xml b/server/container/guice/memory-guice/pom.xml index af5ca6c..c69c31f 100644 --- a/server/container/guice/memory-guice/pom.xml +++ b/server/container/guice/memory-guice/pom.xml @@ -53,6 +53,7 @@ ${james.groupId} apache-james-mailbox-scanning-search test-jar +test ${james.groupId} diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml index e90ba7e..2cf9aab 100644 --- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml +++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/pom.xml @@ -41,6 +41,12 @@ ${james.groupId} +apache-james-mailbox-scanning-search +test-jar +test + + +${james.groupId} apache-james-mailbox-spamassassin test - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 10/12: JAMES-2709 Position explanation on the share
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 86159d10c3656a636b0080b78c1019e67675af6f Author: Benoit Tellier AuthorDate: Thu Apr 11 15:50:15 2019 +0700 JAMES-2709 Position explanation on the share --- .../linshare/LinshareBlobExportMechanism.java | 9 +++-- .../apache/james/linshare/client/ShareRequest.java | 29 ++ .../linshare/LinshareBlobExportMechanismTest.java | 36 + .../james/linshare/client/LinshareAPITest.java | 46 -- .../james/linshare/client/ShareRequestTest.java| 20 +- 5 files changed, 124 insertions(+), 16 deletions(-) diff --git a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java index 042c966..3af2261 100644 --- a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java +++ b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java @@ -49,26 +49,27 @@ public class LinshareBlobExportMechanism implements BlobExportMechanism { public ShareeStage blobId(BlobId blobId) { return mailAddress -> explanation -> fileExtension -> () -> { try { -exportBlob(blobId, mailAddress, fileExtension); +exportBlob(blobId, mailAddress, fileExtension, explanation); } catch (Exception e) { throw new BlobExportException("Error while exporting blob " + blobId.asString() + " to " + mailAddress.asString(), e); } }; } -private void exportBlob(BlobId blobId, MailAddress mailAddress, Optional fileExtension) throws IOException { +private void exportBlob(BlobId blobId, MailAddress mailAddress, Optional fileExtension, String explanation) throws IOException { File tempFile = createTempFile(blobId, fileExtension); try { FileUtils.copyInputStreamToFile(blobStore.read(blobId), tempFile); -uploadAndShare(mailAddress, tempFile); +uploadAndShare(mailAddress, tempFile, explanation); } finally { FileUtils.forceDelete(tempFile); } } -private void uploadAndShare(MailAddress mailAddress, File tempFile) { +private void uploadAndShare(MailAddress mailAddress, File tempFile, String explanation) { Document document = linshareAPI.uploadDocument(tempFile); linshareAPI.share(ShareRequest.builder() +.message(explanation) .addDocumentId(document.getId()) .addRecipient(mailAddress) .build()); diff --git a/third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareRequest.java b/third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareRequest.java index 61a2d8b..beb6892 100644 --- a/third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareRequest.java +++ b/third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareRequest.java @@ -63,12 +63,19 @@ public class ShareRequest { return Objects.hash(mail); } } + +@FunctionalInterface +public interface RequireMessage { +Builder message(String message); +} public static class Builder { private final ImmutableList.Builder recipientsBuilder; private final ImmutableList.Builder documentIdsBuilder; +private final String message; -Builder() { +Builder(String message) { +this.message = message; this.recipientsBuilder = new ImmutableList.Builder<>(); this.documentIdsBuilder = new ImmutableList.Builder<>(); } @@ -84,27 +91,34 @@ public class ShareRequest { } public ShareRequest build() { -return new ShareRequest(recipientsBuilder.build(), documentIdsBuilder.build()); +return new ShareRequest(recipientsBuilder.build(), documentIdsBuilder.build(), message); } } -public static Builder builder() { -return new Builder(); +public static RequireMessage builder() { +return Builder::new; } private final List recipients; private final List documentIds; +private final String message; -private ShareRequest(List recipients, List documentIds) { +private ShareRequest(List recipients, List documentIds, String message) { +Preconditions.checkNotNull(message); Preconditions.checkNotNull(recipients); Preconditions.checkNotNull(documentIds); Preconditions.checkArgument(!recipients.isEmpty(), "recipients cannot be empty"); Preconditions.checkArgument(!documentIds.isEmpty(),
[james-project] 08/12: JAMES-2709 Add name and description to Third Party POM
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit f0b00ef25ea1e224806865689ce34c1c1c7f1f0b Author: Benoit Tellier AuthorDate: Thu Apr 11 14:04:47 2019 +0700 JAMES-2709 Add name and description to Third Party POM --- third-party/linshare/pom.xml | 3 +++ third-party/spamassassin/pom.xml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml index fe07bbd..e243509 100644 --- a/third-party/linshare/pom.xml +++ b/third-party/linshare/pom.xml @@ -28,6 +28,9 @@ apache-james-linshare +Apache James :: Third Party :: LinShare +LinShare Java client, blob export mechanism and test utilities + ${james.groupId} diff --git a/third-party/spamassassin/pom.xml b/third-party/spamassassin/pom.xml index 0d70747..0a7a181 100644 --- a/third-party/spamassassin/pom.xml +++ b/third-party/spamassassin/pom.xml @@ -28,6 +28,9 @@ apache-james-spamassassin +Apache James :: Third Party :: SpamAssassin +SpamAssassin Java client and testing utilities + ${james.groupId} - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 09/12: JAMES-2709 Use FakeSmtp to check mails sent by LinShare
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit e4fd6d64a4d349d8f8f04bfd536612e046030284 Author: Benoit Tellier AuthorDate: Thu Apr 11 15:49:26 2019 +0700 JAMES-2709 Use FakeSmtp to check mails sent by LinShare --- .../main/java/org/apache/james/utils/FakeSmtp.java | 23 - third-party/linshare/pom.xml | 5 + .../java/org/apache/james/linshare/Linshare.java | 24 ++ .../apache/james/linshare/LinshareExtension.java | 4 +++- .../linshare/src/test/resources/smtp/Dockerfile| 3 --- .../src/test/resources/smtp/conf/smtpd.conf| 14 - 6 files changed, 41 insertions(+), 32 deletions(-) diff --git a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java index c94e742..3215f23 100644 --- a/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java +++ b/server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java @@ -43,6 +43,17 @@ import io.restassured.specification.RequestSpecification; import io.restassured.specification.ResponseSpecification; public class FakeSmtp implements TestRule { +public static void clean(RequestSpecification requestSpecification) { +given(requestSpecification, RESPONSE_SPECIFICATION) +.get("/api/email") +.jsonPath() +.getList("id", String.class) +.stream() +.mapToInt(Integer::valueOf) +.max() +.ifPresent(id -> given(requestSpecification, RESPONSE_SPECIFICATION) +.get("/api/email/purge/" + id)); +} public static FakeSmtp withSmtpPort(Integer smtpPort) { DockerGenericContainer container = fakeSmtpContainer() @@ -59,7 +70,7 @@ public class FakeSmtp implements TestRule { } private static final int SMTP_PORT = 25; -private static final ResponseSpecification RESPONSE_SPECIFICATION = new ResponseSpecBuilder().build(); +public static final ResponseSpecification RESPONSE_SPECIFICATION = new ResponseSpecBuilder().build(); private final DockerGenericContainer container; private final Integer smtpPort; @@ -104,14 +115,6 @@ public class FakeSmtp implements TestRule { } public void clean() { -given(requestSpecification(), RESPONSE_SPECIFICATION) -.get("/api/email") -.jsonPath() -.getList("id", String.class) -.stream() -.mapToInt(Integer::valueOf) -.max() -.ifPresent(id -> given(requestSpecification(), RESPONSE_SPECIFICATION) -.get("/api/email/purge/" + id)); +clean(requestSpecification()); } } diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml index e243509..fdb3266 100644 --- a/third-party/linshare/pom.xml +++ b/third-party/linshare/pom.xml @@ -38,6 +38,11 @@ ${james.groupId} +james-server-testing +test + + +${james.groupId} blob-export-api diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java index 694a4c3..4dec0f7 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java @@ -19,13 +19,22 @@ package org.apache.james.linshare; +import static io.restassured.config.EncoderConfig.encoderConfig; +import static io.restassured.config.RestAssuredConfig.newConfig; + +import java.nio.charset.StandardCharsets; import java.time.Duration; +import org.apache.james.util.docker.Images; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.builder.ImageFromDockerfile; +import io.restassured.builder.RequestSpecBuilder; +import io.restassured.http.ContentType; +import io.restassured.specification.RequestSpecification; + public class Linshare { private static final String WAIT_FOR_BACKEND_INIT_LOG = ".*Server startup.*"; private static final String WAIT_FOR_DB_INIT_LOG = ".*/linshare/webservice/rest/admin/authentication/change_password.*"; @@ -102,10 +111,7 @@ public class Linshare { } private GenericContainer createDockerSmtp() { -return new GenericContainer<>( -new ImageFromDockerfile() -.withFileFromClasspath("conf/smtpd.conf", "smtp/conf/smtpd.conf") -.withFileFromClasspath("Dockerfile&
[james-project] branch master updated (6fb06d5 -> 1155f53)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from 6fb06d5 JAMES-2721 provide a builder-like API for allowing Cassandra restart between tests new ce1e202 JAMES-2709 FileExtension::asFileSuffix new c2c74cf JAMES-2709 Contribute a LinShare Blob Export Mechanism new 3d69d90 JAMES-2709 Fasten LinShare test by reusing surefire forks new 82305ca JAMES-2709 Parse LinShareConfiguration from .properties new fe0a43d JAMES-2709 Provide the LinShare BlobExport mechanism as a viable choice new 7bc4549 JAMES-2709 Integration test for LinShare Blob Export Mechanism provisioning new 08d7775 JAMES-2709 Fix POMs issues new f0b00ef JAMES-2709 Add name and description to Third Party POM new e4fd6d6 JAMES-2709 Use FakeSmtp to check mails sent by LinShare new 86159d1 JAMES-2709 Position explanation on the share new 9dd2923 JAMES-2709 little cleanup of dockerized Linshare new 1155f53 Merge remote-tracking branch 'btellier/JAMES-2709' The 12 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: pom.xml| 17 +++ .../james/blob/export/api/FileExtension.java | 9 +- .../james/blob/export/api/FileExtensionTest.java | 40 +-- server/container/cli-integration/pom.xml | 6 + server/container/guice/blob-export-guice/pom.xml | 11 ++ .../apache/james/modules/BlobExportImplChoice.java | 3 +- .../james/modules/BlobExportMechanismModule.java | 8 +- .../LinshareBlobExportMechanismModule.java}| 37 +++--- .../modules/BlobExportMechanismModuleTest.java | 11 +- .../james/modules/LinshareGuiceExtension.java} | 43 --- server/container/guice/memory-guice/pom.xml| 23 ... LinshareBlobExportMechanismProvidingTest.java} | 22 ++-- .../memory-jmap-integration-testing/pom.xml| 6 + .../main/java/org/apache/james/utils/FakeSmtp.java | 23 ++-- third-party/linshare/pom.xml | 33 ++ .../linshare/LinshareBlobExportMechanism.java | 82 + .../james/linshare/LinshareConfiguration.java | 17 ++- .../james/linshare/client/ReceivedShare.java | 2 +- .../apache/james/linshare/client/ShareRequest.java | 39 +-- .../java/org/apache/james/linshare/Linshare.java | 27 - .../linshare/LinshareBlobExportMechanismTest.java | 127 + .../james/linshare/LinshareConfigurationTest.java | 58 -- .../apache/james/linshare/LinshareExtension.java | 22 ++-- .../james/linshare/client/LinshareAPITest.java | 46 +++- .../james/linshare/client/ShareRequestTest.java| 20 +++- .../src/test/resources/backend/conf/id_rsa | 27 - .../{ssl/id_rsa => backend/conf/id_rsa.pri}| 0 .../linshare/src/test/resources/smtp/Dockerfile| 3 - .../src/test/resources/smtp/conf/smtpd.conf| 14 --- third-party/linshare/src/test/resources/ssl/ca.pem | 28 - .../linshare/src/test/resources/ssl/id_rsa.pub | 1 - .../linshare/src/test/resources/ssl/linshare.key | 28 - .../linshare/src/test/resources/ssl/linshare.pem | 97 third-party/spamassassin/pom.xml | 3 + 34 files changed, 613 insertions(+), 320 deletions(-) copy server/container/guice/{mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java => blob-export-guice/src/main/java/org/apache/james/modules/LinshareBlobExportMechanismModule.java} (60%) copy server/container/guice/{cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java => blob-export-guice/src/test/java/org/apache/james/modules/LinshareGuiceExtension.java} (59%) copy server/container/guice/memory-guice/src/test/java/org/apache/james/{MemoryJamesServerTest.java => LinshareBlobExportMechanismProvidingTest.java} (74%) create mode 100644 third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java create mode 100644 third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java delete mode 100644 third-party/linshare/src/test/resources/backend/conf/id_rsa rename third-party/linshare/src/test/resources/{ssl/id_rsa => backend/conf/id_rsa.pri} (100%) delete mode 100644 third-party/linshare/src/test/resources/smtp/Dockerfile delete mode 100644 third-party/linshare/src/test/resources/smtp/conf/smtpd.conf delete mode 100644 third-party/linshare/src/test/resources/ssl/ca.pem delete mode 100644 third-party/linshare/src/test/resources/ssl/id_rsa.
[james-project] 03/12: JAMES-2709 Fasten LinShare test by reusing surefire forks
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 3d69d9088f331d1f4c69e6f185a080cc118171da Author: Benoit Tellier AuthorDate: Thu Apr 11 10:24:43 2019 +0700 JAMES-2709 Fasten LinShare test by reusing surefire forks - We initialise testcontainer only once - LinShare singleton is initialized only once hence dockers are started only once --- third-party/linshare/pom.xml | 12 1 file changed, 12 insertions(+) diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml index 4a41a92..8a7917a 100644 --- a/third-party/linshare/pom.xml +++ b/third-party/linshare/pom.xml @@ -111,4 +111,16 @@ test + + + + +org.apache.maven.plugins +maven-surefire-plugin + +true + + + + - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 04/12: JAMES-2709 Parse LinShareConfiguration from .properties
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 82305ca960e11608a384e341d6553c7b6519f5bd Author: Benoit Tellier AuthorDate: Thu Apr 11 11:07:10 2019 +0700 JAMES-2709 Parse LinShareConfiguration from .properties --- third-party/linshare/pom.xml | 4 ++ .../james/linshare/LinshareConfiguration.java | 17 +-- .../james/linshare/LinshareConfigurationTest.java | 58 ++ 3 files changed, 66 insertions(+), 13 deletions(-) diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml index 8a7917a..fe07bbd 100644 --- a/third-party/linshare/pom.xml +++ b/third-party/linshare/pom.xml @@ -56,6 +56,10 @@ guava +commons-configuration +commons-configuration + + io.github.openfeign feign-core diff --git a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareConfiguration.java b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareConfiguration.java index d2ca31b..6957bb3 100644 --- a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareConfiguration.java +++ b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareConfiguration.java @@ -23,13 +23,17 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Objects; +import org.apache.commons.configuration.Configuration; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; public class LinshareConfiguration { -public static class Builder { +public static final String URL = "blob.export.linshare.url"; +public static final String TOKEN = "blob.export.linshare.token"; +public static class Builder { @FunctionalInterface public interface RequireUrl { RequireAuthorizationToken url(URL url); @@ -62,13 +66,20 @@ public class LinshareConfiguration { return url -> credential -> new Builder.ReadyToBuild(url, credential); } +public static LinshareConfiguration from(Configuration configuration) throws MalformedURLException { +return builder() +.urlAsString(configuration.getString(URL, null)) +.authorizationToken(new AuthorizationToken(configuration.getString(TOKEN, null))) +.build(); +} + private final URL url; private final AuthorizationToken token; @VisibleForTesting LinshareConfiguration(URL url, AuthorizationToken token) { -Preconditions.checkNotNull(url); -Preconditions.checkNotNull(token); +Preconditions.checkNotNull(url, "'" + URL + "' can not be null"); +Preconditions.checkNotNull(token, "'" + TOKEN + "' can not be null"); this.url = url; this.token = token; diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareConfigurationTest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareConfigurationTest.java index 6b9316b..59d237e 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareConfigurationTest.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareConfigurationTest.java @@ -19,16 +19,18 @@ package org.apache.james.linshare; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.net.MalformedURLException; import java.net.URL; +import org.apache.commons.configuration.PropertiesConfiguration; import org.junit.jupiter.api.Test; import nl.jqno.equalsverifier.EqualsVerifier; class LinshareConfigurationTest { - @Test void shouldMatchBeanContract() { EqualsVerifier.forClass(LinshareConfiguration.class) @@ -36,17 +38,53 @@ class LinshareConfigurationTest { } @Test -void constructorShouldThrowWhenPassingNullCredential() { -AuthorizationToken nullToken = null; -assertThatThrownBy(() -> new LinshareConfiguration(new URL("https://linshare.linagora.com;), nullToken)) -.isInstanceOf(NullPointerException.class); +void fromShouldThrowWhenUrlIsNull() { +PropertiesConfiguration configuration = new PropertiesConfiguration(); +configuration.addProperty("blob.export.linshare.token", "token"); +configuration.addProperty("blob.export.linshare.url", null); + +assertThatThrownBy(() -> LinshareConfiguration.from(configuration)).isInstanceOf(MalformedURLException.class); +} + +@Test +void fromShouldThrowWhenTokenIsNull() { +PropertiesConfiguration configuration = new PropertiesConfiguration(); +configuration.ad
[james-project] 02/12: JAMES-2709 Contribute a LinShare Blob Export Mechanism
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit c2c74cf9609227c8f21dd192f38bc1639aa92f16 Author: Benoit Tellier AuthorDate: Tue Apr 9 15:37:13 2019 +0700 JAMES-2709 Contribute a LinShare Blob Export Mechanism --- third-party/linshare/pom.xml | 9 +++ .../linshare/LinshareBlobExportMechanism.java | 78 +++ .../james/linshare/client/ReceivedShare.java | 2 +- .../apache/james/linshare/client/ShareRequest.java | 12 +-- .../linshare/LinshareBlobExportMechanismTest.java | 91 ++ 5 files changed, 185 insertions(+), 7 deletions(-) diff --git a/third-party/linshare/pom.xml b/third-party/linshare/pom.xml index 576c3ee..4a41a92 100644 --- a/third-party/linshare/pom.xml +++ b/third-party/linshare/pom.xml @@ -34,6 +34,15 @@ james-core +${james.groupId} +blob-export-api + + +${james.groupId} +blob-memory +test + + ch.qos.logback logback-classic test diff --git a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java new file mode 100644 index 000..b5b7db4 --- /dev/null +++ b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java @@ -0,0 +1,78 @@ +/ + * 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.linshare; + +import java.io.File; +import java.io.IOException; +import java.util.Optional; + +import org.apache.commons.io.FileUtils; +import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.api.BlobStore; +import org.apache.james.blob.export.api.BlobExportMechanism; +import org.apache.james.blob.export.api.FileExtension; +import org.apache.james.core.MailAddress; +import org.apache.james.linshare.client.Document; +import org.apache.james.linshare.client.LinshareAPI; +import org.apache.james.linshare.client.ShareRequest; + +public class LinshareBlobExportMechanism implements BlobExportMechanism { +private final LinshareAPI linshareAPI; +private final BlobStore blobStore; + +public LinshareBlobExportMechanism(LinshareAPI linshareAPI, BlobStore blobStore) { +this.linshareAPI = linshareAPI; +this.blobStore = blobStore; +} + +@Override +public ShareeStage blobId(BlobId blobId) { +return mailAddress -> explanation -> fileExtension -> () -> { +try { +exportBlob(blobId, mailAddress, fileExtension); +} catch (Exception e) { +throw new BlobExportException("Error while exporting blob " + blobId.asString() + " to " + mailAddress.asString(), e); +} +}; +} + +private void exportBlob(BlobId blobId, MailAddress mailAddress, Optional fileExtension) throws IOException { +File tempFile = createTempFile(blobId, fileExtension); +try { +FileUtils.copyInputStreamToFile(blobStore.read(blobId), tempFile); +uploadAndShare(mailAddress, tempFile); +} finally { +FileUtils.forceDelete(tempFile); +} +} + +private void uploadAndShare(MailAddress mailAddress, File tempFile) { +Document document = linshareAPI.uploadDocument(tempFile); +linshareAPI.share(ShareRequest.builder() +.addDocumentId(document.getId()) +.addRecipient(mailAddress) +.build()); +} + +private File createTempFile(BlobId blobId, Optional
[james-project] 01/12: JAMES-2709 FileExtension::asFileSuffix
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit ce1e2028153bd11467bda128594b7bc00f1d92bd Author: Benoit Tellier AuthorDate: Thu Apr 11 10:42:57 2019 +0700 JAMES-2709 FileExtension::asFileSuffix --- .../james/blob/export/api/FileExtension.java | 9 - .../james/blob/export/api/FileExtensionTest.java | 40 +- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java b/server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java index b0c3000..1faebe6 100644 --- a/server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java +++ b/server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java @@ -39,13 +39,20 @@ public class FileExtension { @VisibleForTesting FileExtension(String extension) { +Preconditions.checkNotNull(extension, "'extension' can not be null"); +Preconditions.checkArgument(StringUtils.isNotBlank(extension), "'extension' can not be blank"); + this.extension = extension; } public String appendExtension(String filePath) { Preconditions.checkArgument(StringUtils.isNotBlank(filePath), "filePath cannot be null or blank"); -return filePath + EXTENSION_SEPARATOR + extension; +return filePath + asFileSuffix(); +} + +public String asFileSuffix() { +return EXTENSION_SEPARATOR + extension; } public String getExtension() { diff --git a/server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java b/server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java index 6c0823b..d2642e2 100644 --- a/server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java +++ b/server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java @@ -23,42 +23,64 @@ import static org.apache.james.blob.export.api.FileExtension.ZIP_EXTENSION_STRIN import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import nl.jqno.equalsverifier.EqualsVerifier; class FileExtensionTest { +@Test +void shouldMatchBeanContract() { +EqualsVerifier.forClass(FileExtension.class) +.verify(); +} -private FileExtension fileExtension; +@Test +void constructorShouldThrowOnNull() { +assertThatThrownBy(() -> new FileExtension(null)) +.isInstanceOf(NullPointerException.class); +} -@BeforeEach -void beforeEach() { -fileExtension = new FileExtension(ZIP_EXTENSION_STRING); +@Test +void constructorShouldThrowOnEmpty() { +assertThatThrownBy(() -> new FileExtension("")) +.isInstanceOf(IllegalArgumentException.class); } @Test -void shouldMatchBeanContract() { -EqualsVerifier.forClass(FileExtension.class) -.verify(); +void constructorShouldThrowOnBlank() { +assertThatThrownBy(() -> new FileExtension(" ")) +.isInstanceOf(IllegalArgumentException.class); } @Test void appendExtensionShouldThrowWhenPassingNullValue() { +FileExtension fileExtension = new FileExtension(ZIP_EXTENSION_STRING); + assertThatThrownBy(() -> fileExtension.appendExtension(null)) .isInstanceOf(IllegalArgumentException.class); } @Test void appendExtensionShouldThrowWhenPassingEmptyStringValue() { +FileExtension fileExtension = new FileExtension(ZIP_EXTENSION_STRING); + assertThatThrownBy(() -> fileExtension.appendExtension("")) .isInstanceOf(IllegalArgumentException.class); } @Test void appendExtensionShouldReturnValueEndsWithExtension() { -fileExtension = new FileExtension("tar.gz"); +FileExtension fileExtension = new FileExtension("tar.gz"); + assertThat(fileExtension.appendExtension("/local/james")) .endsWith(".tar.gz"); } + +@Test +void asFileSuffixShouldReturnDotAndExtension() { +FileExtension fileExtension = new FileExtension("tar.gz"); + +assertThat(fileExtension.asFileSuffix()) +.isEqualTo(".tar.gz"); +} } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 02/02: JAMES-2721 provide a builder-like API for allowing Cassandra restart between tests
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 6fb06d544a26551a62dfa973fa10aa0acc78fc12 Author: Matthieu Baechler AuthorDate: Fri Apr 12 14:55:59 2019 +0200 JAMES-2721 provide a builder-like API for allowing Cassandra restart between tests --- .../cassandra/DockerCassandraRestartRule.java | 30 - .../backends/cassandra/DockerCassandraRule.java| 11 .../backend/rabbitmq/DockerRabbitMQTestRule.java | 31 -- .../cassandra/CassandraCombinationManagerTest.java | 6 + .../CassandraMailboxManagerStressTest.java | 6 + .../CassandraMessageIdManagerQuotaTest.java| 6 + .../CassandraMessageIdManagerSideEffectTest.java | 6 + .../CassandraMessageIdManagerStorageTest.java | 6 + .../CassandraSubscriptionManagerTest.java | 6 + .../mail/CassandraAnnotationMapperTest.java| 6 + .../mail/CassandraAttachmentMapperTest.java| 6 + .../mail/CassandraGenericMailboxMapperTest.java| 6 + .../CassandraMailboxManagerAttachmentTest.java | 6 + .../mail/CassandraMailboxMapperAclTest.java| 6 + .../cassandra/mail/CassandraMailboxMapperTest.java | 6 + .../mail/CassandraMessageIdMapperTest.java | 6 + .../cassandra/mail/CassandraMessageMapperTest.java | 6 + .../cassandra/mail/CassandraMessageMoveTest.java | 6 + .../CassandraMessageWithAttachmentMapperTest.java | 6 + .../quota/CassandraCurrentQuotaManagerTest.java| 6 + .../quota/CassandraPerUserMaxQuotaManagerTest.java | 6 + .../user/CassandraSubscriptionMapperTest.java | 6 + .../cassandra/CassandraAuthenticatePlainTest.java | 2 +- .../cassandra/CassandraAuthenticatedStateTest.java | 2 +- .../cassandra/CassandraConcurrentSessionsTest.java | 2 +- .../cassandra/CassandraCondstoreTest.java | 2 +- .../imapmailbox/cassandra/CassandraCopyTest.java | 2 +- .../imapmailbox/cassandra/CassandraEventsTest.java | 2 +- .../cassandra/CassandraExpungeTest.java| 2 +- .../cassandra/CassandraFetchBodySectionTest.java | 2 +- .../cassandra/CassandraFetchBodyStructureTest.java | 2 +- .../cassandra/CassandraFetchHeadersTest.java | 2 +- .../imapmailbox/cassandra/CassandraFetchTest.java | 2 +- .../cassandra/CassandraListingTest.java| 2 +- .../cassandra/CassandraListingWithSharingTest.java | 2 +- .../cassandra/CassandraMailboxAnnotationTest.java | 2 +- .../CassandraMailboxWithLongNameErrorTest.java | 2 +- .../imapmailbox/cassandra/CassandraMoveTest.java | 2 +- .../CassandraNonAuthenticatedStateTest.java| 2 +- .../cassandra/CassandraPartialFetchTest.java | 2 +- .../imapmailbox/cassandra/CassandraQuotaTest.java | 2 +- .../imapmailbox/cassandra/CassandraRenameTest.java | 2 +- .../imapmailbox/cassandra/CassandraSearchTest.java | 2 +- .../cassandra/CassandraSecurityTest.java | 2 +- .../imapmailbox/cassandra/CassandraSelectTest.java | 2 +- .../cassandra/CassandraSelectedInboxTest.java | 2 +- .../cassandra/CassandraSelectedStateTest.java | 2 +- .../cassandra/CassandraUidSearchOnIndexTest.java | 2 +- .../cassandra/CassandraUidSearchTest.java | 2 +- .../cassandra/CassandraUserFlagsSupportTest.java | 2 +- .../rabbitmq/RabbitMQAuthenticatePlainTest.java| 2 +- .../rabbitmq/RabbitMQAuthenticatedStateTest.java | 2 +- .../rabbitmq/RabbitMQConcurrentSessionsTest.java | 2 +- .../rabbitmq/RabbitMQCondstoreTest.java| 2 +- .../mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQEventsTest.java | 2 +- .../rabbitmq/RabbitMQFetchBodySectionTest.java | 2 +- .../rabbitmq/RabbitMQFetchBodyStructureTest.java | 2 +- .../rabbitmq/RabbitMQFetchHeadersTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQFetchTest.java| 2 +- .../imapmailbox/rabbitmq/RabbitMQListingTest.java | 2 +- .../rabbitmq/RabbitMQListingWithSharingTest.java | 2 +- .../rabbitmq/RabbitMQMailboxAnnotationTest.java| 2 +- .../RabbitMQMailboxWithLongNameErrorTest.java | 2 +- .../mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java | 2 +- .../RabbitMQNonAuthenticatedStateTest.java | 2 +- .../rabbitmq/RabbitMQPartialFetchTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQQuotaTest.java| 2 +- .../imapmailbox/rabbitmq/RabbitMQRenameTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQSearchTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQSecurityTest.java | 2 +- .../imapmailbox/rabbitmq/RabbitMQSelectTest.java | 2 +- .../rabbitmq/RabbitMQSelectedInboxTest.java| 2 +- .../rabbitmq/RabbitMQSelectedStateTest.java| 2 +- .../rabbitmq/RabbitMQUidSearchTest.java| 2
[james-project] branch master updated (5560716 -> 6fb06d5)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from 5560716 JAMES-2713 Add integration test for Delete API new 6c88dad JAMES-2721 using a @ClassRule for a singleton is pointless new 6fb06d5 JAMES-2721 provide a builder-like API for allowing Cassandra restart between tests The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../cassandra/DockerCassandraRestartRule.java | 30 - .../backends/cassandra/DockerCassandraRule.java| 11 .../backend/rabbitmq/DockerRabbitMQTestRule.java | 31 -- .../cassandra/CassandraCombinationManagerTest.java | 7 + .../CassandraMailboxManagerStressTest.java | 7 + .../CassandraMessageIdManagerQuotaTest.java| 7 + .../CassandraMessageIdManagerSideEffectTest.java | 7 + .../CassandraMessageIdManagerStorageTest.java | 7 + .../CassandraSubscriptionManagerTest.java | 7 + .../mail/CassandraAnnotationMapperTest.java| 7 + .../mail/CassandraAttachmentMapperTest.java| 7 + .../mail/CassandraGenericMailboxMapperTest.java| 7 + .../CassandraMailboxManagerAttachmentTest.java | 7 + .../mail/CassandraMailboxMapperAclTest.java| 7 + .../cassandra/mail/CassandraMailboxMapperTest.java | 7 + .../mail/CassandraMessageIdMapperTest.java | 7 + .../cassandra/mail/CassandraMessageMapperTest.java | 7 + .../cassandra/mail/CassandraMessageMoveTest.java | 7 + .../CassandraMessageWithAttachmentMapperTest.java | 7 + .../quota/CassandraCurrentQuotaManagerTest.java| 7 + .../quota/CassandraPerUserMaxQuotaManagerTest.java | 7 + .../user/CassandraSubscriptionMapperTest.java | 7 + .../cassandra/CassandraAuthenticatePlainTest.java | 5 ++-- .../cassandra/CassandraAuthenticatedStateTest.java | 5 ++-- .../cassandra/CassandraConcurrentSessionsTest.java | 5 ++-- .../cassandra/CassandraCondstoreTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraCopyTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraEventsTest.java | 5 ++-- .../cassandra/CassandraExpungeTest.java| 5 ++-- .../cassandra/CassandraFetchBodySectionTest.java | 5 ++-- .../cassandra/CassandraFetchBodyStructureTest.java | 5 ++-- .../cassandra/CassandraFetchHeadersTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraFetchTest.java | 5 ++-- .../cassandra/CassandraListingTest.java| 5 ++-- .../cassandra/CassandraListingWithSharingTest.java | 5 ++-- .../cassandra/CassandraMailboxAnnotationTest.java | 5 ++-- .../CassandraMailboxWithLongNameErrorTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraMoveTest.java | 5 ++-- .../CassandraNonAuthenticatedStateTest.java| 5 ++-- .../cassandra/CassandraPartialFetchTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraQuotaTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraRenameTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraSearchTest.java | 5 ++-- .../cassandra/CassandraSecurityTest.java | 5 ++-- .../imapmailbox/cassandra/CassandraSelectTest.java | 5 ++-- .../cassandra/CassandraSelectedInboxTest.java | 5 ++-- .../cassandra/CassandraSelectedStateTest.java | 5 ++-- .../cassandra/CassandraUidSearchOnIndexTest.java | 5 ++-- .../cassandra/CassandraUidSearchTest.java | 5 ++-- .../cassandra/CassandraUserFlagsSupportTest.java | 5 ++-- .../rabbitmq/RabbitMQAuthenticatePlainTest.java| 5 ++-- .../rabbitmq/RabbitMQAuthenticatedStateTest.java | 5 ++-- .../rabbitmq/RabbitMQConcurrentSessionsTest.java | 5 ++-- .../rabbitmq/RabbitMQCondstoreTest.java| 5 ++-- .../mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java | 5 ++-- .../imapmailbox/rabbitmq/RabbitMQEventsTest.java | 5 ++-- .../rabbitmq/RabbitMQFetchBodySectionTest.java | 5 ++-- .../rabbitmq/RabbitMQFetchBodyStructureTest.java | 5 ++-- .../rabbitmq/RabbitMQFetchHeadersTest.java | 5 ++-- .../imapmailbox/rabbitmq/RabbitMQFetchTest.java| 5 ++-- .../imapmailbox/rabbitmq/RabbitMQListingTest.java | 5 ++-- .../rabbitmq/RabbitMQListingWithSharingTest.java | 5 ++-- .../rabbitmq/RabbitMQMailboxAnnotationTest.java| 5 ++-- .../RabbitMQMailboxWithLongNameErrorTest.java | 5 ++-- .../mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java | 5 ++-- .../RabbitMQNonAuthenticatedStateTest.java | 5 ++-- .../rabbitmq/RabbitMQPartialFetchTest.java | 5 ++-- .../imapmailbox/rabbitmq/RabbitMQQuotaTest.java| 5 ++-- .../
[james-project] 03/11: JAMES-2710 Add getDeleteByQueryExecutor() for easy spy memory-vault
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 245146476040907231f58089dfe81b47fd625ee3 Author: datph AuthorDate: Fri Apr 5 11:54:05 2019 +0700 JAMES-2710 Add getDeleteByQueryExecutor() for easy spy memory-vault --- .../org/apache/james/vault/memory/MemoryDeletedMessagesVault.java | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java index 773faec..ecee56e 100644 --- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java +++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/MemoryDeletedMessagesVault.java @@ -40,6 +40,7 @@ import org.apache.james.vault.utils.DeleteByQueryExecutor; import org.apache.james.vault.utils.VaultGarbageCollectionTask; import org.reactivestreams.Publisher; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.HashBasedTable; import com.google.common.collect.ImmutableList; @@ -122,10 +123,15 @@ public class MemoryDeletedMessagesVault implements DeletedMessageVault { ZonedDateTime beginningOfRetentionPeriod = now.minus(retentionConfiguration.getRetentionPeriod()); return new VaultGarbageCollectionTask( -deleteByQueryExecutor, +getDeleteByQueryExecutor(), beginningOfRetentionPeriod); } +@VisibleForTesting +public DeleteByQueryExecutor getDeleteByQueryExecutor() { +return deleteByQueryExecutor; +} + private Flux listAll(User user) { synchronized (table) { return Flux.fromIterable(ImmutableList.copyOf(table.row(user).values())) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 07/11: JAMES-2711 Add document for DeleteAPI of DMVRoutes
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit b8a1afec83db928ef20970d330d303ccbcd340dd Author: datph AuthorDate: Tue Apr 9 15:45:25 2019 +0700 JAMES-2711 Add document for DeleteAPI of DMVRoutes --- .../vault/routes/DeletedMessagesVaultRoutes.java | 15 +- src/site/markdown/server/manage-webadmin.md| 34 +++--- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java index e2faa4c..37acd23 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java @@ -140,12 +140,11 @@ public class DeletedMessagesVaultRoutes implements Routes { public static final String ROOT_PATH = "deletedMessages"; public static final String USERS = "users"; -public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS; private static final String USER_PATH_PARAM = ":user"; static final String MESSAGE_PATH_PARAM = "messages"; private static final String MESSAGE_ID_PARAM = ":messageId"; -private static final String RESTORE_PATH = USER_PATH + SEPARATOR + USER_PATH_PARAM; -private static final String DELETE_PATH = USER_PATH + SEPARATOR + USER_PATH_PARAM + SEPARATOR + MESSAGE_PATH_PARAM + SEPARATOR + MESSAGE_ID_PARAM; +static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS + SEPARATOR + USER_PATH_PARAM; +private static final String DELETE_PATH = ROOT_PATH + SEPARATOR + USERS + SEPARATOR + USER_PATH_PARAM + SEPARATOR + MESSAGE_PATH_PARAM + SEPARATOR + MESSAGE_ID_PARAM; private static final String SCOPE_QUERY_PARAM = "scope"; private static final String ACTION_QUERY_PARAM = "action"; private static final String EXPORT_TO_QUERY_PARAM = "exportTo"; @@ -183,14 +182,15 @@ public class DeletedMessagesVaultRoutes implements Routes { @Override public void define(Service service) { -service.post(RESTORE_PATH, this::userActions, jsonTransformer); +service.post(USER_PATH, this::userActions, jsonTransformer); service.delete(ROOT_PATH, this::deleteWithScope, jsonTransformer); service.delete(DELETE_PATH, this::deleteMessage, jsonTransformer); } @POST -@Path(USER_PATH) -@ApiOperation(value = "Restore deleted emails from a specified user to his new restore mailbox") +@Path("users/{user}") +@ApiOperation(value = "Restore deleted emails from a specified user to his new restore mailbox" + +" or export their content to a destination mail address") @ApiImplicitParams({ @ApiImplicitParam( required = true, @@ -231,7 +231,6 @@ public class DeletedMessagesVaultRoutes implements Routes { } @DELETE -@Path(ROOT_PATH) @ApiOperation(value = "Purge all expired messages based on retentionPeriod of deletedMessageVault configuration") @ApiImplicitParams({ @ApiImplicitParam( @@ -254,7 +253,7 @@ public class DeletedMessagesVaultRoutes implements Routes { } @DELETE -@Path(DELETE_PATH) +@Path("users/{user}/messages/{messageId}") @ApiOperation(value = "Delete message with messageId") @ApiImplicitParams({ @ApiImplicitParam( diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md index 98ef7fb..a1b9a4a 100644 --- a/src/site/markdown/server/manage-webadmin.md +++ b/src/site/markdown/server/manage-webadmin.md @@ -2644,6 +2644,7 @@ Here are the following actions available on the 'Deleted Messages Vault' - [Restore Deleted Messages](#Restore_deleted_messages) - [Export Deleted Messages](#Export_deleted_messages) - [Purge Deleted Messages](#Purge_deleted_messages) + - [Permanently remove Deleted Message](#Permanently_remove_deleted_message) Note that the 'Deleted Messages Vault' feature is only supported on top of Cassandra-Guice. @@ -2820,9 +2821,9 @@ while: ### Purge Deleted Messages -You can overwrite 'retentionPeriod' configuration in deletedMessageVault or use default value is 1 year. +You can overwrite 'retentionPeriod' configuration in 'deletedMessageVault' configuration file or use default value is 1 year. -Delete all expired deleted messages with 're
[james-project] 09/11: JAMES-2713 Change params config for RequestSpecification The params default update strategy is MERGE. So we will have conflict when request 2 webAdmin APIs in a testcase. We cha
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 76336eb4bc97eaf1105ddb51ae6d5f5ec6bc3ce7 Author: datph AuthorDate: Thu Apr 11 18:23:44 2019 +0700 JAMES-2713 Change params config for RequestSpecification The params default update strategy is MERGE. So we will have conflict when request 2 webAdmin APIs in a testcase. We change params update strategy to REPLACE --- .../james/jmap/methods/integration/DeletedMessagesVaultTest.java | 6 +- .../src/test/java/org/apache/james/webadmin/WebAdminUtils.java | 7 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java index 6c76951..8ab9e11 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java @@ -21,6 +21,7 @@ package org.apache.james.jmap.methods.integration; import static io.restassured.RestAssured.given; import static io.restassured.RestAssured.with; +import static io.restassured.config.ParamConfig.UpdateStrategy.REPLACE; import static org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser; import static org.apache.james.jmap.JmapCommonRequests.getLastMessageId; import static org.apache.james.jmap.JmapCommonRequests.getOutboxId; @@ -73,6 +74,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import io.restassured.RestAssured; +import io.restassured.config.ParamConfig; import io.restassured.parsing.Parser; import io.restassured.specification.RequestSpecification; @@ -164,7 +166,9 @@ public abstract class DeletedMessagesVaultTest { homerAccessToken = authenticateJamesUser(baseUri(jmapServer), HOMER, PASSWORD); bartAccessToken = authenticateJamesUser(baseUri(jmapServer), BART, BOB_PASSWORD); -webAdminApi = WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort()); +webAdminApi = WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort()) +.config(WebAdminUtils.defaultConfig() +.paramConfig(new ParamConfig(REPLACE, REPLACE, REPLACE))); } @After diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java index a2c3a2a..b5a02fa 100644 --- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java +++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java @@ -34,6 +34,7 @@ import org.apache.james.webadmin.authentication.NoAuthenticationFilter; import com.github.steveash.guavate.Guavate; import io.restassured.builder.RequestSpecBuilder; +import io.restassured.config.RestAssuredConfig; import io.restassured.http.ContentType; import io.restassured.specification.RequestSpecification; @@ -68,10 +69,14 @@ public class WebAdminUtils { return new RequestSpecBuilder() .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) - .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) +.setConfig(defaultConfig()) .setPort(port.getValue()); } +public static RestAssuredConfig defaultConfig() { +return newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)); +} + public static RequestSpecification spec(Port port) { return given().spec(buildRequestSpecification(port).build()); } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 11/11: JAMES-2713 Add integration test for Delete API
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 556071622272b41f6bdc5066d3720fa5cf87a1eb Author: datph AuthorDate: Wed Apr 17 15:15:40 2019 +0700 JAMES-2713 Add integration test for Delete API --- .../integration/DeletedMessagesVaultTest.java | 82 ++ 1 file changed, 82 insertions(+) diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java index 7962379..8bf523f 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java @@ -688,6 +688,75 @@ public abstract class DeletedMessagesVaultTest { .hasSize(0); } +@Test +public void vaultDeleteShouldDeleteMessageThenExportWithNoEntry() throws Exception { +bartSendMessageToHomer(); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1); + +String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0); + +homerDeletesMessages(listMessageIdsForAccount(homerAccessToken)); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0); + +deleteVault(HOMER, messageIdOfHomer); + +String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken); +try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) { +zipAssert.hasNoEntry(); +} +} + +@Test +public void vaultDeleteShouldNotDeleteEmptyVaultThenExportNoEntry() throws Exception { +bartSendMessageToHomer(); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1); + +String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0); + +deleteVault(HOMER, messageIdOfHomer); + +String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken); +try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) { +zipAssert.hasNoEntry(); +} +} + +@Test +public void vaultDeleteShouldNotDeleteNotMatchedMessageInVaultThenExportAnEntry() throws Exception { +bartSendMessageToHomer(); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1); + +String messageIdOfBart = listMessageIdsForAccount(bartAccessToken).get(0); +String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0); + +homerDeletesMessages(listMessageIdsForAccount(homerAccessToken)); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0); + +deleteVault(HOMER, messageIdOfBart); + +String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken); +try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) { +zipAssert.hasEntriesSize(1) +.allSatisfies(entry -> entry.hasName(messageIdOfHomer + ".eml")); +} +} + +@Test +public void vaultDeleteShouldNotAppendMessageToTheUserMailbox() { +bartSendMessageToHomer(); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1); + +String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0); + +homerDeletesMessages(listMessageIdsForAccount(homerAccessToken)); +WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0); + +deleteVault(HOMER, messageIdOfHomer); + +assertThat(listMessageIdsForAccount(homerAccessToken)) +.hasSize(0); +} + private String exportAndGetFileLocationFromLastMail(ExportRequest exportRequest, AccessToken shareeAccessToken) { int currentNumberOfMessages = listMessageIdsForAccount(shareeAccessToken).size(); exportVaultContent(exportRequest); @@ -851,4 +920,17 @@ public abstract class DeletedMessagesVaultTest { .then() .body("status", is("completed")); } + +private void deleteVault(String user, String messageId) { +String taskId = +webAdminApi.with() +.delete("/deletedMessages/users/&
[james-project] 02/11: JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 18d0d766ce364b572e1efed3e90eff20ad56d024 Author: datph AuthorDate: Thu Apr 4 15:21:28 2019 +0700 JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes --- .../vault/routes/DeletedMessagesVaultRoutes.java | 8 +- .../routes/DeletedMessagesVaultRoutesTest.java | 116 +++-- 2 files changed, 65 insertions(+), 59 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java index c38bcda..32f5d2b 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java @@ -102,9 +102,11 @@ public class DeletedMessagesVaultRoutes implements Routes { } } -public static final String ROOT_PATH = "deletedMessages/users"; +public static final String ROOT_PATH = "deletedMessages"; +public static final String USERS = "users"; +public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS; private static final String USER_PATH_PARAM = "user"; -private static final String RESTORE_PATH = ROOT_PATH + SEPARATOR + ":" + USER_PATH_PARAM; +private static final String RESTORE_PATH = USER_PATH + SEPARATOR + ":" + USER_PATH_PARAM; private static final String ACTION_QUERY_PARAM = "action"; private static final String EXPORT_TO_QUERY_PARAM = "exportTo"; @@ -140,7 +142,7 @@ public class DeletedMessagesVaultRoutes implements Routes { } @POST -@Path(ROOT_PATH) +@Path(USER_PATH) @ApiOperation(value = "Restore deleted emails from a specified user to his new restore mailbox") @ApiImplicitParams({ @ApiImplicitParam( diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java index 713ddc9..db166b0 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java @@ -34,7 +34,10 @@ import static org.apache.james.vault.DeletedMessageFixture.SUBJECT; import static org.apache.james.vault.DeletedMessageFixture.USER; import static org.apache.james.vault.DeletedMessageFixture.USER_2; import static org.apache.james.vault.DeletedMessageVaultSearchContract.MESSAGE_ID_GENERATOR; +import static org.apache.james.webadmin.Constants.SEPARATOR; import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION; +import static org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes.USERS; +import static org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes.USER_PATH; import static org.apache.james.webadmin.vault.routes.RestoreService.RESTORE_MAILBOX_NAME; import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1; import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2; @@ -135,6 +138,7 @@ class DeletedMessagesVaultRoutesTest { "\"criteria\": []" + "}"; private static final Domain DOMAIN = Domain.of("apache.org"); +private static final String BOB_PATH = USERS + SEPARATOR + USER.asString(); private WebAdminServer webAdminServer; private MemoryDeletedMessagesVault vault; @@ -206,7 +210,7 @@ class DeletedMessagesVaultRoutesTest { @Test void userVaultAPIShouldReturnInvalidWhenActionIsMissing() { when() -.post(USER.asString()) +.post(BOB_PATH) .then() .statusCode(HttpStatus.BAD_REQUEST_400) .body("statusCode", is(400)) @@ -220,7 +224,7 @@ class DeletedMessagesVaultRoutesTest { given() .queryParam("action", "") .when() -.post(USER.asString()) +.post(BOB_PATH) .then() .statusCode(HttpStatus.BAD_REQUEST_400) .body("statusCode&q
[james-project] branch master updated (8d008f5 -> 5560716)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from 8d008f5 JAMES-2714 Link configuration details to howTo new 6189ecd JAMES-2710 Rename VaultAction to support purge action new 18d0d76 JAMES-2710 Change ROOT_PATH of DeleteMessagesVaultRoutes new 2451464 JAMES-2710 Add getDeleteByQueryExecutor() for easy spy memory-vault new 9a97b6a JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes new c8f84a8 JAMES-2710 Document Purge API new 0980816 JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes new b8a1afe JAMES-2711 Add document for DeleteAPI of DMVRoutes new 0957eec JAMES-2713 Move UpdatableTickingClock to server-testing for using in other modules new 76336eb JAMES-2713 Change params config for RequestSpecification The params default update strategy is MERGE. So we will have conflict when request 2 webAdmin APIs in a testcase. We change params update strategy to REPLACE new ae48fba JAMES-2713 Add integration test for Purge API new 5560716 JAMES-2713 Add integration test for Delete API The 11 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../vault/memory/MemoryDeletedMessagesVault.java | 8 +- .../vault/utils/VaultGarbageCollectionTask.java| 2 +- .../CassandraDeletedMessageVaultTest.java | 6 +- .../integration/DeletedMessagesVaultTest.java | 198 +++- ...FileMailRepositoryDeletedMessagesVaultTest.java | 6 +- .../memory/MemoryDeletedMessagesVaultTest.java | 6 +- .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java | 6 +- .../org/apache/james/webadmin/WebAdminUtils.java | 7 +- .../routes/DeletedMessagesVaultDeleteTask.java | 62 ++- .../vault/routes/DeletedMessagesVaultRoutes.java | 209 +++- .../routes/DeletedMessagesVaultRoutesTest.java | 545 ++--- .../RabbitMQMailQueueConfigurationChangeTest.java | 1 + .../queue/rabbitmq/RabbitMQMailQueueTest.java | 1 + .../apache/james/utils}/UpdatableTickingClock.java | 10 +- src/site/markdown/server/manage-webadmin.md| 50 ++ 15 files changed, 980 insertions(+), 137 deletions(-) copy mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java => server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java (53%) rename server/{queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq => testing/src/main/java/org/apache/james/utils}/UpdatableTickingClock.java (89%) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 06/11: JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 0980816d7dc2a0c35d8c3c3d41bbc33148379b27 Author: datph AuthorDate: Mon Apr 8 16:34:50 2019 +0700 JAMES-2711 Add DeleteAPI to DeletedMessageVaultRoutes --- .../routes/DeletedMessagesVaultDeleteTask.java | 84 + .../vault/routes/DeletedMessagesVaultRoutes.java | 58 ++- .../routes/DeletedMessagesVaultRoutesTest.java | 191 - 3 files changed, 329 insertions(+), 4 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java new file mode 100644 index 000..9c886c5 --- /dev/null +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java @@ -0,0 +1,84 @@ +/ + * 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.webadmin.vault.routes; + +import java.util.Optional; + +import org.apache.james.core.User; +import org.apache.james.mailbox.model.MessageId; +import org.apache.james.task.Task; +import org.apache.james.task.TaskExecutionDetails; +import org.apache.james.vault.DeletedMessageVault; + +import reactor.core.publisher.Mono; + +public class DeletedMessagesVaultDeleteTask implements Task { + +public class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation { + +private final User user; +private final MessageId deleteMessageId; + +AdditionalInformation(User user, MessageId deleteMessageId) { +this.user = user; +this.deleteMessageId = deleteMessageId; +} + +public String getUser() { +return user.asString(); +} + +public String getDeleteMessageId() { +return deleteMessageId.serialize(); +} +} + +static final String TYPE = "deletedMessages/delete"; + +private final DeletedMessageVault vault; +private final User user; +private final MessageId messageId; + +DeletedMessagesVaultDeleteTask(DeletedMessageVault vault, User user, MessageId messageId) { +this.vault = vault; +this.user = user; +this.messageId = messageId; +} + +@Override +public Result run() { +return Mono.from(vault.delete(user, messageId)) +.doOnError(e -> LOGGER.error("Error while deleting message {} for user {} in DeletedMessageVault: {}", messageId, user, e)) +.thenReturn(Result.COMPLETED) +.blockOptional() +.orElse(Result.PARTIAL); +} + +@Override +public String type() { +return TYPE; +} + +@Override +public Optional details() { +return Optional.of(new AdditionalInformation(user, messageId)); +} + +} diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java index 50f483e..e2faa4c 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessag
[james-project] 04/11: JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 9a97b6a5f4f0498495431f83815b5c65d2bf9d85 Author: datph AuthorDate: Fri Apr 5 11:55:03 2019 +0700 JAMES-2710 Add Purge API to DeletedMessagesVaultRoutes --- .../vault/utils/VaultGarbageCollectionTask.java| 2 +- .../vault/routes/DeletedMessagesVaultRoutes.java | 130 +-- .../routes/DeletedMessagesVaultRoutesTest.java | 240 - 3 files changed, 357 insertions(+), 15 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java index 36170f3..5a55c80 100644 --- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java +++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/utils/VaultGarbageCollectionTask.java @@ -65,7 +65,7 @@ public class VaultGarbageCollectionTask implements Task { } } -private static final String TYPE = "deletedMessages/garbageCollection"; +public static final String TYPE = "deletedMessages/garbageCollection"; private final DeleteByQueryExecutor deleteByQueryExecutor; private final DeleteByQueryExecutor.Notifiers notifiers; diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java index 32f5d2b..50f483e 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java @@ -23,10 +23,12 @@ import static org.apache.james.webadmin.Constants.SEPARATOR; import java.util.List; import java.util.Optional; +import java.util.function.Function; import java.util.stream.Stream; import javax.inject.Inject; import javax.mail.internet.AddressException; +import javax.ws.rs.DELETE; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -40,6 +42,7 @@ import org.apache.james.task.TaskId; import org.apache.james.task.TaskManager; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; +import org.apache.james.vault.DeletedMessageVault; import org.apache.james.vault.search.Query; import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.Routes; @@ -63,6 +66,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import spark.HaltException; import spark.Request; import spark.Response; import spark.Service; @@ -85,7 +89,8 @@ public class DeletedMessagesVaultRoutes implements Routes { .findFirst(); } -private static List plainValues() { +@VisibleForTesting +static List plainValues() { return Stream.of(values()) .map(VaultAction::getValue) .collect(Guavate.toImmutableList()); @@ -102,16 +107,51 @@ public class DeletedMessagesVaultRoutes implements Routes { } } +enum VaultScope { +EXPIRED("expired"); + +static Optional getScope(String value) { +Preconditions.checkNotNull(value, "scope cannot be null"); +Preconditions.checkArgument(StringUtils.isNotBlank(value), "scope cannot be empty or blank"); + +return Stream.of(values()) +.filter(action -> action.value.equals(value)) +.findFirst(); +} + +@VisibleForTesting +static List plainValues() { +return Stream.of(values()) +.map(VaultScope::getValue) +.collect(Guavate.toImmutableList()); +} + +private final String value; + +VaultScope(String value) { +this.value = value; +} + +public String getValue() { +return value; +} +} + public static final String ROOT_PATH = "deletedMessages"; public static final String USERS = "users"; public static final String USER_PATH = ROOT_PATH + SEPARATOR + USERS; -private static final String USER_PATH_PARAM = "user"; -private static final String RESTORE_PATH = USER_PATH + SEPARATOR + ":" + U
[james-project] 10/11: JAMES-2713 Add integration test for Purge API
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit ae48fba707fd43de180ce57fab4f2735bf723358 Author: datph AuthorDate: Thu Apr 11 18:27:25 2019 +0700 JAMES-2713 Add integration test for Purge API --- .../CassandraDeletedMessageVaultTest.java | 6 +- .../integration/DeletedMessagesVaultTest.java | 110 - ...FileMailRepositoryDeletedMessagesVaultTest.java | 6 +- .../memory/MemoryDeletedMessagesVaultTest.java | 6 +- .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java | 6 +- 5 files changed, 122 insertions(+), 12 deletions(-) diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java index 9cbc0ec..b3c0a99 100644 --- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java +++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java @@ -20,6 +20,7 @@ package org.apache.james.jmap.cassandra; import java.io.IOException; +import java.time.Clock; import org.apache.james.CassandraJmapTestRule; import org.apache.james.DockerCassandraRule; @@ -43,7 +44,7 @@ public class CassandraDeletedMessageVaultTest extends DeletedMessagesVaultTest { public CassandraJmapTestRule rule = CassandraJmapTestRule.defaultTestRule(); @Override -protected GuiceJamesServer createJmapServer(FileSystem fileSystem) throws IOException { +protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException { return rule.jmapServer(cassandra.getModule(), binder -> binder.bind(PreDeletionHooksConfiguration.class) .toInstance(PreDeletionHooksConfiguration.forHooks( @@ -51,7 +52,8 @@ public class CassandraDeletedMessageVaultTest extends DeletedMessagesVaultTest { binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION), binder -> binder.bind(MailRepositoryDeletedMessageVault.Configuration.class) .toInstance(new MailRepositoryDeletedMessageVault.Configuration(MailRepositoryUrl.from("cassandra://var/deletedMessages/user"))), -binder -> binder.bind(FileSystem.class).toInstance(fileSystem)); +binder -> binder.bind(FileSystem.class).toInstance(fileSystem), +binder -> binder.bind(Clock.class).toInstance(clock)); } @Override diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java index 8ab9e11..7962379 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java @@ -40,6 +40,9 @@ import static org.hamcrest.Matchers.is; import java.io.FileInputStream; import java.io.IOException; +import java.time.Clock; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.stream.Collectors; @@ -59,6 +62,7 @@ import org.apache.james.server.core.filesystem.FileSystemImpl; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.IMAPMessageReader; import org.apache.james.utils.JmapGuiceProbe; +import org.apache.james.utils.UpdatableTickingClock; import org.apache.james.utils.WebAdminGuiceProbe; import org.apache.james.webadmin.WebAdminUtils; import org.awaitility.Duration; @@ -110,6 +114,8 @@ public abstract class DeletedMessagesVaultTest { } } +private static final Instant NOW = Instant.now(); +private static final Instant ONE_DAY_AFTER_ONE_YEAR_EXPIRATION = NOW.plus(366, ChronoUnit.DAYS); private static final String FIRST_SUBJECT = "first subject"; private static final String SECOND_SUBJECT = "second subject"; private static final String HOMER = "homer@" + DOMAIN; @@ -130,7 +136,7 @@ public abstract class DeletedMessagesVaultTest { private MailboxId otherMailboxId; -protected abstract GuiceJamesServer c
[james-project] 05/11: JAMES-2710 Document Purge API
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit c8f84a8a5b769eef9b0859fb22fa0f17238fc639 Author: datph AuthorDate: Fri Apr 5 16:43:19 2019 +0700 JAMES-2710 Document Purge API --- src/site/markdown/server/manage-webadmin.md | 24 1 file changed, 24 insertions(+) diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md index da75144..98ef7fb 100644 --- a/src/site/markdown/server/manage-webadmin.md +++ b/src/site/markdown/server/manage-webadmin.md @@ -2643,6 +2643,7 @@ Here are the following actions available on the 'Deleted Messages Vault' - [Restore Deleted Messages](#Restore_deleted_messages) - [Export Deleted Messages](#Export_deleted_messages) + - [Purge Deleted Messages](#Purge_deleted_messages) Note that the 'Deleted Messages Vault' feature is only supported on top of Cassandra-Guice. @@ -2816,6 +2817,29 @@ while: - userExportFrom: export deleted messages from this user - exportTo: content of deleted messages have been shared to this mail address - totalExportedMessages: number of deleted messages match with json query, then being shared to sharee + +### Purge Deleted Messages + +You can overwrite 'retentionPeriod' configuration in deletedMessageVault or use default value is 1 year. + +Delete all expired deleted messages with 'retentionPeriod' configured. + +``` +curl -XDEL http://ip:port/deletedMessages?scope=expired +``` + +Response code: + + - 201: Task for purging has been created + - 400: Bad request: + - action query param is not present + - action query param is not a valid action + +You may want to call this endpoint on a regular basis. Example: + +``` +0 0 * * * /usr/bin/curl --request POST http://ip:port/deletedMessages?action=purge >/dev/null 2>&1 +``` ## Task management - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 08/11: JAMES-2713 Move UpdatableTickingClock to server-testing for using in other modules
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 0957eec827440f777fc99728b10cd08c646b2a75 Author: datph AuthorDate: Wed Apr 17 14:35:52 2019 +0700 JAMES-2713 Move UpdatableTickingClock to server-testing for using in other modules --- .../rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java | 1 + .../org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java | 1 + .../java/org/apache/james/utils}/UpdatableTickingClock.java| 10 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java index 46dfdbe..c4fe56f 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java @@ -53,6 +53,7 @@ import org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewModu import org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewTestFactory; import org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration; import org.apache.james.util.streams.Iterators; +import org.apache.james.utils.UpdatableTickingClock; import org.apache.mailet.Mail; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java index dd9b53d..c636b9d 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java @@ -54,6 +54,7 @@ import org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewModu import org.apache.james.queue.rabbitmq.view.cassandra.CassandraMailQueueViewTestFactory; import org.apache.james.queue.rabbitmq.view.cassandra.configuration.CassandraMailQueueViewConfiguration; import org.apache.james.util.streams.Iterators; +import org.apache.james.utils.UpdatableTickingClock; import org.apache.mailet.Mail; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java b/server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java similarity index 89% rename from server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java rename to server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java index fca8022..2db26c7 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/UpdatableTickingClock.java +++ b/server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java @@ -17,7 +17,7 @@ * under the License. * / -package org.apache.james.queue.rabbitmq; +package org.apache.james.utils; import java.time.Clock; import java.time.Instant; @@ -25,14 +25,14 @@ import java.time.ZoneId; import org.apache.commons.lang3.NotImplementedException; -class UpdatableTickingClock extends Clock { +public class UpdatableTickingClock extends Clock { private Instant currentInstant; -UpdatableTickingClock(Instant currentInstant) { +public UpdatableTickingClock(Instant currentInstant) { this.currentInstant = currentInstant; } -void setInstant(Instant instant) { +public void setInstant(Instant instant) { currentInstant = instant; } @@ -51,7 +51,7 @@ class UpdatableTickingClock extends Clock { return currentInstant; } -synchronized void tick() { +public synchronized void tick() { currentInstant = currentInstant.plusMillis(1); } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 01/11: JAMES-2710 Rename VaultAction to support purge action
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 6189ecd1d3f3738d0cad775355a6405afbf24ab9 Author: datph AuthorDate: Thu Apr 4 11:07:22 2019 +0700 JAMES-2710 Rename VaultAction to support purge action --- .../vault/routes/DeletedMessagesVaultRoutes.java | 22 +++--- .../routes/DeletedMessagesVaultRoutesTest.java | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java index 7c1fa72..c38bcda 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java @@ -72,11 +72,11 @@ import spark.Service; @Produces(Constants.JSON_CONTENT_TYPE) public class DeletedMessagesVaultRoutes implements Routes { -enum UserVaultAction { +enum VaultAction { RESTORE("restore"), EXPORT("export"); -static Optional getAction(String value) { +static Optional getAction(String value) { Preconditions.checkNotNull(value, "action cannot be null"); Preconditions.checkArgument(StringUtils.isNotBlank(value), "action cannot be empty or blank"); @@ -87,13 +87,13 @@ public class DeletedMessagesVaultRoutes implements Routes { private static List plainValues() { return Stream.of(values()) -.map(UserVaultAction::getValue) +.map(VaultAction::getValue) .collect(Guavate.toImmutableList()); } private final String value; -UserVaultAction(String value) { +VaultAction(String value) { this.value = value; } @@ -173,14 +173,14 @@ public class DeletedMessagesVaultRoutes implements Routes { @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side.") }) private TaskIdDto userActions(Request request, Response response) throws JsonExtractException { -UserVaultAction requestedAction = extractUserVaultAction(request); +VaultAction requestedAction = extractVaultAction(request); Task requestedTask = generateTask(requestedAction, request); TaskId taskId = taskManager.submit(requestedTask); return TaskIdDto.respond(response, taskId); } -private Task generateTask(UserVaultAction requestedAction, Request request) throws JsonExtractException { +private Task generateTask(VaultAction requestedAction, Request request) throws JsonExtractException { User user = extractUser(request); validateUserExist(user); Query query = translate(jsonExtractor.parse(request.body())); @@ -264,17 +264,17 @@ public class DeletedMessagesVaultRoutes implements Routes { } } -private UserVaultAction extractUserVaultAction(Request request) { +private VaultAction extractVaultAction(Request request) { String actionParam = request.queryParams(ACTION_QUERY_PARAM); return Optional.ofNullable(actionParam) -.map(this::getUserVaultAction) +.map(this::getVaultAction) .orElseThrow(() -> new IllegalArgumentException("action parameter is missing")); } -private UserVaultAction getUserVaultAction(String actionString) { -return UserVaultAction.getAction(actionString) +private VaultAction getVaultAction(String actionString) { +return VaultAction.getAction(actionString) .orElseThrow(() -> new IllegalArgumentException(String.format("'%s' is not a valid action. Supported values are: (%s)", actionString, -Joiner.on(",").join(UserVaultAction.plainValues(); +Joiner.on(",").join(VaultAction.plainValues(); } } diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java index 7989b31..713ddc9 100644 --- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
[james-project] 01/04: JAMES-2714 PreDeletionHook configuration documentation in xdoc config-listeners.xml
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit a539b92703a237cf3e8f1db977d9c2ff2697f52f Author: Tran Tien Duc AuthorDate: Wed Apr 10 15:34:33 2019 +0700 JAMES-2714 PreDeletionHook configuration documentation in xdoc config-listeners.xml --- src/site/xdoc/server/config-listeners.xml | 25 +++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/site/xdoc/server/config-listeners.xml b/src/site/xdoc/server/config-listeners.xml index ca2f286..3eae89f 100644 --- a/src/site/xdoc/server/config-listeners.xml +++ b/src/site/xdoc/server/config-listeners.xml @@ -25,7 +25,7 @@ - + Note: This feature requires Guice wiring. This is not implemented using Spring wiring. @@ -40,7 +40,12 @@ To do so, just register the class that needs to be instantiated and added to global listeners. These JAR can be part of James source code, or provided as an extension and thus should be located in theextensions-jars folder. + + + +Mailbox listener configuration is under the XML element listener + Some MailboxListener allows you to specify if you want to run them synchronously or asynchronously. To do so, for MailboxListener that supports this, you can use the async attribute (optional, per mailet default) to govern the execution mode. @@ -61,7 +66,23 @@ For Cassandra guice wiring. Sends emails to users exceeding 80% and 99% of their quota to warn them - + + +Before deleting a message in James, this message and some related information about the deletion will be passed to a set of PreDeletionHook instances, +This process is called notifying, and it acts sequentially. If the notifying process for all PreDeletionHooks finish successfully, then the message will be processed to be deleted. +Otherwise, that message won't be deleted. + + +Pre Deletion Hook configuration is under the XML element preDeletionHook + + +Already provided additional pre deletion hooks includes: + + org.apache.james.vault.DeletedMessageVaultHook: +Storing messages about being deleted into org.apache.james.vault.DeletedMessageVault + + + - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 03/04: JAMES-2714 Deleted Messages Vault xdoc configuration documentation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 02d492c54843e963e60017a9d8b3a0744da4ade3 Author: Tran Tien Duc AuthorDate: Wed Apr 10 15:51:45 2019 +0700 JAMES-2714 Deleted Messages Vault xdoc configuration documentation --- src/site/xdoc/server/config-listeners.xml | 2 +- src/site/xdoc/server/config-vault.xml | 59 +++ src/site/xdoc/server/config.xml | 6 +++- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/site/xdoc/server/config-listeners.xml b/src/site/xdoc/server/config-listeners.xml index 3eae89f..0f9a41c 100644 --- a/src/site/xdoc/server/config-listeners.xml +++ b/src/site/xdoc/server/config-listeners.xml @@ -25,7 +25,7 @@ - + Note: This feature requires Guice wiring. This is not implemented using Spring wiring. diff --git a/src/site/xdoc/server/config-vault.xml b/src/site/xdoc/server/config-vault.xml new file mode 100644 index 000..289a339 --- /dev/null +++ b/src/site/xdoc/server/config-vault.xml @@ -0,0 +1,59 @@ + + + + + +Apache James Server 3 - Deleted Messages Vault Configuration + + + + + +Deleted Messages Vault is the component in charge of retaining messages before they are going to be deleted. +Messages stored in the Deleted Messages Vault could be deleted after exceeding their retentionPeriod (explained below). +It also supports to restore or export messages matching with defined criteria in https://james.apache.org/server/manage-webadmin.html#Deleted_Messages_Vault;>WebAdmin deleted messages vault document +by using https://james.apache.org/server/manage-webadmin.html#Deleted_Messages_Vault;>WebAdmin endpoints + + + + +Note: This feature requires Guice wiring. +To make James use DeletedMessageVault, you also need to configure the PreDeletionHook for it. +Example is at Mailbox Listener Configuration + + + + +Consult https://github.com/apache/james-project/blob/master/dockerfiles/run/guice/cassandra/destination/conf/deletedMessageVault.properties;>deletedMessageVault.properties +to get some examples and hints. + + +urlPrefix +Define prefix value of namespace in MailRepository where deleted messages are stored (default: default mail repository protocol + var/deletedMessages/vault) + +retentionPeriod +Deleted messages stored in the Deleted Messages Vault are expired after this period, (default: 1 year) + + + + + + + diff --git a/src/site/xdoc/server/config.xml b/src/site/xdoc/server/config.xml index ce19d31..013c4e2 100644 --- a/src/site/xdoc/server/config.xml +++ b/src/site/xdoc/server/config.xml @@ -133,7 +133,11 @@ WebAdmin Configuration - + +https://github.com/apache/james-project/blob/master/dockerfiles/run/guice/cassandra/destination/conf/deletedMessageVault.properties;>deletedMessageVault.properties +Deleted Messages Vault Configuration + + For most advanced system configuration, you can configure James for the following: - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch master updated (e0bfaea -> 8d008f5)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from e0bfaea JAMES-2694 fix unit test for insuring that assertion containsOnlyEntriesMatching is not sensitive to order new a539b92 JAMES-2714 PreDeletionHook configuration documentation in xdoc config-listeners.xml new 89a12a2 JAMES-2714 Update dead link in config-webadmin.xml new 02d492c JAMES-2714 Deleted Messages Vault xdoc configuration documentation new 8d008f5 JAMES-2714 Link configuration details to howTo The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: src/homepage/howTo/deleted-messages-vault.html | 6 +++ src/site/xdoc/server/config-listeners.xml | 25 ++- src/site/xdoc/server/config-vault.xml | 59 ++ src/site/xdoc/server/config-webadmin.xml | 2 +- src/site/xdoc/server/config.xml| 6 ++- 5 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 src/site/xdoc/server/config-vault.xml - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 04/04: JAMES-2714 Link configuration details to howTo
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 8d008f5cc05e03159a03002de871d0b46e6f802e Author: Tran Tien Duc AuthorDate: Thu Apr 11 14:33:17 2019 +0700 JAMES-2714 Link configuration details to howTo --- src/homepage/howTo/deleted-messages-vault.html | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/homepage/howTo/deleted-messages-vault.html b/src/homepage/howTo/deleted-messages-vault.html index d4720a5..0cf7d0c 100644 --- a/src/homepage/howTo/deleted-messages-vault.html +++ b/src/homepage/howTo/deleted-messages-vault.html @@ -163,6 +163,9 @@ layout: default urlPrefix=cassandra://var/deletedMessages/vault retentionPeriod=1 year + +More details about configuration & example is at Deleted Messages Vault Configuration + Make James uses Deleted Messages Vault by configuring Pre Deletion Hooks @@ -188,6 +191,9 @@ layout: default /preDeletionHook /listeners + +More details about configuration & example is at Pre Deletion Hook Configuration + Starting James with enabled Deleted Message Vault by docker compose - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 02/04: JAMES-2714 Update dead link in config-webadmin.xml
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 89a12a2fdeb2d0fe3d3c9f1881c88a683d27c046 Author: Tran Tien Duc AuthorDate: Wed Apr 10 15:37:51 2019 +0700 JAMES-2714 Update dead link in config-webadmin.xml --- src/site/xdoc/server/config-webadmin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/site/xdoc/server/config-webadmin.xml b/src/site/xdoc/server/config-webadmin.xml index 31ed7de..a651556 100644 --- a/src/site/xdoc/server/config-webadmin.xml +++ b/src/site/xdoc/server/config-webadmin.xml @@ -27,7 +27,7 @@ -Consult https://github.com/apache/james-project/server/container/guice/memory-guice/sample-configuration/webadmin.properties;>webadmin.properties in GIT to get some examples and hints. +Consult https://github.com/apache/james-project/blob/master/dockerfiles/run/guice/cassandra/destination/conf/webadmin.properties;>webadmin.properties in GIT to get some examples and hints. Use this configuration to define the WebAdmin's responding host and port. - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 01/05: JAMES-2694 add zip entry type extra field
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 91ed0d342a8c2b317053eb624b71aa74ebfc5100 Author: RĂ©mi Kowalski AuthorDate: Mon Mar 25 09:31:01 2019 +0100 JAMES-2694 add zip entry type extra field --- .../EntryTypeExtraField.java} | 27 +++-- .../mailbox/backup/{ => zip}/FlagsExtraField.java | 2 +- .../backup/{ => zip}/InternalDateExtraField.java | 2 +- .../mailbox/backup/{ => zip}/LongExtraField.java | 14 +-- .../backup/{ => zip}/MailboxIdExtraField.java | 2 +- .../backup/{ => zip}/MessageIdExtraField.java | 2 +- .../mailbox/backup/{ => zip}/SizeExtraField.java | 2 +- .../mailbox/backup/{ => zip}/StringExtraField.java | 2 +- .../mailbox/backup/{ => zip}/UidExtraField.java| 2 +- .../backup/{ => zip}/UidValidityExtraField.java| 2 +- .../mailbox/backup/{ => zip}/WithZipHeader.java| 2 +- .../{UidExtraField.java => zip/ZipEntryType.java} | 37 +++--- .../james/mailbox/backup/{ => zip}/Zipper.java | 16 ++- .../mailbox/backup/DefaultMailboxBackupTest.java | 1 + .../james/mailbox/backup/FlagExtraFieldTest.java | 1 + .../mailbox/backup/InternalDateExtraFieldTest.java | 1 + .../mailbox/backup/MailboxIdExtraFieldTest.java| 1 + .../mailbox/backup/MessageIdExtraFieldTest.java| 1 + .../james/mailbox/backup/SizeExtraFieldTest.java | 1 + .../james/mailbox/backup/UidExtraFieldTest.java| 1 + .../mailbox/backup/UidValidityExtraFieldTest.java | 1 + .../james/mailbox/backup/WithZipHeaderTest.java| 1 + .../org/apache/james/mailbox/backup/ZipAssert.java | 1 + .../apache/james/mailbox/backup/ZipAssertTest.java | 2 + ...ipHeaderTest.java => ZipEntryTypeContract.java} | 27 +++-- ...ldTest.java => ZipEntryTypeExtraFieldTest.java} | 130 - .../apache/james/mailbox/backup/ZipperTest.java| 8 ++ .../apache/james/vault/DeletedMessageZipper.java | 4 +- .../james/vault/DeletedMessageZipperTest.java | 4 +- 29 files changed, 159 insertions(+), 138 deletions(-) diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/EntryTypeExtraField.java similarity index 56% copy from mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java copy to mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/EntryTypeExtraField.java index 4ff486b..270f983 100644 --- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java +++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/EntryTypeExtraField.java @@ -16,30 +16,39 @@ * specific language governing permissions and limitations * * under the License. * / -package org.apache.james.mailbox.backup; +package org.apache.james.mailbox.backup.zip; import java.util.Optional; import org.apache.commons.compress.archivers.zip.ZipShort; -public class SizeExtraField extends LongExtraField implements WithZipHeader { +public class EntryTypeExtraField extends LongExtraField implements WithZipHeader { -public static final ZipShort ID_AJ = new ZipShort(WithZipHeader.toLittleEndian('a', 'j')); +public static final ZipShort ID_AQ = new ZipShort(WithZipHeader.toLittleEndian('a', 'q')); +public static final EntryTypeExtraField TYPE_MAILBOX = new EntryTypeExtraField(ZipEntryType.MAILBOX); +public static final EntryTypeExtraField TYPE_MAILBOX_ANNOTATION_DIR = new EntryTypeExtraField(ZipEntryType.MAILBOX_ANNOTATION_DIR); +public static final EntryTypeExtraField TYPE_MAILBOX_ANNOTATION = new EntryTypeExtraField(ZipEntryType.MAILBOX_ANNOTATION); +public static final EntryTypeExtraField TYPE_MESSAGE = new EntryTypeExtraField(ZipEntryType.MESSAGE); -public SizeExtraField() { +/** + * Only for ExtraFieldUtils.register + */ +public EntryTypeExtraField() { super(); } -public SizeExtraField(long value) { -super(value); +public EntryTypeExtraField(ZipEntryType entryType) { +super(entryType.ordinal()); } -public SizeExtraField(Optional value) { -super(value); +public Optional getEnumValue() { +return getValue() +.map(Long::intValue) +.flatMap(ZipEntryType::zipEntryType); } @Override public ZipShort getHeaderId() { -return ID_AJ; +return ID_AQ; } } diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/FlagsExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/FlagsExtraField.java similarity index 98% rename from mailbox/backup/src
[james-project] 05/05: JAMES-2694 fix unit test for insuring that assertion containsOnlyEntriesMatching is not sensitive to order
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit e0bfaea0e0ed10bc9d2bd60e4f5ec1f70e261ae6 Author: RĂ©mi Kowalski AuthorDate: Wed Apr 3 16:23:12 2019 +0200 JAMES-2694 fix unit test for insuring that assertion containsOnlyEntriesMatching is not sensitive to order --- .../src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 4762307..92681b0 100644 --- 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 @@ -239,8 +239,8 @@ public class ZipAssertTest { try (ZipFile zipFile = buildZipFile(ENTRY, ENTRY_2)) { assertThatCode(() -> assertThatZip(zipFile) .containsOnlyEntriesMatching( -hasName(ENTRY_NAME), -hasName(ENTRY_NAME_2))) +hasName(ENTRY_NAME_2), +hasName(ENTRY_NAME))) .doesNotThrowAnyException(); } } - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 04/05: JAMES-2694 add unit tests to enforce orders of entries in zip file
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 5db11dfc1ae84a68148e02bb7e161f48b1146dbf Author: RĂ©mi Kowalski AuthorDate: Wed Apr 3 16:17:09 2019 +0200 JAMES-2694 add unit tests to enforce orders of entries in zip file --- .../org/apache/james/mailbox/backup/ZipAssert.java | 48 --- .../apache/james/mailbox/backup/ZipAssertTest.java | 70 +++--- .../apache/james/mailbox/backup/ZipperTest.java| 28 + 3 files changed, 129 insertions(+), 17 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 e2842b8..c69326d 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 @@ -31,6 +31,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.function.UnaryOperator; import java.util.stream.Stream; @@ -151,15 +152,18 @@ public class ZipAssert extends AbstractAssert implements Aut this.zipFile = zipFile; } -public ZipAssert containsOnlyEntriesMatching(EntryChecks... entryChecks) throws Exception { +private ZipAssert containsEntriesMatchingWithComparator(Optional> sortEntriesBy, + Optional> sortEntryChecksBy, +EntryChecks... entryChecks) throws Exception { isNotNull(); -List sortedEntryChecks = Arrays.stream(entryChecks) -.sorted(Comparator.comparing(checks -> checks.name)) -.collect(Guavate.toImmutableList()); -List entries = Collections.list(zipFile.getEntries()) -.stream() -.sorted(Comparator.comparing(ZipArchiveEntry::getName)) -.collect(Guavate.toImmutableList()); + +Stream entryChecksStream = Arrays.stream(entryChecks); +List sortedEntryChecks = sortAndCollect(sortEntryChecksBy, entryChecksStream); + +Stream entryStream = Collections.list(zipFile.getEntries()) +.stream(); +List entries = sortAndCollect(sortEntriesBy, entryStream); + if (entries.size() != entryChecks.length) { throwAssertionError(shouldHaveSize(zipFile, entryChecks.length, entries.size())); } @@ -169,6 +173,33 @@ public class ZipAssert extends AbstractAssert implements Aut return myself; } +private List sortAndCollect(Optional> sortBy, Stream stream) { +Stream sortedStream = sortBy.map(comparator -> stream.sorted(comparator)) +.orElse(stream); +return sortedStream.collect(Guavate.toImmutableList()); +} + +/** + * Check that the zip entries in the zip file contains only the entries matching + * the entryChecks, with the same number of checks as entries. + * The order of the entries in the zip file is independent from the one of the entryChecks. + */ +public ZipAssert containsOnlyEntriesMatching(EntryChecks... entryChecks) throws Exception { +Comparator entryComparator = Comparator.comparing(ZipArchiveEntry::getName); +Comparator entryCheckComparator = Comparator.comparing(check -> check.name); + +return containsEntriesMatchingWithComparator(Optional.of(entryComparator), Optional.of(entryCheckComparator), entryChecks); +} + +/** + * Check that the zip entries in the zip file contains only the entries matching + * the entryChecks, with the same number of checks as entries. + * The order of the entries in the zip file must match the one of the entryChecks. + */ +public ZipAssert containsExactlyEntriesMatching(EntryChecks... entryChecks) throws Exception { +return containsEntriesMatchingWithComparator(Optional.empty(), Optional.empty(), entryChecks); +} + public ZipAssert hasNoEntry() { isNotNull(); if (zipFile.getEntries().hasMoreElements()) { @@ -268,6 +299,7 @@ public class ZipAssert extends AbstractAssert implements Aut /** * Because there are always some extra fields not belong to James, and their equals() method doesn't work + * * @param entry * @return */ 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 index adbd78e..4762307 100644 --- 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 @@ -175,7 +175,7 @@ public class ZipAssertTest {
[james-project] 03/05: JAMES-2694 Add unit tests backup mailbox with annotation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 4a3253710ee358d6e83338eebe9582d92a5075bf Author: RĂ©mi Kowalski AuthorDate: Tue Mar 26 17:41:50 2019 +0100 JAMES-2694 Add unit tests backup mailbox with annotation --- .../james/mailbox/backup/DefaultMailboxBackupTest.java | 16 1 file changed, 16 insertions(+) diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java index 98582a4..81f5dc3 100644 --- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java +++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java @@ -85,6 +85,22 @@ class DefaultMailboxBackupTest implements MailboxMessageFixture { } @Test +void doBackupMailboxWithAnnotationShouldStoreAnArchiveWithMailboxAndAnnotation() throws Exception { +ByteArrayOutputStream destination = new ByteArrayOutputStream(BUFFER_SIZE); +MailboxSession session = mailboxManager.createSystemSession(USER); +createMailBoxWithMessage(session, MAILBOX_PATH_USER1_MAILBOX1); +mailboxManager.updateAnnotations(MAILBOX_PATH_USER1_MAILBOX1, session, WITH_ANNOTATION_1); + +backup.backupAccount(USER1, destination); +try (ZipAssert zipAssert = ZipAssert.assertThatZip(destination)) { + zipAssert.containsOnlyEntriesMatching(EntryChecks.hasName(MAILBOX_1_NAME + "/").isDirectory(), +EntryChecks.hasName(MAILBOX_1_NAME + "/" + "annotations" + "/").isDirectory(), +EntryChecks.hasName(MAILBOX_1_NAME + "/" + "annotations" + "/" + ANNOTATION_1_KEY.asString()).hasStringContent(ANNOTATION_1_CONTENT) +); +} +} + +@Test void doBackupWithOneMessageShouldStoreAnArchiveWithTwoEntries() throws Exception { ByteArrayOutputStream destination = new ByteArrayOutputStream(BUFFER_SIZE); MailboxSession session = mailboxManager.createSystemSession(USER); - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch master updated (db3b9a4 -> e0bfaea)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from db3b9a4 JAMES-2708 Singleton Linshare Docker Compose new 91ed0d3 JAMES-2694 add zip entry type extra field new ff3728e JAMES-2694 refactor MailboxMessageFixture new 4a32537 JAMES-2694 Add unit tests backup mailbox with annotation new 5db11df JAMES-2694 add unit tests to enforce orders of entries in zip file new e0bfaea JAMES-2694 fix unit test for insuring that assertion containsOnlyEntriesMatching is not sensitive to order The 5 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../EntryTypeExtraField.java} | 33 +++--- .../mailbox/backup/{ => zip}/FlagsExtraField.java | 2 +- .../backup/{ => zip}/InternalDateExtraField.java | 2 +- .../mailbox/backup/{ => zip}/LongExtraField.java | 14 +-- .../backup/{ => zip}/MailboxIdExtraField.java | 2 +- .../backup/{ => zip}/MessageIdExtraField.java | 2 +- .../mailbox/backup/{ => zip}/SizeExtraField.java | 2 +- .../mailbox/backup/{ => zip}/StringExtraField.java | 2 +- .../mailbox/backup/{ => zip}/UidExtraField.java| 2 +- .../backup/{ => zip}/UidValidityExtraField.java| 2 +- .../mailbox/backup/{ => zip}/WithZipHeader.java| 2 +- .../james/mailbox/backup/zip/ZipEntryType.java | 39 --- .../james/mailbox/backup/{ => zip}/Zipper.java | 16 ++- .../mailbox/backup/DefaultMailboxBackupTest.java | 25 ++-- .../james/mailbox/backup/FlagExtraFieldTest.java | 1 + .../mailbox/backup/InternalDateExtraFieldTest.java | 1 + .../mailbox/backup/MailboxIdExtraFieldTest.java| 1 + .../mailbox/backup/MailboxMessageFixture.java | 22 +++- .../mailbox/backup/MessageIdExtraFieldTest.java| 1 + .../james/mailbox/backup/SizeExtraFieldTest.java | 1 + .../james/mailbox/backup/UidExtraFieldTest.java| 1 + .../mailbox/backup/UidValidityExtraFieldTest.java | 1 + .../james/mailbox/backup/WithZipHeaderTest.java| 1 + .../org/apache/james/mailbox/backup/ZipAssert.java | 49 ++-- .../apache/james/mailbox/backup/ZipAssertTest.java | 76 ++-- ...ipHeaderTest.java => ZipEntryTypeContract.java} | 27 +++-- ...ldTest.java => ZipEntryTypeExtraFieldTest.java} | 130 - .../apache/james/mailbox/backup/ZipperTest.java| 36 ++ .../apache/james/vault/DeletedMessageZipper.java | 4 +- .../james/vault/DeletedMessageZipperTest.java | 4 +- 30 files changed, 323 insertions(+), 178 deletions(-) copy mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{MailboxIdExtraField.java => zip/EntryTypeExtraField.java} (56%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/FlagsExtraField.java (98%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/InternalDateExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/LongExtraField.java (92%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/MailboxIdExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/MessageIdExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/SizeExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/StringExtraField.java (98%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/UidExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/UidValidityExtraField.java (97%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/WithZipHeader.java (97%) copy server/container/guice/guice-common/src/main/java/org/apache/james/utils/GuiceProbeProvider.java => mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipEntryType.java (60%) rename mailbox/backup/src/main/java/org/apache/james/mailbox/backup/{ => zip}/Zipper.java (90%) copy mailbox/backup/src/test/java/org/apache/james/mailbox/backup/{WithZipHeaderTest.java => ZipEntryTypeContract.java} (61%) copy mailbox/backup/src/test/java/org/apache/james/mailbox/backup/{SizeExtraFieldTest.java => ZipEntryTypeExtraFieldTest.java} (51%) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 02/05: JAMES-2694 refactor MailboxMessageFixture
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit ff3728ecf8e0f9fbb44d54904c200a8de558476e Author: RĂ©mi Kowalski AuthorDate: Mon Mar 25 15:47:28 2019 +0100 JAMES-2694 refactor MailboxMessageFixture --- .../mailbox/backup/DefaultMailboxBackupTest.java | 8 .../mailbox/backup/MailboxMessageFixture.java | 22 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java index 964e00b..98582a4 100644 --- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java +++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.HashSet; -import org.apache.james.core.User; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; @@ -41,13 +40,6 @@ import com.github.fge.lambdas.Throwing; class DefaultMailboxBackupTest implements MailboxMessageFixture { -private static final String USER = "user"; -private static final String OTHER_USER = "otherUser"; - -private static final User USER1 = User.fromUsername(USER); -private static final MailboxPath MAILBOX_PATH_USER1_MAILBOX1 = MailboxPath.forUser(USER, MAILBOX_1_NAME); -private static final MailboxPath MAILBOX_PATH_USER1_MAILBOX2 = MailboxPath.forUser(USER, MAILBOX_2_NAME); -private static final MailboxPath MAILBOX_PATH_OTHER_USER_MAILBOX1 = MailboxPath.forUser(OTHER_USER, MAILBOX_OTHER_USER_NAME); private static final HashSet PRE_DELETION_HOOKS = new HashSet<>(); private static final int BUFFER_SIZE = 4096; 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 104d54a..257a9f8 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 @@ -28,6 +28,7 @@ import java.util.List; import javax.mail.Flags; import javax.mail.util.SharedByteArrayInputStream; +import org.apache.james.core.User; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageUid; @@ -46,6 +47,11 @@ import com.google.common.collect.ImmutableList; public interface MailboxMessageFixture { +String USER = "user"; +String OTHER_USER = "otherUser"; + +User USER1 = User.fromUsername(USER); + String DATE_STRING_1 = "2018-02-15T15:54:02Z"; String DATE_STRING_2 = "2018-03-15T15:54:02Z"; ZonedDateTime DATE_1 = ZonedDateTime.parse(DATE_STRING_1); @@ -75,15 +81,21 @@ public interface MailboxMessageFixture { MailboxId MAILBOX_ID_11 = TestId.of(11L); Flags flags1 = new Flags("myFlags"); -MailboxSession MAILBOX_SESSION = MailboxSessionUtil.create("user"); +MailboxSession MAILBOX_SESSION = MailboxSessionUtil.create(USER); String MAILBOX_1_NAME = "mailbox1"; String MAILBOX_2_NAME = "mailbox2"; String MAILBOX_OTHER_USER_NAME = "mailbox_other"; -Mailbox MAILBOX_1 = new Mailbox(MailboxPath.forUser("user", MAILBOX_1_NAME), 42, MAILBOX_ID_1); -Mailbox MAILBOX_1_OTHER_USER = new Mailbox(MailboxPath.forUser("otherUser", MAILBOX_OTHER_USER_NAME), 42, MAILBOX_ID_11); -Mailbox MAILBOX_1_SUB_1 = new Mailbox(MailboxPath.forUser("user", MAILBOX_1_NAME + MAILBOX_SESSION.getPathDelimiter() + "sub1"), 420, TestId.of(11L)); -Mailbox MAILBOX_2 = new Mailbox(MailboxPath.forUser("user", MAILBOX_2_NAME), 43, MAILBOX_ID_2); + +MailboxPath MAILBOX_PATH_USER1_MAILBOX1 = MailboxPath.forUser(USER, MAILBOX_1_NAME); +MailboxPath MAILBOX_PATH_USER1_MAILBOX1_SUB_1 = MailboxPath.forUser(USER, MAILBOX_1_NAME + MAILBOX_SESSION.getPathDelimiter() + "sub1"); +MailboxPath MAILBOX_PATH_USER1_MAILBOX2 = MailboxPath.forUser(USER, MAILBOX_2_NAME); +MailboxPath MAILBOX_PATH_OTHER_USER_MAILBOX1 = MailboxPath.forUser(OTHER_USER, MAILBOX_OTHER_USER_NAME); + +Mailbox MAILBOX_1 = new Mailbox(MAILBOX_PATH_USER1_MAILBOX1, 42, MAILBOX_ID_1); +Mailbox MAILBOX_1_OTHER_USER = new Mailbox(MAILBOX_PATH_OTHER_USER_MAILBOX1, 42, MAILBOX_ID_11); +Mailbox MAILBOX_1_SUB_1 = new Mailbox(MAILBOX_PATH
[james-project] branch master updated: JAMES-2704 Add Mailet to randomly assign messages to users
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git The following commit(s) were added to refs/heads/master by this push: new f633c2d JAMES-2704 Add Mailet to randomly assign messages to users f633c2d is described below commit f633c2da38aece949552a6f409f6b03a4d6d64b4 Author: Gautier DI FOLCO AuthorDate: Fri Mar 29 09:50:36 2019 +0100 JAMES-2704 Add Mailet to randomly assign messages to users --- .../apache/james/smtp/SmtpRandomStoringTest.java | 208 + .../james/transport/mailets/RandomStoring.java | 170 + .../org/apache/james/utils/IMAPMessageReader.java | 15 ++ 3 files changed, 393 insertions(+) diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java new file mode 100644 index 000..d313c9b --- /dev/null +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java @@ -0,0 +1,208 @@ +/ + * 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.smtp; + +import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN; +import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP; +import static org.apache.james.mailets.configuration.Constants.PASSWORD; +import static org.apache.james.mailets.configuration.Constants.calmlyAwait; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.util.Collection; +import java.util.stream.IntStream; +import java.util.stream.LongStream; +import javax.mail.MessagingException; + +import org.apache.james.MemoryJamesServerMain; +import org.apache.james.core.builder.MimeMessageBuilder; +import org.apache.james.mailbox.model.MailboxConstants; +import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailets.TemporaryJamesServer; +import org.apache.james.mailets.configuration.CommonProcessors; +import org.apache.james.mailets.configuration.MailetConfiguration; +import org.apache.james.mailets.configuration.MailetContainer; +import org.apache.james.mailets.configuration.ProcessorConfiguration; +import org.apache.james.modules.MailboxProbeImpl; +import org.apache.james.modules.protocols.ImapGuiceProbe; +import org.apache.james.modules.protocols.SmtpGuiceProbe; +import org.apache.james.probe.DataProbe; +import org.apache.james.server.core.MailImpl; +import org.apache.james.transport.mailets.RandomStoring; +import org.apache.james.transport.matchers.All; +import org.apache.james.utils.DataProbeImpl; +import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.utils.SMTPMessageSender; +import org.apache.mailet.Mail; + +import org.awaitility.Duration; +import org.awaitility.core.ConditionFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import com.github.fge.lambdas.Throwing; +import com.github.steveash.guavate.Guavate; +import com.google.common.collect.ImmutableList; + +public class SmtpRandomStoringTest { +private static final String FROM = "from@" + DEFAULT_DOMAIN; +private static final String TO = "t...@any.com"; +private static final Long USERS_NUMBERS = 10L; +private static final ConditionFactory awaitAtMostTenSeconds = calmlyAwait +.atMost(Duration.TEN_SECONDS); + +private static final ImmutableList USERS = LongStream.range(0L, USERS_NUMBERS) +.boxed() +.map(index -> "user" + index + "@" + DEFAULT_DOMAIN) +.collect(Guavat
[james-project] 03/03: JAMES-2671 Remove duplicated Swift tests and replace general BlobStore by AWS S3
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit be9a006b47120680af910ed0b3cb30f82ffcc602 Author: Gautier DI FOLCO AuthorDate: Tue Apr 2 14:54:36 2019 +0200 JAMES-2671 Remove duplicated Swift tests and replace general BlobStore by AWS S3 --- .../CassandraRabbitMQSwiftSmtpTestRuleFactory.java | 75 - .../mpt/smtp/SwiftRabbitMQForwardSmtpTest.java | 40 --- .../smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java | 40 --- .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 2 +- .../BlobStoreChoosingConfigurationTest.java| 2 +- .../blobstore/BlobStoreChoosingModuleTest.java | 14 +-- .../cassandra/cucumber/CucumberSwiftSingleton.java | 28 - .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java | 4 +- .../RabbitMQSwiftForwardIntegrationTest.java | 47 .../RabbitMQSwiftGetMailboxesMethodTest.java | 44 .../RabbitMQSwiftGetMessageListMethodTest.java | 50 - .../RabbitMQSwiftGetVacationResponseTest.java | 50 - .../RabbitMQSwiftJmapAuthenticationTest.java | 46 .../rabbitmq/RabbitMQSwiftProvisioningTest.java| 44 .../rabbitmq/RabbitMQSwiftQuotaMailingTest.java| 42 --- .../rabbitmq/RabbitMQSwiftSendMDNMethodTest.java | 59 -- .../RabbitMQSwiftSetMailboxesMethodTest.java | 49 .../RabbitMQSwiftSetMessagesMethodTest.java| 65 --- .../RabbitMQSwiftSetVacationResponseTest.java | 49 .../RabbitMQSwiftSpamAssassinContractTest.java | 53 - .../RabbitMQSwiftVacationIntegrationTest.java | 49 .../RabbitMQSwiftVacationRelayIntegrationTest.java | 60 -- .../ReindexingWithEventDeadLettersTest.java| 4 +- .../cucumber/swift/CucumberCassandraSingleton.java | 27 - .../cucumber/swift/CucumberRabbitMQSingleton.java | 26 - .../cucumber/swift/CucumberSwiftSingleton.java | 28 - .../swift/RabbitMQDownloadCucumberTest.java| 36 -- .../swift/RabbitMQGetMessagesMethodTest.java | 36 -- .../RabbitMQIMAPKeywordsInconsistenciesTest.java | 36 -- .../RabbitMQIMAPSetMessagesCompatibilityTest.java | 36 -- .../cucumber/swift/RabbitMQMailboxSharingTest.java | 43 --- .../cucumber/swift/RabbitMQMessageSharingTest.java | 44 .../RabbitMQSetMailboxesMethodCucumberTest.java| 36 -- .../RabbitMQSetMessagesMethodCucumberTest.java | 36 -- .../cucumber/swift/RabbitMQSwiftStepdefs.java | 123 - .../cucumber/swift/RabbitMQUploadCucumberTest.java | 36 -- 36 files changed, 13 insertions(+), 1446 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java deleted file mode 100644 index 8791af0..000 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java +++ /dev/null @@ -1,75 +0,0 @@ -/ - * 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.mpt.smtp; - -import org.apache.commons.configuration.DefaultConfigurationBuilder; -import org.apache.james.CassandraJamesServerMain; -import org.apache.james.CleanupTasksPerformer; -import org.apache.james.GuiceJamesServer; -import org.apache.james.backend.rabbitmq.DockerRabbitMQSingleton; -import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; -import org.apache.james.dnsse
[james-project] 02/03: Merge remote-tracking branch 'gdifolco/JAMES-2732'
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 08e06b89ec25d415d37ebae7c8d4b148c5272522 Merge: bbc3033 e67e60f Author: Antoine Duprat AuthorDate: Wed Apr 10 09:54:57 2019 +0200 Merge remote-tracking branch 'gdifolco/JAMES-2732' .../apache/james/mailbox/backup/ZipAssertTest.java | 4 +- .../james/mailbox/events/InVMEventBusTest.java | 2 +- .../mailbox/events/LocalListenerRegistryTest.java | 50 +++--- .../apache/james/event/json/SerializerFixture.java | 1 - .../vault/DeletedMessageVaultSearchContract.java | 4 +- .../james/vault/RetentionConfigurationTest.java| 2 +- .../blob/objectstorage/AESPayloadCodecTest.java| 2 - .../james/blob/union/UnionBlobStoreTest.java | 5 ++- .../apache/james/modules/RabbitMQExtension.java| 3 +- .../SetMessagesOutboxFlagUpdateTest.java | 1 - .../EventDeadLettersIntegrationTest.java | 1 - .../james/queue/rabbitmq/EnqueuedItemTest.java | 6 +-- .../view/cassandra/EnqueuedMailsDaoUtilTest.java | 3 +- .../view/cassandra/configuration/DTOTest.java | 2 +- .../model/EnqueuedItemWithSlicingContextTest.java | 6 +-- 15 files changed, 46 insertions(+), 46 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch master updated (bbc3033 -> be9a006)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from bbc3033 JAMES-2671 Remove non existing JUNIT group from execution profile new e67e60f JAMES-2732 Fix checkstyle in tests new 08e06b8 Merge remote-tracking branch 'gdifolco/JAMES-2732' new be9a006 JAMES-2671 Remove duplicated Swift tests and replace general BlobStore by AWS S3 The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../apache/james/mailbox/backup/ZipAssertTest.java | 4 +- .../james/mailbox/events/InVMEventBusTest.java | 2 +- .../mailbox/events/LocalListenerRegistryTest.java | 50 - .../apache/james/event/json/SerializerFixture.java | 1 - .../vault/DeletedMessageVaultSearchContract.java | 4 +- .../james/vault/RetentionConfigurationTest.java| 2 +- .../CassandraRabbitMQSwiftSmtpTestRuleFactory.java | 75 - .../mpt/smtp/SwiftRabbitMQForwardSmtpTest.java | 40 --- .../smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java | 40 --- .../blob/objectstorage/AESPayloadCodecTest.java| 2 - .../james/blob/union/UnionBlobStoreTest.java | 5 +- .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 2 +- .../apache/james/modules/RabbitMQExtension.java| 3 +- .../BlobStoreChoosingConfigurationTest.java| 2 +- .../blobstore/BlobStoreChoosingModuleTest.java | 14 +-- .../cassandra/cucumber/CucumberSwiftSingleton.java | 28 - .../SetMessagesOutboxFlagUpdateTest.java | 1 - .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java | 4 +- .../RabbitMQSwiftForwardIntegrationTest.java | 47 .../RabbitMQSwiftGetMailboxesMethodTest.java | 44 .../RabbitMQSwiftGetMessageListMethodTest.java | 50 - .../RabbitMQSwiftGetVacationResponseTest.java | 50 - .../RabbitMQSwiftJmapAuthenticationTest.java | 46 .../rabbitmq/RabbitMQSwiftProvisioningTest.java| 44 .../rabbitmq/RabbitMQSwiftQuotaMailingTest.java| 42 --- .../rabbitmq/RabbitMQSwiftSendMDNMethodTest.java | 59 -- .../RabbitMQSwiftSetMailboxesMethodTest.java | 49 .../RabbitMQSwiftSetMessagesMethodTest.java| 65 --- .../RabbitMQSwiftSetVacationResponseTest.java | 49 .../RabbitMQSwiftSpamAssassinContractTest.java | 53 - .../RabbitMQSwiftVacationIntegrationTest.java | 49 .../RabbitMQSwiftVacationRelayIntegrationTest.java | 60 -- .../ReindexingWithEventDeadLettersTest.java| 4 +- .../cucumber/swift/CucumberCassandraSingleton.java | 27 - .../cucumber/swift/CucumberRabbitMQSingleton.java | 26 - .../cucumber/swift/CucumberSwiftSingleton.java | 28 - .../swift/RabbitMQDownloadCucumberTest.java| 36 -- .../swift/RabbitMQGetMessagesMethodTest.java | 36 -- .../RabbitMQIMAPKeywordsInconsistenciesTest.java | 36 -- .../RabbitMQIMAPSetMessagesCompatibilityTest.java | 36 -- .../cucumber/swift/RabbitMQMailboxSharingTest.java | 43 --- .../cucumber/swift/RabbitMQMessageSharingTest.java | 44 .../RabbitMQSetMailboxesMethodCucumberTest.java| 36 -- .../RabbitMQSetMessagesMethodCucumberTest.java | 36 -- .../cucumber/swift/RabbitMQSwiftStepdefs.java | 123 - .../cucumber/swift/RabbitMQUploadCucumberTest.java | 36 -- .../EventDeadLettersIntegrationTest.java | 1 - .../james/queue/rabbitmq/EnqueuedItemTest.java | 6 +- .../view/cassandra/EnqueuedMailsDaoUtilTest.java | 3 +- .../view/cassandra/configuration/DTOTest.java | 2 +- .../model/EnqueuedItemWithSlicingContextTest.java | 6 +- 51 files changed, 59 insertions(+), 1492 deletions(-) delete mode 100644 mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java delete mode 100644 mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java delete mode 100644 mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java delete mode 100644 server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CucumberSwiftSingleton.java delete mode 100644 server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSwiftForwardIntegrationTest.java delete mode 100644 server/protocols/jmap-integration-testing/rabbi
[james-project] 01/03: JAMES-2732 Fix checkstyle in tests
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit e67e60f700872743183e9f6edffdd7cb58d79538 Author: Gautier DI FOLCO AuthorDate: Tue Apr 9 11:27:54 2019 +0200 JAMES-2732 Fix checkstyle in tests --- .../apache/james/mailbox/backup/ZipAssertTest.java | 4 +- .../james/mailbox/events/InVMEventBusTest.java | 2 +- .../mailbox/events/LocalListenerRegistryTest.java | 50 +++--- .../apache/james/event/json/SerializerFixture.java | 1 - .../vault/DeletedMessageVaultSearchContract.java | 4 +- .../james/vault/RetentionConfigurationTest.java| 2 +- .../blob/objectstorage/AESPayloadCodecTest.java| 2 - .../james/blob/union/UnionBlobStoreTest.java | 5 ++- .../apache/james/modules/RabbitMQExtension.java| 3 +- .../SetMessagesOutboxFlagUpdateTest.java | 1 - .../EventDeadLettersIntegrationTest.java | 1 - .../james/queue/rabbitmq/EnqueuedItemTest.java | 6 +-- .../view/cassandra/EnqueuedMailsDaoUtilTest.java | 3 +- .../view/cassandra/configuration/DTOTest.java | 2 +- .../model/EnqueuedItemWithSlicingContextTest.java | 6 +-- 15 files changed, 46 insertions(+), 46 deletions(-) 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 index ce473e4..90eb97b 100644 --- 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 @@ -43,7 +43,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.testcontainers.shaded.com.google.common.collect.ImmutableList; + +import com.google.common.collect.ImmutableList; @ExtendWith(TemporaryFolderExtension.class) public class ZipAssertTest { @@ -97,6 +98,7 @@ public class ZipAssertTest { this.extraFields = extraFields; } } + private static final String ENTRY_NAME = "entryName"; private static final String ENTRY_NAME_2 = "entryName2"; private static final String DIRECTORY_NAME = "folder/"; diff --git a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java index 56a9cde..862fc82 100644 --- a/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java +++ b/mailbox/event/event-memory/src/test/java/org/apache/james/mailbox/events/InVMEventBusTest.java @@ -24,7 +24,7 @@ import org.apache.james.metrics.api.NoopMetricFactory; import org.junit.jupiter.api.BeforeEach; public class InVMEventBusTest implements KeyContract.SingleEventBusKeyContract, GroupContract.SingleEventBusGroupContract, -ErrorHandlingContract{ +ErrorHandlingContract { private InVMEventBus eventBus; private MemoryEventDeadLetters deadLetters; diff --git a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/LocalListenerRegistryTest.java b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/LocalListenerRegistryTest.java index 05a6a13..8136239 100644 --- a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/LocalListenerRegistryTest.java +++ b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/LocalListenerRegistryTest.java @@ -52,7 +52,7 @@ class LocalListenerRegistryTest { @Test void getLocalMailboxListenersShouldReturnPreviouslyAddedListener() { -MailboxListener listener = event -> {}; +MailboxListener listener = event -> { }; testee.addListener(KEY_1, listener); assertThat(testee.getLocalMailboxListeners(KEY_1).collectList().block()) @@ -61,8 +61,8 @@ class LocalListenerRegistryTest { @Test void getLocalMailboxListenersShouldReturnPreviouslyAddedListeners() { -MailboxListener listener1 = event -> {}; -MailboxListener listener2 = event -> {}; +MailboxListener listener1 = event -> { }; +MailboxListener listener2 = event -> { }; testee.addListener(KEY_1, listener1); testee.addListener(KEY_1, listener2); @@ -72,8 +72,8 @@ class LocalListenerRegistryTest { @Test void getLocalMailboxListenersShouldNotReturnRemovedListeners() { -MailboxListener listener1 = event -> {}; -MailboxListener listener2 = event -> {}; +MailboxListener listener1 = event -> { }; +MailboxListener listener2 = event -> { }; testee.addListener(KEY_1, listener1); LocalListenerRegistry.LocalRegistration regis
[james-project] branch master updated: JAMES-2726 Add In-memory image creation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git The following commit(s) were added to refs/heads/master by this push: new 50a7eae JAMES-2726 Add In-memory image creation new b941483 Merge remote-tracking branch 'gdifolco/JAMES-2726-docker-inmemory-image' 50a7eae is described below commit 50a7eaec0d4f8dbc55a077ee45fb6d18d7d7ddbd Author: Gautier DI FOLCO AuthorDate: Tue Apr 2 17:38:38 2019 +0200 JAMES-2726 Add In-memory image creation --- dockerfiles/compilation/java-8/compile.sh | 11 +- dockerfiles/run/guice/memory/Dockerfile| 32 + .../memory/destination/conf/batchsizes.properties | 10 ++ .../conf/deletedMessageVault.properties| 1 + .../guice/memory/destination/conf/dnsservice.xml | 29 + .../guice/memory/destination/conf/domainlist.xml | 28 .../destination/conf/elasticsearch.properties | 29 + .../guice/memory/destination/conf/imapserver.xml | 62 + .../guice/memory/destination/conf/jmap.properties | 13 ++ .../guice/memory/destination/conf/jmx.properties | 29 + .../guice/memory/destination/conf/jwt_publickey| 9 ++ .../guice/memory/destination/conf/listeners.xml| 29 + .../run/guice/memory/destination/conf/logback.xml | 47 +++ .../memory/destination/conf/mailetcontainer.xml| 144 + .../destination/conf/mailrepositorystore.xml | 31 + .../memory/destination/conf/managesieveserver.xml | 65 ++ .../guice/memory/destination/conf/pop3server.xml | 42 ++ .../destination/conf/recipientrewritetable.xml | 26 .../guice/memory/destination/conf/smtpserver.xml | 105 +++ .../memory/destination/conf/usersrepository.xml| 26 .../memory/destination/conf/webadmin.properties| 41 ++ .../memory/destination/extensions-jars/README.md | 5 + server/container/guice/memory-guice/pom.xml| 5 +- .../org/apache/james/FakeMessageSearchIndex.java | 94 ++ .../org/apache/james/FakeSearchMailboxModule.java | 40 ++ .../org/apache/james/MemoryJamesServerMain.java| 1 + .../james/modules/data/MemoryDataModule.java | 10 +- 27 files changed, 956 insertions(+), 8 deletions(-) diff --git a/dockerfiles/compilation/java-8/compile.sh b/dockerfiles/compilation/java-8/compile.sh index f08f6ec..fff263f 100755 --- a/dockerfiles/compilation/java-8/compile.sh +++ b/dockerfiles/compilation/java-8/compile.sh @@ -18,6 +18,7 @@ CASSANDRA_RABBITMQ_DESTINATION=/cassandra-rabbitmq/destination CASSANDRA_RABBITMQ_LDAP_DESTINATION=/cassandra-rabbitmq-ldap/destination JPA_DESTINATION=/jpa/destination JPA_SMTP_DESTINATION=/jpa-smpt/destination +MEMORY_DESTINATION=/memory/destination SPRING_DESTINATION=/spring/destination SWAGGER_DESTINATION=/swagger @@ -104,6 +105,14 @@ if [ $? -eq 0 ]; then cp -r server/container/cli/target/james-server-cli.lib $JPA_SMTP_DESTINATION || true fi + if [ -d "$MEMORY_DESTINATION" ]; then + echo "Copying memory JARs" + cp server/container/guice/memory-guice/target/james-server-memory-guice.jar $MEMORY_DESTINATION || true + cp -r server/container/guice/memory-guice/target/james-server-memory-guice.lib $MEMORY_DESTINATION || true + cp server/container/cli/target/james-server-cli.jar $MEMORY_DESTINATION || true + cp -r server/container/cli/target/james-server-cli.lib $MEMORY_DESTINATION || true + fi + if [ -d "$SPRING_DESTINATION" ]; then echo "Copying SPRING jars" cp server/app/target/james-server-app-*-app.zip $SPRING_DESTINATION @@ -114,4 +123,4 @@ if [ $? -eq 0 ]; then cp server/protocols/webadmin/webadmin-mailbox/target/webadmin-mailbox.json $SWAGGER_DESTINATION || true cp server/protocols/webadmin/webadmin-swagger/target/webadmin-swagger.json $SWAGGER_DESTINATION || true fi -fi \ No newline at end of file +fi diff --git a/dockerfiles/run/guice/memory/Dockerfile b/dockerfiles/run/guice/memory/Dockerfile new file mode 100644 index 000..e969bf8 --- /dev/null +++ b/dockerfiles/run/guice/memory/Dockerfile @@ -0,0 +1,32 @@ +# Run James +# +# VERSION 1.0 + +FROM openjdk:8u181-jre + +# Ports that are used +# +# 25 SMTP without authentication +# 110 POP3 +# 143 IMAP with startTLS enabled +# 465 SMTP with authentication and socketTLS enabled +# 587 SMTP with authentication and startTLS enabled +# 993 IMAP with socketTLS enabled +# 8000 Web Admin interface (unsecured: expose at your own risks) + +EXPOSE 25 110 143 465 587 993 8000 + +WORKDIR /root + +# Get data we need to run James : build results and configuration +ADD destination/james-server-memory-guice.jar /root/james-server.jar +ADD destination/james-server-memory-guice.lib /root/james-server-memory-guice.lib +ADD dest
[james-project] branch master updated: JAMES-2724 Introduce Jenkinsfile for stress tests
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git The following commit(s) were added to refs/heads/master by this push: new d16a0e1 JAMES-2724 Introduce Jenkinsfile for stress tests d16a0e1 is described below commit d16a0e14443fec1c7d6d65134aaa9c016f81bca7 Author: Antoine Duprat AuthorDate: Thu Mar 28 13:10:35 2019 +0100 JAMES-2724 Introduce Jenkinsfile for stress tests --- JenkinsfileStressTests | 88 ++ 1 file changed, 88 insertions(+) diff --git a/JenkinsfileStressTests b/JenkinsfileStressTests new file mode 100644 index 000..27f3786 --- /dev/null +++ b/JenkinsfileStressTests @@ -0,0 +1,88 @@ +// This file should respect the Jenkinsfile format describe here: +// https://jenkins.io/doc/book/pipeline/jenkinsfile/ +// +// It may be used by any Jenkins instance you own. +// +// In order to work properly, it requires the following parameters: +// - SENARIO: the Gatling scenrio you want to play (ex. com.linagora.gatling.imap.scenario.ImapSimpleScenario) + +// Method in order to retry a command. +// It may be used to wait for a service to be available. +def maxRetries = 120 +def waitForCommandSuccess(command, maxRetries) { +def tries = 0; +while (tries++ < maxRetries) { +try { +sh command +return true +} catch (Exception e) { +if (tries >= maxRetries) { +throw new Exception("${maxRetries} tries exceeded. ${command} failed.", e) +} +sleep 1 SECONDS +} +} +} + +pipeline { +agent { label 'my-slave' } + +tools { +maven 'maven' +} + +stages { +stage('Compile') { +steps { +sh "mvn clean install -T1C -DskipTests" +} +} +stage('Build image') { +steps { +script { +docker.withTool('docker') { +sh "cp server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.jar dockerfiles/run/guice/cassandra-rabbitmq/destination" +sh "cp -r server/container/guice/cassandra-rabbitmq-guice/target/james-server-cassandra-rabbitmq-guice.lib dockerfiles/run/guice/cassandra-rabbitmq/destination" +sh "cp server/container/cli/target/james-server-cli.jar dockerfiles/run/guice/cassandra-rabbitmq/destination" +sh "cp -r server/container/cli/target/james-server-cli.lib dockerfiles/run/guice/cassandra-rabbitmq/destination" +sh "docker build -t james_run dockerfiles/run/guice/cassandra-rabbitmq" +} +} +} +} +stage('Start James') { +steps { +script { +docker.withTool('docker') { +sh "docker run -d --name=cassandra cassandra:3.11.3" +sh "docker run -d --name=rabbitmq rabbitmq:3.7.7-management" +sh "docker run -d --name=elasticsearch elasticsearch:2.4.6" + +sh "docker run -d --hostname HOSTNAME -p 25:25 -p 8081:80 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 --link cassandra:cassandra --link rabbitmq:rabbitmq --link elasticsearch:elasticsearch --name james_run -t james_run" +try { +def jamesCliWithOptions = 'java -jar /root/james-cli.jar -h 127.0.0.1' +waitForCommandSuccess("docker exec james_run ${jamesCliWithOptions} listusers", maxRetries) +} catch (Exception e) { +sh "docker logs james_run" +} +} +} +} +} +stage('Run Gatling test') { +steps { +build job: 'Gatling job', parameters: [[$class: 'StringParameterValue', name: 'SBT_ACTION', value: "gatling:testOnly ${params.SCENARIO}"]] +} +} +} + +post { +always { +script { +docker.withTool('docker') { +sh "docker rm -f cassandra rabbitmq elasticsearch james_run" +} +} +} +} +} - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 06/13: JAMES-2671 Add AwsS3 Test Rule
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 22d2851042a631a3fd8d345e5327169511a6af74 Author: Gautier DI FOLCO AuthorDate: Thu Mar 7 17:46:35 2019 +0100 JAMES-2671 Add AwsS3 Test Rule --- .../mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java | 53 .../smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java | 55 + .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java | 75 +++ .../org/apache/james/mpt/smtp/SmtpTestRule.java| 14 +-- .../james/blob/objectstorage/DockerAwsS3.java | 35 ++ .../james/blob/objectstorage/DockerAwsS3Rule.java | 40 ++ .../blob/objectstorage/DockerAwsS3Singleton.java | 34 + .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java | 4 +- .../objectstorage/aws/DockerAwsS3Container.java| 22 +++- .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 137 + .../james/modules/TestAwsS3BlobStoreModule.java| 47 +++ 11 files changed, 502 insertions(+), 14 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java new file mode 100644 index 000..6620839 --- /dev/null +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java @@ -0,0 +1,53 @@ +/ + * 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.mpt.smtp; + +import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; + +import org.apache.james.backends.cassandra.DockerCassandraRule; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; + +public class AwsS3RabbitMQForwardSmtpTest extends ForwardSmtpTest { + +@ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); + +@Rule +public SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost()); + +@Before +@Override +public void setUp() throws Exception { +cassandraRabbitMQAwsS3SmtpTestRule.beforeTest(); +super.setUp(); +} + +@Override +protected SmtpHostSystem createSmtpHostSystem() { +return cassandraRabbitMQAwsS3SmtpTestRule; +} + +@After +public void tearDown() { +cassandraRabbitMQAwsS3SmtpTestRule.afterTest(); +} +} diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java new file mode 100644 index 000..8faeed1 --- /dev/null +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java @@ -0,0 +1,55 @@ +/ + * 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 * + * * + *
[james-project] 08/13: JAMES-2671 Add AwsS3 integration tests
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2f932709f055146b02085eae65e88026e586ab80 Author: Gautier DI FOLCO AuthorDate: Tue Mar 12 14:21:05 2019 +0100 JAMES-2671 Add AwsS3 integration tests --- .../smtp/cassandra-rabbitmq-object-storage/pom.xml | 13 --- .../james/CassandraRabbitMQAwsS3JmapTestRule.java | 97 ++ .../CassandraRabbitMQLdapJmapJamesServerTest.java | 13 ++- .../cucumber/CucumberAwsS3Singleton.java} | 27 ++ .../rabbitmq-jmap-integration-testing/pom.xml | 20 + ...ilterTest.java => RabbitMQAwsS3FilterTest.java} | 9 +- ...va => RabbitMQAwsS3ForwardIntegrationTest.java} | 11 +-- ...va => RabbitMQAwsS3GetMailboxesMethodTest.java} | 11 +-- ... => RabbitMQAwsS3GetMessageListMethodTest.java} | 7 +- ...a => RabbitMQAwsS3GetVacationResponseTest.java} | 11 +-- ...va => RabbitMQAwsS3JmapAuthenticationTest.java} | 11 +-- ...est.java => RabbitMQAwsS3ProvisioningTest.java} | 7 +- ...est.java => RabbitMQAwsS3QuotaMailingTest.java} | 7 +- ...st.java => RabbitMQAwsS3SendMDNMethodTest.java} | 25 +++--- ...va => RabbitMQAwsS3SetMailboxesMethodTest.java} | 9 +- ...ava => RabbitMQAwsS3SetMessagesMethodTest.java} | 9 +- ...a => RabbitMQAwsS3SetVacationResponseTest.java} | 11 +-- ... => RabbitMQAwsS3SpamAssassinContractTest.java} | 7 +- ...a => RabbitMQAwsS3VacationIntegrationTest.java} | 11 +-- ...RabbitMQAwsS3VacationRelayIntegrationTest.java} | 7 +- ...ilterTest.java => RabbitMQSwiftFilterTest.java} | 2 +- ...va => RabbitMQSwiftForwardIntegrationTest.java} | 2 +- ...va => RabbitMQSwiftGetMailboxesMethodTest.java} | 2 +- ... => RabbitMQSwiftGetMessageListMethodTest.java} | 2 +- ...a => RabbitMQSwiftGetVacationResponseTest.java} | 4 +- ...va => RabbitMQSwiftJmapAuthenticationTest.java} | 4 +- ...est.java => RabbitMQSwiftProvisioningTest.java} | 2 +- ...est.java => RabbitMQSwiftQuotaMailingTest.java} | 2 +- ...st.java => RabbitMQSwiftSendMDNMethodTest.java} | 2 +- ...va => RabbitMQSwiftSetMailboxesMethodTest.java} | 2 +- ...ava => RabbitMQSwiftSetMessagesMethodTest.java} | 2 +- ...a => RabbitMQSwiftSetVacationResponseTest.java} | 2 +- ... => RabbitMQSwiftSpamAssassinContractTest.java} | 2 +- ...a => RabbitMQSwiftVacationIntegrationTest.java} | 2 +- ...RabbitMQSwiftVacationRelayIntegrationTest.java} | 2 +- .../CucumberAwsS3Singleton.java} | 27 ++ ...tMQStepdefs.java => RabbitMQAwsS3Stepdefs.java} | 43 +- ...tMQStepdefs.java => RabbitMQSwiftStepdefs.java} | 4 +- 38 files changed, 250 insertions(+), 181 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml index 0b7d7ef..91a4e23 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml @@ -110,17 +110,4 @@ test - - - - -org.apache.maven.plugins -maven-surefire-plugin - -true - - - - - \ No newline at end of file diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java new file mode 100644 index 000..49220e4 --- /dev/null +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java @@ -0,0 +1,97 @@ +/ + * 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.
[james-project] 13/13: JAMES-2671 Add AWS S3 Cucumber tests in rabbitmq-jmap-integration-testing
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 271a9ca8c455fe14d3a8485ef0f21e4260b102a8 Author: Gautier DI FOLCO AuthorDate: Thu Mar 28 10:44:24 2019 +0100 JAMES-2671 Add AWS S3 Cucumber tests in rabbitmq-jmap-integration-testing --- .../cucumber/awss3/CucumberAwsS3Singleton.java | 29 + .../cucumber/awss3/CucumberCassandraSingleton.java | 27 + .../cucumber/awss3/CucumberRabbitMQSingleton.java | 26 + .../cucumber/awss3/RabbitMQAwsS3Stepdefs.java | 123 + .../awss3/RabbitMQDownloadCucumberTest.java| 36 ++ .../awss3/RabbitMQGetMessagesMethodTest.java | 36 ++ .../RabbitMQIMAPKeywordsInconsistenciesTest.java | 36 ++ .../RabbitMQIMAPSetMessagesCompatibilityTest.java | 36 ++ .../cucumber/awss3/RabbitMQMailboxSharingTest.java | 43 +++ .../cucumber/awss3/RabbitMQMessageSharingTest.java | 44 .../RabbitMQSetMailboxesMethodCucumberTest.java| 37 +++ .../RabbitMQSetMessagesMethodCucumberTest.java | 37 +++ .../cucumber/awss3/RabbitMQUploadCucumberTest.java | 37 +++ 13 files changed, 547 insertions(+) diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java new file mode 100644 index 000..0ea2135 --- /dev/null +++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java @@ -0,0 +1,29 @@ +/ + * 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.jmap.rabbitmq.cucumber.awss3; + +import org.apache.james.modules.objectstorage.PayloadCodecFactory; +import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; + +public class CucumberAwsS3Singleton { + +public static DockerAwsS3TestRule awsS3Server = new DockerAwsS3TestRule(); +public static DockerAwsS3TestRule encryptedAwsS3Server = new DockerAwsS3TestRule(PayloadCodecFactory.AES256); +} + diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberCassandraSingleton.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberCassandraSingleton.java new file mode 100644 index 000..a3fcd98 --- /dev/null +++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberCassandraSingleton.java @@ -0,0 +1,27 @@ +/ + * 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 un
[james-project] 10/13: JAMES-2671 SmtpTestRule should be used as as Rule
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 5f9b8b576ddbdb2313fc0d1a9e7f24c82684195e Author: Matthieu Baechler AuthorDate: Thu Mar 21 11:18:09 2019 +0100 JAMES-2671 SmtpTestRule should be used as as Rule --- .../james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java | 14 +- .../mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java | 16 +--- .../james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java | 13 - .../mpt/smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java | 15 --- .../apache/james/mpt/smtp/CassandraForwardSmtpTest.java | 11 --- .../james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java | 12 .../java/org/apache/james/mpt/smtp/SmtpTestRule.java | 12 +++- 7 files changed, 13 insertions(+), 80 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java index 6620839..368e031 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java @@ -22,8 +22,7 @@ package org.apache.james.mpt.smtp; import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.junit.After; -import org.junit.Before; +import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.junit.ClassRule; import org.junit.Rule; @@ -34,20 +33,9 @@ public class AwsS3RabbitMQForwardSmtpTest extends ForwardSmtpTest { @Rule public SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost()); -@Before -@Override -public void setUp() throws Exception { -cassandraRabbitMQAwsS3SmtpTestRule.beforeTest(); -super.setUp(); -} - @Override protected SmtpHostSystem createSmtpHostSystem() { return cassandraRabbitMQAwsS3SmtpTestRule; } -@After -public void tearDown() { -cassandraRabbitMQAwsS3SmtpTestRule.afterTest(); -} } diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java index 8faeed1..882076b 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java @@ -22,8 +22,7 @@ package org.apache.james.mpt.smtp; import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_START_TLS_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.junit.After; -import org.junit.Before; +import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.junit.ClassRule; import org.junit.Rule; @@ -34,22 +33,9 @@ public class AwsS3RabbitMQSmtpStarttlsCommandTest extends SmtpStarttlsCommandTes @Rule public SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_START_TLS_SERVER, cassandraServer.getHost()); -@Before -@Override -public void setUp() throws Exception { -cassandraRabbitMQAwsS3SmtpTestRule.beforeTest(); -super.setUp(); -} - @Override protected SmtpHostSystem createSmtpHostSystem() { return cassandraRabbitMQAwsS3SmtpTestRule; } - -@After -public void tearDown() { -cassandraRabbitMQAwsS3SmtpTestRule.afterTest(); -} - } diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java index 9e9ce21..dce21c6 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java @@ -22,8 +22,6 @@ package org.apache.james.mpt.smtp; import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; import
[james-project] 11/13: JAMES-2671 use TestRules as they are intended to be used
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 16a48774b3d23e924c67fdb0c7df9008530f676d Author: Matthieu Baechler AuthorDate: Thu Mar 21 14:58:58 2019 +0100 JAMES-2671 use TestRules as they are intended to be used --- .../mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java | 9 - .../smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java | 10 +- .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java | 9 ++--- .../james/blob/objectstorage/DockerAwsS3Rule.java | 40 -- .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 22 ++-- .../james/CassandraRabbitMQAwsS3JmapTestRule.java | 7 ++-- .../james/modules/AwsS3BlobStoreExtension.java | 16 - .../james/modules/TestAwsS3BlobStoreModule.java| 4 +-- .../rabbitmq/cucumber/RabbitMQAwsS3Stepdefs.java | 4 +-- 9 files changed, 50 insertions(+), 71 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java index 368e031..eebe8df 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java @@ -25,13 +25,20 @@ import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.junit.ClassRule; import org.junit.Rule; +import org.junit.rules.RuleChain; +import org.junit.rules.TestRule; public class AwsS3RabbitMQForwardSmtpTest extends ForwardSmtpTest { @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); +private DockerAwsS3TestRule dockerAwsS3TestRule = new DockerAwsS3TestRule(); + +private SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = +CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost(), dockerAwsS3TestRule); + @Rule -public SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost()); +public TestRule composedRule = RuleChain.outerRule(dockerAwsS3TestRule).around(cassandraRabbitMQAwsS3SmtpTestRule); @Override protected SmtpHostSystem createSmtpHostSystem() { diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java index 882076b..262c9b3 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java @@ -25,13 +25,21 @@ import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.junit.ClassRule; import org.junit.Rule; +import org.junit.rules.RuleChain; +import org.junit.rules.TestRule; public class AwsS3RabbitMQSmtpStarttlsCommandTest extends SmtpStarttlsCommandTest { @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); + +private DockerAwsS3TestRule dockerAwsS3TestRule = new DockerAwsS3TestRule(); + +private SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = + CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_START_TLS_SERVER, cassandraServer.getHost(), dockerAwsS3TestRule); + @Rule -public SmtpTestRule cassandraRabbitMQAwsS3SmtpTestRule = CassandraRabbitMQAwsS3SmtpTestRuleFactory.create(SMTP_START_TLS_SERVER, cassandraServer.getHost()); +public TestRule composedRule = RuleChain.outerRule(dockerAwsS3TestRule).around(cassandraRabbitMQAwsS3SmtpTestRule); @Override protected SmtpHostSystem createSmtpHostSystem() { diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java index 51ee30f..43c6f25 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java @@ -28,6 +28,7 @@ import
[james-project] 05/13: JAMES-2671 Rename RabbitMQ*Test to SwiftRabbitMQ*Test in cassandra-rabbitmq-object-storage
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 19a3a6293e519fccb9187ca0ee3f23018179b5da Author: Gautier DI FOLCO AuthorDate: Fri Mar 8 15:46:31 2019 +0100 JAMES-2671 Rename RabbitMQ*Test to SwiftRabbitMQ*Test in cassandra-rabbitmq-object-storage --- ...tpTestRule.java => CassandraRabbitMQSwiftSmtpTestRuleFactory.java} | 2 +- ...RabbitMQForwardSmtpTest.java => SwiftRabbitMQForwardSmtpTest.java} | 4 ++-- ...ttlsCommandTest.java => SwiftRabbitMQSmtpStarttlsCommandTest.java} | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java similarity index 98% rename from mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java index 44e840a..8791af0 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRuleFactory.java @@ -37,7 +37,7 @@ import org.apache.james.server.core.configuration.Configuration; import org.apache.james.util.Host; import org.junit.rules.TemporaryFolder; -public final class CassandraRabbitMQSwiftSmtpTestRule { +public final class CassandraRabbitMQSwiftSmtpTestRuleFactory { public static SmtpTestRule create(SmtpServerConnectedType smtpServerConnectedType, Host cassandraHost) { SmtpTestRule.ServerBuilder createJamesServer = (folder, dnsService) -> createJamesServer(cassandraHost, folder, dnsService); diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java similarity index 92% rename from mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java index 74229a6..9e9ce21 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQForwardSmtpTest.java @@ -27,12 +27,12 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; -public class RabbitMQForwardSmtpTest extends ForwardSmtpTest { +public class SwiftRabbitMQForwardSmtpTest extends ForwardSmtpTest { @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); @Rule -public SmtpTestRule cassandraRabbitMQSwiftSmtpTestRule = CassandraRabbitMQSwiftSmtpTestRule.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost()); +public SmtpTestRule cassandraRabbitMQSwiftSmtpTestRule = CassandraRabbitMQSwiftSmtpTestRuleFactory.create(SMTP_GLOBAL_SERVER, cassandraServer.getHost()); @Before @Override diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java similarity index 91% rename from mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java index 6ce89c3..c26a78a 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/SwiftRabbitMQSmtpStarttlsCommandTest.java @@ -27,12 +27,12 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; -public class RabbitMQSmtpStarttlsCommandTest extends SmtpStarttlsCommandTest { +public class SwiftRabbitMQSmtpStarttlsCommandTest extends SmtpStarttlsCommandTest { @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); @Rule -public SmtpTestRule cassandraRabbitMQSwiftSmtpTestRule = CassandraRabbitMQSwiftSmtpTes
[james-project] 09/13: JAMES-2671 Add AwsS3 documentation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit bc3a6ae6b9816e0c0f1bd1d56ea3e3dcdd4e23f2 Author: Gautier DI FOLCO AuthorDate: Tue Mar 12 15:23:24 2019 +0100 JAMES-2671 Add AwsS3 documentation --- .../install/guice-cassandra-rabbitmq-swift.md | 22 +- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md index 331ae6c..46fe890 100644 --- a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md +++ b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md @@ -28,7 +28,8 @@ mvn clean install * Cassandra 3.11.3 * ElasticSearch 2.4.6 * RabbitMQ-Management 3.7.7 - * Swift ObjectStorage 2.15.1 + * Swift ObjectStorage 2.15.1 or Scality S3 server or AWS S3 + ### James Launch To run james, you have to create a directory containing required configuration files. @@ -58,6 +59,25 @@ Once everything is set up, you just have to run the jar with: $ java -Dworking.directory=. -jar target/james-server-cassandra-rabbitmq-guice.jar ``` + Using AWS S3 of Scality S3 server +In order to use AWS S3 or a compatible implementation, `blobstore.propeties` has to be filled with: + +``` +objectstorage.provider=aws-s3 +objectstorage.namespace=james +objectstorage.s3.endPoint=http://scality:8080/ +objectstorage.s3.accessKeyId=accessKey1 +objectstorage.s3.secretKey=verySecretKey1 +``` + +To use Scality S3 server you have to launch it instead of swift container: + +``` +$ docker run -d --port 8080:8000 --name=s3 scality/s3server:6018536a +``` + +More informations about available options [here](https://hub.docker.com/r/scality/s3server). + ## Guice-cassandra-rabbitmq-ldap You can follow the same guide to build and run guice-cassandra-rabbitmq-swift-ldap artifact, except that: - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 04/13: JAMES-2671 Create a generic SmtpTestRule
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 74c9dca0b34879a9ad622d333b3abf2870b4f508 Author: Gautier DI FOLCO AuthorDate: Fri Mar 8 15:14:05 2019 +0100 JAMES-2671 Create a generic SmtpTestRule --- .../smtp/CassandraRabbitMQSwiftSmtpTestRule.java | 123 +++-- .../james/mpt/smtp/RabbitMQForwardSmtpTest.java| 2 +- .../mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java | 2 +- .../james/mpt/smtp/CassandraForwardSmtpTest.java | 2 +- .../mpt/smtp/CassandraSmtpStarttlsCommandTest.java | 2 +- .../mpt/smtp/CassandraSmtpTestRuleFactory.java | 63 +++ mpt/impl/smtp/core/pom.xml | 8 ++ .../org/apache/james/mpt/smtp/SmtpTestRule.java} | 56 +++--- 8 files changed, 104 insertions(+), 154 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java index 850ad68..44e840a 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java @@ -18,8 +18,6 @@ / package org.apache.james.mpt.smtp; -import java.util.Iterator; - import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.james.CassandraJamesServerMain; import org.apache.james.CleanupTasksPerformer; @@ -27,142 +25,51 @@ import org.apache.james.GuiceJamesServer; import org.apache.james.backend.rabbitmq.DockerRabbitMQSingleton; import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; import org.apache.james.dnsservice.api.DNSService; -import org.apache.james.dnsservice.api.InMemoryDNSService; import org.apache.james.modules.TestRabbitMQModule; import org.apache.james.modules.TestSwiftBlobStoreModule; import org.apache.james.modules.blobstore.BlobStoreChoosingModule; -import org.apache.james.modules.protocols.ProtocolHandlerModule; -import org.apache.james.modules.protocols.SMTPServerModule; -import org.apache.james.modules.protocols.SmtpGuiceProbe; import org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType; import org.apache.james.modules.rabbitmq.RabbitMQModule; import org.apache.james.modules.server.CamelMailetContainerModule; -import org.apache.james.mpt.api.Continuation; -import org.apache.james.mpt.api.Session; -import org.apache.james.mpt.monitor.SystemLoggingMonitor; -import org.apache.james.mpt.session.ExternalSessionFactory; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory; import org.apache.james.server.core.configuration.Configuration; import org.apache.james.util.Host; -import org.apache.james.util.Port; -import org.apache.james.utils.DataProbeImpl; import org.junit.rules.TemporaryFolder; -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import com.google.common.base.Preconditions; -import com.google.common.base.Splitter; -import com.google.inject.Module; -import com.google.inject.util.Modules; - -public class CassandraRabbitMQSwiftSmtpTestRule implements TestRule, SmtpHostSystem { - -private static final Module SMTP_PROTOCOL_MODULE = Modules.combine( -new ProtocolHandlerModule(), -new SMTPServerModule()); - -private final Host cassandraHost; -private final SmtpServerConnectedType smtpServerConnectedType; - -private TemporaryFolder folder; -private GuiceJamesServer jamesServer; -private InMemoryDNSService inMemoryDNSService; -private ExternalSessionFactory sessionFactory; - -public CassandraRabbitMQSwiftSmtpTestRule(SmtpServerConnectedType smtpServerConnectedType, Host cassandraHost) { -this.smtpServerConnectedType = smtpServerConnectedType; -this.cassandraHost = cassandraHost; -} - -@Override -public Statement apply(Statement base, Description description) { -return base; -} - -@Override -public boolean addUser(String userAtDomain, String password) throws Exception { -Preconditions.checkArgument(userAtDomain.contains("@"), "The 'user' should contain the 'domain'"); -Iterator split = Splitter.on("@").split(userAtDomain).iterator(); -split.next(); -String domain = split.next(); - -createDomainIfNeeded(domain); -jamesServer.getProbe(DataProbeImpl.class).addUser(userAtDomain, password); -return true; -
[james-project] 07/13: JAMES-2671 Add AwsS3 Extension
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit ec4717b1e730948b7a8e249097add21e2dbadc1c Author: Gautier DI FOLCO AuthorDate: Tue Mar 12 11:22:18 2019 +0100 JAMES-2671 Add AwsS3 Extension --- .../james/CassandraRabbitMQJamesServerTest.java| 41 ++- .../james/modules/AwsS3BlobStoreExtension.java | 59 ++ 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerTest.java index ae2a724..d683171 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerTest.java @@ -27,10 +27,12 @@ import org.apache.james.blob.objectstorage.AESPayloadCodec; import org.apache.james.blob.objectstorage.DefaultPayloadCodec; import org.apache.james.blob.objectstorage.PayloadCodec; import org.apache.james.core.Domain; +import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.SwiftBlobStoreExtension; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.objectstorage.PayloadCodecFactory; +import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; import org.apache.james.modules.protocols.ImapGuiceProbe; import org.apache.james.modules.protocols.SmtpGuiceProbe; @@ -130,11 +132,48 @@ class CassandraRabbitMQJamesServerTest { @Nested @TestInstance(Lifecycle.PER_METHOD) -class WithoutSwift implements ContractSuite { +class WithoutSwiftOrAwsS3 implements ContractSuite { @RegisterExtension JamesServerExtension testExtension = baseExtensionBuilder().build(); } +@Nested +@TestInstance(Lifecycle.PER_METHOD) +class WithEncryptedAwsS3 implements ContractSuite { +@RegisterExtension +JamesServerExtension testExtension = baseExtensionBuilder() +.extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256)) +.server(CONFIGURATION_BUILDER) +.build(); + +@Test +void encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer jamesServer) { +PayloadCodec payloadCodec = jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class) +.getAwsS3PayloadCodec(); + +assertThat(payloadCodec) +.isInstanceOf(AESPayloadCodec.class); +} +} + +@Nested +@TestInstance(Lifecycle.PER_METHOD) +class WithDefaultAwsS3 implements ContractSuite { +@RegisterExtension +JamesServerExtension testExtension = baseExtensionBuilder() +.extension(new AwsS3BlobStoreExtension()) +.build(); + +@Test +void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) { +PayloadCodec payloadCodec = jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class) +.getAwsS3PayloadCodec(); + +assertThat(payloadCodec) +.isInstanceOf(DefaultPayloadCodec.class); +} +} + private static JamesServerBuilder baseExtensionBuilder() { return new JamesServerBuilder() .extension(new EmbeddedElasticSearchExtension()) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java new file mode 100644 index 000..44cda7c --- /dev/null +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java @@ -0,0 +1,59 @@ +/ + * 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 * + * *
[james-project] 12/13: JAMES-2671 Move cucumber tests in rabbitmq-jmap-integration-testing to cucumber.swift
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit a6127a33279a01fa5fdc18363a8be2d3562de86d Author: Gautier DI FOLCO AuthorDate: Thu Mar 28 10:43:06 2019 +0100 JAMES-2671 Move cucumber tests in rabbitmq-jmap-integration-testing to cucumber.swift --- .../rabbitmq/cucumber/CucumberAwsS3Singleton.java | 29 - .../rabbitmq/cucumber/RabbitMQAwsS3Stepdefs.java | 122 - .../{ => swift}/CucumberCassandraSingleton.java| 2 +- .../{ => swift}/CucumberRabbitMQSingleton.java | 2 +- .../{ => swift}/CucumberSwiftSingleton.java| 2 +- .../{ => swift}/RabbitMQDownloadCucumberTest.java | 4 +- .../{ => swift}/RabbitMQGetMessagesMethodTest.java | 4 +- .../RabbitMQIMAPKeywordsInconsistenciesTest.java | 4 +- .../RabbitMQIMAPSetMessagesCompatibilityTest.java | 4 +- .../{ => swift}/RabbitMQMailboxSharingTest.java| 4 +- .../{ => swift}/RabbitMQMessageSharingTest.java| 4 +- .../RabbitMQSetMailboxesMethodCucumberTest.java| 4 +- .../RabbitMQSetMessagesMethodCucumberTest.java | 4 +- .../{ => swift}/RabbitMQSwiftStepdefs.java | 2 +- .../{ => swift}/RabbitMQUploadCucumberTest.java| 4 +- 15 files changed, 22 insertions(+), 173 deletions(-) diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/CucumberAwsS3Singleton.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/CucumberAwsS3Singleton.java deleted file mode 100644 index 6f06cc1..000 --- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/CucumberAwsS3Singleton.java +++ /dev/null @@ -1,29 +0,0 @@ -/ - * 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.jmap.rabbitmq.cucumber; - -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; - -public class CucumberAwsS3Singleton { - -public static DockerAwsS3TestRule swiftServer = new DockerAwsS3TestRule(); -public static DockerAwsS3TestRule encryptedAwsS3Server = new DockerAwsS3TestRule(PayloadCodecFactory.AES256); -} - diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/RabbitMQAwsS3Stepdefs.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/RabbitMQAwsS3Stepdefs.java deleted file mode 100644 index 8a19262..000 --- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/RabbitMQAwsS3Stepdefs.java +++ /dev/null @@ -1,122 +0,0 @@ -/ - * 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 * - * * - *
[james-project] branch master updated (adb9c95 -> 271a9ca)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git. from adb9c95 Merge remote-tracking branch 'remk/JAMES-2681' new 123e6da JAMES-2671 Move SmtpServerConnectedType to SmtpGuiceProbe new 4a23f8a JAMES-2671 Use Port in SmtpGuiceProbe new 0f2ba9d JAMES-2671 Rename cassandra-rabbitmq-swift to cassandra-rabbitmq-object-storage new 74c9dca JAMES-2671 Create a generic SmtpTestRule new 19a3a62 JAMES-2671 Rename RabbitMQ*Test to SwiftRabbitMQ*Test in cassandra-rabbitmq-object-storage new 22d2851 JAMES-2671 Add AwsS3 Test Rule new ec4717b JAMES-2671 Add AwsS3 Extension new 2f93270 JAMES-2671 Add AwsS3 integration tests new bc3a6ae JAMES-2671 Add AwsS3 documentation new 5f9b8b5 JAMES-2671 SmtpTestRule should be used as as Rule new 16a4877 JAMES-2671 use TestRules as they are intended to be used new a6127a3 JAMES-2671 Move cucumber tests in rabbitmq-jmap-integration-testing to cucumber.swift new 271a9ca JAMES-2671 Add AWS S3 Cucumber tests in rabbitmq-jmap-integration-testing The 13 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../pom.xml| 17 +- .../mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java}| 31 ++-- .../AwsS3RabbitMQSmtpStarttlsCommandTest.java} | 32 ++-- .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java | 76 + .../CassandraRabbitMQSwiftSmtpTestRuleFactory.java | 75 + .../mpt/smtp/SwiftRabbitMQForwardSmtpTest.java}| 19 +-- .../SwiftRabbitMQSmtpStarttlsCommandTest.java} | 21 +-- .../src/test/resources/dnsservice.xml | 0 .../src/test/resources/domainlist.xml | 0 .../src/test/resources/keystore| Bin .../src/test/resources/mailetcontainer.xml | 0 .../src/test/resources/mailrepositorystore.xml | 0 .../src/test/resources/recipientrewritetable.xml | 0 .../src/test/resources/smtpserver.xml | 0 .../smtp/CassandraRabbitMQSwiftSmtpTestRule.java | 183 - .../james/mpt/smtp/CassandraForwardSmtpTest.java | 15 +- .../mpt/smtp/CassandraSmtpStarttlsCommandTest.java | 16 +- .../mpt/smtp/CassandraSmtpTestRuleFactory.java | 63 +++ mpt/impl/smtp/core/pom.xml | 8 + .../org/apache/james/mpt/smtp/SmtpTestRule.java} | 91 -- mpt/impl/smtp/pom.xml | 2 +- .../james/blob/objectstorage/DockerAwsS3.java} | 16 +- .../blob/objectstorage/DockerAwsS3Singleton.java} | 15 +- .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java | 4 +- .../objectstorage/aws/DockerAwsS3Container.java| 22 ++- .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 139 .../james/CassandraRabbitMQAwsS3JmapTestRule.java | 100 +++ .../james/CassandraRabbitMQJamesServerTest.java| 41 - .../james/modules/AwsS3BlobStoreExtension.java | 59 +++ .../james/modules/TestAwsS3BlobStoreModule.java} | 38 ++--- .../CassandraRabbitMQLdapJmapJamesServerTest.java | 13 +- .../java/org/apache/james/JamesServerContract.java | 2 +- .../java/org/apache/james/JPAJamesServerTest.java | 2 +- .../java/org/apache/james/JPAJamesServerTest.java | 2 +- .../james/modules/protocols/SmtpGuiceProbe.java| 26 ++- .../cucumber/CucumberAwsS3Singleton.java} | 11 +- .../james/jmap/VacationRelayIntegrationTest.java | 2 +- .../methods/integration/SetMessagesMethodTest.java | 2 +- .../rabbitmq-jmap-integration-testing/pom.xml | 20 +-- ...ilterTest.java => RabbitMQAwsS3FilterTest.java} | 9 +- ...va => RabbitMQAwsS3ForwardIntegrationTest.java} | 11 +- ...va => RabbitMQAwsS3GetMailboxesMethodTest.java} | 11 +- ... => RabbitMQAwsS3GetMessageListMethodTest.java} | 7 +- ...a => RabbitMQAwsS3GetVacationResponseTest.java} | 11 +- ...va => RabbitMQAwsS3JmapAuthenticationTest.java} | 11 +- ...est.java => RabbitMQAwsS3ProvisioningTest.java} | 7 +- ...est.java => RabbitMQAwsS3QuotaMailingTest.java} | 7 +- ...st.java => RabbitMQAwsS3SendMDNMethodTest.java} | 25 +-- ...va => RabbitMQAwsS3SetMailboxesMethodTest.java} | 9 +- ...ava => RabbitMQAwsS3SetMessagesMethodTest.java} | 9 +- ...a => RabbitMQAwsS3SetVacationResponseTest.java} | 11 +- ... => RabbitMQAwsS3SpamAssassinContractTest.java} | 7 +- ...a => RabbitMQAwsS3VacationIntegrationTest.java} | 11 +- ...RabbitMQAwsS3VacationRelayIntegrationTest.java} | 7 +- ...ilterTest.java => RabbitMQSwiftFilterTest.java} | 2 +- ...va => RabbitMQSwiftForwardIntegrationTest.java
[james-project] 02/13: JAMES-2671 Use Port in SmtpGuiceProbe
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 4a23f8aa32864baa00e164f0b2a3d12e12a57acb Author: Gautier DI FOLCO AuthorDate: Fri Mar 8 14:29:51 2019 +0100 JAMES-2671 Use Port in SmtpGuiceProbe --- .../org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java | 2 +- .../james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java| 2 +- .../src/test/java/org/apache/james/JamesServerContract.java | 2 +- .../src/test/java/org/apache/james/JPAJamesServerTest.java | 2 +- .../src/test/java/org/apache/james/JPAJamesServerTest.java | 2 +- .../org/apache/james/modules/protocols/SmtpGuiceProbe.java | 13 +++-- .../org/apache/james/jmap/VacationRelayIntegrationTest.java | 2 +- .../jmap/methods/integration/SetMessagesMethodTest.java | 2 +- .../main/java/org/apache/james/utils/SMTPMessageSender.java | 9 + 9 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java index 331a65b..3a7b330 100644 --- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java @@ -19,7 +19,7 @@ package org.apache.james.mpt.smtp; -import static org.apache.james.mpt.smtp.CassandraSmtpTestRule.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; +import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.junit.After; diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java index 245fa1b..10eca13 100644 --- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java +++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java @@ -19,7 +19,7 @@ package org.apache.james.mpt.smtp; -import static org.apache.james.mpt.smtp.CassandraSmtpTestRule.SmtpServerConnectedType.SMTP_START_TLS_SERVER; +import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_START_TLS_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.junit.After; diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java index 0b48b10..1c4fa2c 100644 --- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java +++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java @@ -89,7 +89,7 @@ public interface JamesServerContract { @Test default void connectSMTPServerShouldSendShabangOnConnect(GuiceJamesServer jamesServer) throws Exception { try (SocketChannel socketChannel = SocketChannel.open()) { -socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())); +socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort().getValue())); assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server"); } } diff --git a/server/container/guice/jpa-smtp-mariadb/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-smtp-mariadb/src/test/java/org/apache/james/JPAJamesServerTest.java index b344ba5..6089ee7 100644 --- a/server/container/guice/jpa-smtp-mariadb/src/test/java/org/apache/james/JPAJamesServerTest.java +++ b/server/container/guice/jpa-smtp-mariadb/src/test/java/org/apache/james/JPAJamesServerTest.java @@ -77,7 +77,7 @@ public class JPAJamesServerTest { @Test public void connectSMTPServerShouldSendShabangOnConnect() throws Exception { -socketChannel.connect(new InetSocketAddress("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort())); +socketChannel.connect(new InetSocketAddress("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort().getValue())); assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server"); } diff --git a/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServe
[james-project] 03/13: JAMES-2671 Rename cassandra-rabbitmq-swift to cassandra-rabbitmq-object-storage
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 0f2ba9d7be81f8cc9f54223fad2aaf812dafec63 Author: Gautier DI FOLCO AuthorDate: Fri Mar 8 14:35:23 2019 +0100 JAMES-2671 Rename cassandra-rabbitmq-swift to cassandra-rabbitmq-object-storage --- .../pom.xml | 4 ++-- .../james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java | 0 .../org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java | 0 .../james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java | 0 .../src/test/resources/dnsservice.xml | 0 .../src/test/resources/domainlist.xml | 0 .../src/test/resources/keystore | Bin .../src/test/resources/mailetcontainer.xml | 0 .../src/test/resources/mailrepositorystore.xml | 0 .../src/test/resources/recipientrewritetable.xml| 0 .../src/test/resources/smtpserver.xml | 0 mpt/impl/smtp/pom.xml | 2 +- 12 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/pom.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml similarity index 96% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/pom.xml rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml index 566fee2..0b7d7ef 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-swift/pom.xml +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml @@ -25,10 +25,10 @@ 3.4.0-SNAPSHOT -apache-james-mpt-smtp-cassandra-rabbitmq-swift + apache-james-mpt-smtp-cassandra-rabbitmq-object-storage jar -Apache James MPT SMTP Cassandra RabbitMQ Swift +Apache James MPT SMTP Cassandra RabbitMQ Object Storage diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/dnsservice.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/dnsservice.xml similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/dnsservice.xml rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/dnsservice.xml diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/domainlist.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/domainlist.xml similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/domainlist.xml rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/domainlist.xml diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/keystore b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/keystore similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/keystore rename to mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/keystore diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/mailetcontainer.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/mailetcontainer.xml similarity index 100% rename from mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/resources/mailetcontainer.xml rename to mpt/impl/smtp
[james-project] 01/13: JAMES-2671 Move SmtpServerConnectedType to SmtpGuiceProbe
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git commit 123e6da5f139650f524e8f755cb0c390d7748723 Author: Gautier DI FOLCO AuthorDate: Fri Mar 8 11:47:08 2019 +0100 JAMES-2671 Move SmtpServerConnectedType to SmtpGuiceProbe --- .../mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java| 17 + .../apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java | 2 +- .../james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java | 2 +- .../apache/james/mpt/smtp/CassandraSmtpTestRule.java| 17 + .../apache/james/modules/protocols/SmtpGuiceProbe.java | 17 + 5 files changed, 21 insertions(+), 34 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java index 2f6c3a2..850ad68 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQSwiftSmtpTestRule.java @@ -19,7 +19,6 @@ package org.apache.james.mpt.smtp; import java.util.Iterator; -import java.util.function.Function; import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.james.CassandraJamesServerMain; @@ -35,6 +34,7 @@ import org.apache.james.modules.blobstore.BlobStoreChoosingModule; import org.apache.james.modules.protocols.ProtocolHandlerModule; import org.apache.james.modules.protocols.SMTPServerModule; import org.apache.james.modules.protocols.SmtpGuiceProbe; +import org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType; import org.apache.james.modules.rabbitmq.RabbitMQModule; import org.apache.james.modules.server.CamelMailetContainerModule; import org.apache.james.mpt.api.Continuation; @@ -59,21 +59,6 @@ import com.google.inject.util.Modules; public class CassandraRabbitMQSwiftSmtpTestRule implements TestRule, SmtpHostSystem { -enum SmtpServerConnectedType { -SMTP_GLOBAL_SERVER(probe -> Port.of(probe.getSmtpPort())), -SMTP_START_TLS_SERVER(probe -> Port.of(probe.getSmtpsPort())); - -private final Function portExtractor; - -SmtpServerConnectedType(Function portExtractor) { -this.portExtractor = portExtractor; -} - -public Function getPortExtractor() { -return portExtractor; -} -} - private static final Module SMTP_PROTOCOL_MODULE = Modules.combine( new ProtocolHandlerModule(), new SMTPServerModule()); diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java index 6461a7c..17eb90e 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQForwardSmtpTest.java @@ -19,7 +19,7 @@ package org.apache.james.mpt.smtp; -import static org.apache.james.mpt.smtp.CassandraRabbitMQSwiftSmtpTestRule.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; +import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_GLOBAL_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.junit.After; diff --git a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java index 52433da..34329e1 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-swift/src/test/java/org/apache/james/mpt/smtp/RabbitMQSmtpStarttlsCommandTest.java @@ -19,7 +19,7 @@ package org.apache.james.mpt.smtp; -import static org.apache.james.mpt.smtp.CassandraRabbitMQSwiftSmtpTestRule.SmtpServerConnectedType.SMTP_START_TLS_SERVER; +import static org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType.SMTP_START_TLS_SERVER; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.junit.After; diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRule.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRule.java index 6ec1107..25119e7 100644 --- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRule.java +++ b/mpt/impl/smtp/cassandra/sr
[james-project] 02/02: JAMES-2699 Add documentation for Mailet API deprecation
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch 3.3.x in repository https://gitbox.apache.org/repos/asf/james-project.git commit 8d69a8305680e8aedaa8984603523223afa7b653 Author: Gautier DI FOLCO AuthorDate: Mon Mar 25 13:27:13 2019 +0100 JAMES-2699 Add documentation for Mailet API deprecation --- mailet/api/src/main/java/org/apache/mailet/Mail.java | 8 upgrade-instructions.md | 18 ++ 2 files changed, 26 insertions(+) diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java b/mailet/api/src/main/java/org/apache/mailet/Mail.java index 34b4e19..fc4d757 100644 --- a/mailet/api/src/main/java/org/apache/mailet/Mail.java +++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java @@ -87,9 +87,17 @@ public interface Mail extends Serializable, Cloneable { AttributeName SMTP_AUTH_USER = AttributeName.of("org.apache.james.SMTPAuthUser"); AttributeName MAILET_ERROR = AttributeName.of("org.apache.james.MailetError"); +/** + * Attribute name used for keeping the AUTH_USER of SMTP + * @deprecated @see {@link #SMTP_AUTH_USER} + */ @Deprecated String SMTP_AUTH_USER_ATTRIBUTE_NAME = SMTP_AUTH_USER.asString(); +/** + * Attribute name used for mailet-associated errors + * @deprecated @see {@link #MAILET_ERROR} + */ @Deprecated String MAILET_ERROR_ATTRIBUTE_NAME = MAILET_ERROR.asString(); diff --git a/upgrade-instructions.md b/upgrade-instructions.md index 12b2a9b..228848e 100644 --- a/upgrade-instructions.md +++ b/upgrade-instructions.md @@ -17,6 +17,7 @@ Change list: - [Changes to the MailboxListener API](#changes-to-the-mailboxlistener-api) - [Changes in WebAdmin reIndexing API](#changes-in-webadmin-reindexing-api) - [Rename KEY column in JAMES_MAILBOX_ANNOTATION table](#james-mailbox-annotation) + - [Mailet API changes](#mailet-api-changes) ### Changes to the MailboxListener API @@ -85,6 +86,23 @@ ALTER TABLE JAMES_MAILBOX_ANNOTATION CHANGE COLUMN KEY ANNOTATION_KEY varchar(20 _or the syntax corresponding to your database._ +### Mailet API changes +In order to allow safe serialization and strong typing `org.apache.mailet.Mail` have changed. + +These methods have been deprecated and replaced: + + * `getSender()` in favor of `getMaybeSender()` + * `getAttribute(String)` in favor of `getAttribute(AttributeName)` + * `setAttribute(String, Serializable)` in favor of `setAttribute(Attribute)` + * `removeAttribute(String)` in favor of `removeAttribute(AttributeName)` + * `getAttributeNames()` in favor of `attributeNames()` and `attributesMap()` + +Some plain-string `AttributeName` have also been replaced: + + * `SMTP_AUTH_USER_ATTRIBUTE_NAME` in favor of `SMTP_AUTH_USER` + * `MAILET_ERROR_ATTRIBUTE_NAME` in favor of `MAILET_ERROR` + * `SENT_BY_MAILET` in favor of `SENT_BY_MAILET_ATTRIBUTE`'s name, it is recommended to directly set the `Attribute`. + ## 3.2.0 version Changes to apply between 3.1.0 and 3.2.0 had been reported here. - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] branch 3.3.x updated (2806059 -> 8d69a83)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch 3.3.x in repository https://gitbox.apache.org/repos/asf/james-project.git. from 2806059 Merge remote-tracking branch 'mine/JAMES-2675-3.3' into 3.3.x new 2ed1924 JAMES-2699 Set 3.3.0 title in upgrade instructions new 8d69a83 JAMES-2699 Add documentation for Mailet API deprecation The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../api/src/main/java/org/apache/mailet/Mail.java | 8 upgrade-instructions.md| 24 ++ 2 files changed, 28 insertions(+), 4 deletions(-) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-project] 01/02: JAMES-2699 Set 3.3.0 title in upgrade instructions
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch 3.3.x in repository https://gitbox.apache.org/repos/asf/james-project.git commit 2ed1924dcb25e4c10862f13781cc55f9c0dea085 Author: Gautier DI FOLCO AuthorDate: Mon Mar 25 15:09:49 2019 +0100 JAMES-2699 Set 3.3.0 title in upgrade instructions --- upgrade-instructions.md | 6 ++ 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/upgrade-instructions.md b/upgrade-instructions.md index a494d53..12b2a9b 100644 --- a/upgrade-instructions.md +++ b/upgrade-instructions.md @@ -8,11 +8,9 @@ responsible for any damages generated by following the below procedures. Before performing these operations, you should ensure to have the skills to conduct the operations, and you should read other software documentation. Do not follow this guide blindly! -## Unreleased +## 3.3.0 version -Note: this section is in progress. It will be updated during all the development process until the release. - -Changes to apply between 3.2.x and 3.3.x will be reported here. +Changes to apply between 3.2.0 and 3.3.0 will be reported here. Change list: - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-site] branch asf-site updated (ba5f88c -> 5105841)
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a change to branch asf-site in repository https://gitbox.apache.org/repos/asf/james-site.git. from ba5f88c Trigger sync new 8c76faf Adding posts about 3.3.0 release new 5105841 Upate website for 3.3.0 The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: content/download.html | 106 ++--- content/feed.xml | 89 - content/index.html | 9 +- .../03/26/james-3.3.0.html}| 58 +++ content/mailet/quickstart.html | 2 +- content/posts.html | 9 ++ content/server/config-mailrepositorystore.html | 13 --- content/server/index.html | 8 +- content/server/install.html| 10 +- content/server/install/guice-jpa-smtp.html | 2 +- content/server/install/guice-jpa.html | 2 +- content/server/quick-start.html| 8 +- 12 files changed, 186 insertions(+), 130 deletions(-) copy content/james/update/{2018/07/31/james-3.1.0.html => 2019/03/26/james-3.3.0.html} (73%) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[james-site] 01/02: Adding posts about 3.3.0 release
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/james-site.git commit 8c76fafc55ec69adbd8c98a678e9481093891d12 Author: Antoine Duprat AuthorDate: Wed Mar 27 11:04:53 2019 +0100 Adding posts about 3.3.0 release --- content/feed.xml | 89 +--- content/index.html | 9 +- content/james/update/2019/03/26/james-3.3.0.html | 170 +++ content/posts.html | 9 ++ 4 files changed, 250 insertions(+), 27 deletions(-) diff --git a/content/feed.xml b/content/feed.xml index 67056fa..fbbc38c 100644 --- a/content/feed.xml +++ b/content/feed.xml @@ -24,9 +24,73 @@ http://james.apache.org/ http://james.apache.org/feed.xml; rel="self" type="application/rss+xml"/> -Fri, 22 Mar 2019 14:27:42 +0700 -Fri, 22 Mar 2019 14:27:42 +0700 -Jekyll v3.4.3 +Wed, 27 Mar 2019 09:55:49 + +Wed, 27 Mar 2019 09:55:49 + +Jekyll v3.8.5 + + +Apache James Server 3.3.0 +pThe Apache James developers are pleased to announce James server 3.3.0 release./p + +pHere are some points we worked on:/p + +h3 id=addedAdded/h3 + +ul + liMetrics for BlobStore/li + liNew Guice product using Cassandra RabbitMQ ElasticSearch, OpenStack Swift and optional LDAP dependency (experimental)/li + liJPA SMTP dockerFile contributed by a href=https://github.com/matzepanmatzepan/a/li; + liListing healthchecks, thanks to a href=https://github.com/kratostaineMadhu Bhat/a/li + liConfiguring the ElasticSearch clusterName/li + liLogging and Metrics now supports Elasticsearch 6 (previously only Elasticsearch 2 was supported)/li + liImplementation of the RabbitMQ EventBus/li + liDeadLetter APIs and memory implementation for storing events that failed delivery/li + liRecipientRewriteTable Aliases and associated WebAdmin routes/li +/ul + +h3 id=fixedFixed/h3 + +ul + liMAILBOX-350 Potential invalid UID lt;-gt; MSN mapping upon IMAP COPY/li + liPossibility to better zoom in Grafana boards/li + lidefault ElasticSearch shards amp; replica configured values/li + liMove amp; copy batch sizes are now loaded from configuration/li +/ul + +h3 id=changedChanged/h3 + +ul + liWebAdmin ReIndexing API had been reworked/li + liMailboxListener and mailbox event system were reworked. Custom listeners will need to be adapted. Please see Upgrade instuctions./li + liDocker images are now using a JRE instead of a JDK/li + liReplacement of the old mailbox event system with the EventBus/li +/ul + +h3 id=removedRemoved/h3 + +ul + liDrop HBase and JCR components (mailbox and server/data)./li +/ul + +h3 id=third-party-softwaresThird party softwares/h3 + +ul + liTika prior 1.20 is subject to multiple CVEs. We recommend the upgrade/li +/ul + +pEarly adopters can a href=http://james.apache.org/download.cgi#Apache_James_Serverdownload it/a, any issue can be reported on our issue a href=https://issues.apache.org/jira/browse/JAMEStracker/a./p; + + +Tue, 26 Mar 2019 08:09:47 + + http://james.apache.org/james/update/2019/03/26/james-3.3.0.html +http://james.apache.org/james/update/2019/03/26/james-3.3.0.html + + +james + +update + + Apache James Mime4J 0.8.3 @@ -439,24 +503,5 @@ only be used for privilege escalation./p - -Blog post: Easy and secure James installation -pIn a recent a href=https://medium.com/@thibaut.sautereau/installing-james-3-0-with-spf-verification-421b26b92f11blog post/a, a href=https://github.com/thithibThibaut/a; explains us how to easily set up a James server on a personal domain./p - -pHe gives hints about DNS configuration, SSL configuration, James configuration, and SPF configuration. All those -features explained with working examples!/p - - -Tue, 03 Oct 2017 21:13:22 +0700 - http://james.apache.org/james/update/2017/10/03/BlogPostInstallingJames.html -http://james.apache.org/james/update/2017/10/03/BlogPostInstallingJames.html - - -james - -update - - - diff --git a/content/index.html b/content/index.html index 586fdc0..6d292c9 100644 --- a/content/index.html +++ b/content/index.html @@ -1,5 +1,4 @@ + + + + +Apache James + + + + + + + + + + + + + +https://www.apache.org; alt="apache foundation link">https://www.apache.org/foundation/press/kit/asf_logo.svg; title="apache foundation logo"/> + + +https://www.apache.org; alt="apache foundation link">The Apache Software Foundation + + + + +James Enterpri
[james-site] 02/02: Upate website for 3.3.0
This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/james-site.git commit 5105841dc3863b6e094dd6c519c8d1c013f19ca5 Author: Antoine Duprat AuthorDate: Wed Mar 27 11:37:55 2019 +0100 Upate website for 3.3.0 --- content/download.html | 106 - content/mailet/quickstart.html | 2 +- content/server/config-mailrepositorystore.html | 13 --- content/server/index.html | 8 +- content/server/install.html| 10 +-- content/server/install/guice-jpa-smtp.html | 2 +- content/server/install/guice-jpa.html | 2 +- content/server/quick-start.html| 8 +- 8 files changed, 69 insertions(+), 82 deletions(-) diff --git a/content/download.html b/content/download.html index 6713e8d..bdb75cb 100644 --- a/content/download.html +++ b/content/download.html @@ -368,7 +368,7 @@ is found https://www.apache.org/licenses/exports/; -Apache James 3.2.0 is the stable version +Apache James 3.3.0 is the stable version @@ -397,29 +397,29 @@ is found https://www.apache.org/licenses/exports/; Source code (ZIP Format): - https://www.apache.org/dyn/closer.lua/james/server/3.2.0/james-server-sources-3.2.0.zip;>apache-james-3.2.0-app.zip - [https://apache.org/dist/james/server/3.2.0/james-server-sources-3.2.0.zip.sha1;>SHA-1] - [https://apache.org/dist/james/server/3.2.0/james-server-sources-3.2.0.zip.asc;>PGP] + https://www.apache.org/dyn/closer.lua/james/server/3.3.0/james-server-sources-3.3.0.zip;>apache-james-3.3.0-app.zip + [https://apache.org/dist/james/server/3.3.0/james-server-sources-3.3.0.zip.sha1;>SHA-1] + [https://apache.org/dist/james/server/3.3.0/james-server-sources-3.3.0.zip.asc;>PGP] Binary (ZIP Format) for Spring wiring: - https://www.apache.org/dyn/closer.lua/james/server/3.2.0/james-server-app-3.2.0-app.zip;>apache-james-3.2.0-app.zip - [https://apache.org/dist/james/server/3.2.0/james-server-app-3.2.0-app.zip.sha1;>SHA-1] - [https://apache.org/dist/james/server/3.2.0/james-server-app-3.2.0-app.zip.asc;>PGP] + https://www.apache.org/dyn/closer.lua/james/server/3.3.0/james-server-app-3.3.0-app.zip;>apache-james-3.3.0-app.zip + [https://apache.org/dist/james/server/3.3.0/james-server-app-3.3.0-app.zip.sha1;>SHA-1] + [https://apache.org/dist/james/server/3.3.0/james-server-app-3.3.0-app.zip.asc;>PGP] Binary (ZIP Format) for JPA guice wiring: - https://www.apache.org/dyn/closer.lua/james/server/3.2.0/james-jpa-guice-3.2.0.zip;>james-jpa-guice-3.2.0.zip - [https://apache.org/dist/james/server/3.2.0/james-jpa-guice-3.2.0.zip.sha1;>SHA-1] - [https://apache.org/dist/james/server/3.2.0/james-jpa-guice-3.2.0.zip.asc;>PGP] + https://www.apache.org/dyn/closer.lua/james/server/3.3.0/james-jpa-guice-3.3.0.zip;>james-jpa-guice-3.3.0.zip + [https://apache.org/dist/james/server/3.3.0/james-jpa-guice-3.3.0.zip.sha1;>SHA-1] + [https://apache.org/dist/james/server/3.3.0/james-jpa-guice-3.3.0.zip.asc;>PGP] Binary (ZIP Format) for JPA SMTP guice wiring: - https://www.apache.org/dyn/closer.lua/james/server/3.2.0/james-jpa-smtp-guice-3.2.0.zip;>james-jpa-smtp-guice-3.2.0.zip - [https://apache.org/dist/james/server/3.2.0/james-jpa-smtp-guice-3.2.0.zip.sha1;>SHA-1] - [https://apache.org/dist/james/server/3.2.0/james-jpa-smtp-guice-3.2.0.zip.asc;>PGP] + https://www.apache.org/dyn/closer.lua/james/server/3.3.0/james-jpa-smtp-guice-3.3.0.zip;>james-jpa-smtp-guice-3.3.0.zip + [https://apache.org/dist/james/server/3.3.0/james-jpa-smtp-guice-3.3.0.zip.sha1;>SHA-1] + [https://apache.org/dist/james/server/3.3.0/james-jpa-smtp-guice-3.3.0.zip.asc;>PGP] @@ -724,14 +724,14 @@ is found https://www.apache.org/licenses/exports/; Apache Mailet -Apache Mailet 3.2.0 is the latest stable version. +Apache Mailet 3.3.0 is the latest stable version. Sources: - https://www.apache.org/dyn/closer.lua/james/mailets/3.2.0/apache-mailet-api-3.2.0-sources.zip;>(Jar) - [https://apache.org/dist/james/mailets/3.2.0/apache-mailet-api-3.2.0-sources.zip.sha1;>SHA-1] - [https://apache.org/dist/james/mailets/3.2.0/apache-mailet-api-3.2.0-sources.zip.asc;>PGP] + https://www.apache.org/dyn/closer.lua/james/mailets/3.3.0/apache-mailet-api-3.3.0-sources.zip;>(Jar) + [https://apache.org/dist/james/mailets/3.3.0/apache-mailet-api-3.3.0-sources.zip.sha1;>SHA-1] + [https://apache.org/dist/james/mailets/3.3.0/apache-mailet-api-3.3.0-sources.zip.asc;>PGP]