[james-project] 09/15: JAMES-2817 Rename subscribeWorkQueue to consumeWorkQueue and subscribe in start()

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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'

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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'

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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)

2019-07-04 Thread aduprat
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'

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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)

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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)

2019-07-04 Thread aduprat
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'

2019-07-04 Thread aduprat
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'

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-07-04 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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'

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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)

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-19 Thread aduprat
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

2019-04-18 Thread aduprat
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)

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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)

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-18 Thread aduprat
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

2019-04-17 Thread aduprat
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

2019-04-17 Thread aduprat
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)

2019-04-17 Thread aduprat
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

2019-04-17 Thread aduprat
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

2019-04-17 Thread aduprat
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

2019-04-15 Thread aduprat
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

2019-04-15 Thread aduprat
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

2019-04-15 Thread aduprat
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

2019-04-15 Thread aduprat
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)

2019-04-15 Thread aduprat
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

2019-04-15 Thread aduprat
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

2019-04-10 Thread aduprat
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

2019-04-10 Thread aduprat
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'

2019-04-10 Thread aduprat
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)

2019-04-10 Thread aduprat
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

2019-04-10 Thread aduprat
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

2019-04-08 Thread aduprat
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

2019-04-05 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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)

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-02 Thread aduprat
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

2019-04-01 Thread aduprat
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)

2019-04-01 Thread aduprat
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

2019-04-01 Thread aduprat
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)

2019-03-27 Thread aduprat
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

2019-03-27 Thread aduprat
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

2019-03-27 Thread aduprat
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]
 
 
  

  1   2   3   4   5   6   7   8   9   10   >