You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2018/08/28 12:12:18 UTC

[01/13] james-project git commit: JAMES-2074 remove thread-weaver by ConcurrentTestRunner

Repository: james-project
Updated Branches:
  refs/heads/master 1a5f21ad6 -> 2dbdc83a2


JAMES-2074 remove thread-weaver by ConcurrentTestRunner


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/088bdd58
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/088bdd58
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/088bdd58

Branch: refs/heads/master
Commit: 088bdd58d8bff6281fd66d9afd67fe1e0092897d
Parents: 60b1d21
Author: duc <dt...@linagora.com>
Authored: Tue Aug 14 15:21:33 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:08:46 2018 +0200

----------------------------------------------------------------------
 server/protocols/jmap/pom.xml                   |   6 -
 ...ltMailboxesProvisioningFilterThreadTest.java | 319 ++-----------------
 .../jmap/UserProvisioningFilterThreadTest.java  |  39 +--
 3 files changed, 43 insertions(+), 321 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/088bdd58/server/protocols/jmap/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index 1e11bfa..8818166 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -189,12 +189,6 @@
             <artifactId>guavate</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.googlecode.thread-weaver</groupId>
-            <artifactId>threadweaver</artifactId>
-            <version>0.2</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>com.jayway.jsonpath</groupId>
             <artifactId>json-path</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/james-project/blob/088bdd58/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
index da76e80..c74ec7d 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
@@ -18,315 +18,56 @@
  ****************************************************************/
 package org.apache.james.jmap;
 
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.List;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 import java.util.Optional;
-import java.util.Set;
 
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.SubscriptionManager;
-import org.apache.james.mailbox.exception.BadCredentialsException;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxAnnotation;
-import org.apache.james.mailbox.model.MailboxAnnotationKey;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.MessageRange;
-import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.TestId;
-import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.junit.Before;
 import org.junit.Test;
 
-import com.google.testing.threadtester.AnnotatedTestRunner;
-import com.google.testing.threadtester.ThreadedAfter;
-import com.google.testing.threadtester.ThreadedBefore;
-import com.google.testing.threadtester.ThreadedMain;
-import com.google.testing.threadtester.ThreadedSecondary;
-
 public class DefaultMailboxesProvisioningFilterThreadTest {
 
+    private static final String USERNAME = "username";
+
     private DefaultMailboxesProvisioningFilter sut;
     private MailboxSession session;
     private MailboxManager mailboxManager;
-    private FakeSubscriptionManager subscriptionManager;
+    private SubscriptionManager subscriptionManager;
 
-    @ThreadedBefore
+    @Before
     public void before() {
-        session = new MockMailboxSession("username");
-        mailboxManager = new FakeMailboxManager(session);
-        subscriptionManager = new FakeSubscriptionManager();
+        session = new MockMailboxSession(USERNAME);
+        mailboxManager = mock(MailboxManager.class);
+        subscriptionManager = mock(SubscriptionManager.class);
         sut = new DefaultMailboxesProvisioningFilter(mailboxManager, subscriptionManager, new NoopMetricFactory());
     }
-    
-    @ThreadedMain
-    public void mainThread() {
-        sut.createMailboxesIfNeeded(session);
-    }
-    
-    @ThreadedSecondary
-    public void secondThread() {
-        sut.createMailboxesIfNeeded(session);
-    }
-    
-    @ThreadedAfter
-    public void after() {
-        // Exception is thrown if test fails
-    }
-    
-    @Test
-    public void testConcurrentAccessToFilterShouldNotThrow() {
-        AnnotatedTestRunner runner = new AnnotatedTestRunner();
-        runner.runTests(this.getClass(), DefaultMailboxesProvisioningFilter.class);
-    }
-
-    private static class FakeSubscriptionManager implements SubscriptionManager {
-        @Override
-        public void subscribe(MailboxSession session, String mailbox) throws SubscriptionException {
-
-        }
-
-        @Override
-        public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException {
-            return null;
-        }
-
-        @Override
-        public void unsubscribe(MailboxSession session, String mailbox) throws SubscriptionException {
-
-        }
-
-        @Override
-        public void startProcessingRequest(MailboxSession session) {
-
-        }
-
-        @Override
-        public void endProcessingRequest(MailboxSession session) {
-
-        }
-    }
-
-    private static class FakeMailboxManager implements MailboxManager {
-        private MailboxSession mailboxSession;
-
-        public FakeMailboxManager(MailboxSession mailboxSession) {
-            this.mailboxSession = mailboxSession;
-        }
-
-        @Override
-        public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() {
-            return EnumSet.noneOf(SearchCapabilities.class);
-        }
-        
-        @Override
-        public void startProcessingRequest(MailboxSession session) {
-        }
-
-        @Override
-        public void endProcessingRequest(MailboxSession session) {
-        }
-
-        @Override
-        public void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public void removeListener(MailboxPath mailboxPath, MailboxListener listner, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public void removeGlobalListener(MailboxListener listner, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public char getDelimiter() {
-            return 0;
-        }
-
-        @Override
-        public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public Optional<MailboxId> createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
-            return Optional.of(TestId.of(18L));
-        }
 
-        @Override
-        public void deleteMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public void renameMailbox(MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
-        }
-
-        @Override
-        public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public List<MessageRange> copyMessages(MessageRange set, MailboxId from, MailboxId to, MailboxSession session)
-                throws MailboxException {
-            return null;
-        }
-        
-        @Override
-        public List<MessageRange> moveMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public List<MailboxMetaData> search(MailboxQuery expression, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            return false;
-        }
-
-        @Override
-        public MailboxSession createSystemSession(String userName) throws BadCredentialsException, MailboxException {
-            return mailboxSession;
-        }
-
-        @Override
-        public MailboxSession login(String userid, String passwd) throws BadCredentialsException, MailboxException {
-            return null;
-        }
-
-        @Override
-        public void logout(MailboxSession session, boolean force) throws MailboxException {
-        }
-
-        @Override
-        public boolean hasRight(MailboxId mailboxId, MailboxACL.Right right, MailboxSession session) throws MailboxException {
-            return false;
-        }
-
-        @Override
-        public boolean hasRight(MailboxPath mailboxPath, MailboxACL.Right right, MailboxSession session) throws MailboxException {
-            return false;
-        }
-
-        @Override
-        public MailboxACL.Rfc4314Rights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public MailboxACL.Rfc4314Rights myRights(MailboxId mailboxId, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public MailboxACL.Rfc4314Rights[] listRights(MailboxPath mailboxPath, MailboxACL.EntryKey identifier, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public MailboxACL listRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public void applyRightsCommand(MailboxPath mailboxPath, MailboxACL.ACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public void setRights(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public void setRights(MailboxPath mailboxPath, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
-            throw new NotImplementedException();
-        }
-
-        @Override
-        public List<MailboxPath> list(MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-            return null;
-        }
-        
-        @Override
-        public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-            return null;
-        }
-
-        @Override
-        public List<MailboxAnnotation> getAllAnnotations(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public List<MailboxAnnotation> getAnnotationsByKeys(MailboxPath mailboxPath, MailboxSession session, Set<MailboxAnnotationKey> keys) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public void updateAnnotations(MailboxPath mailboxPath, MailboxSession session, List<MailboxAnnotation> mailboxAnnotations) throws MailboxException {
-            
-        }
-
-        @Override
-        public boolean hasCapability(MailboxCapabilities capability) {
-            return false;
-        }
-
-        @Override
-        public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public List<MailboxAnnotation> getAnnotationsByKeysWithOneDepth(MailboxPath mailboxPath, MailboxSession session,
-                Set<MailboxAnnotationKey> keys) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public List<MailboxAnnotation> getAnnotationsByKeysWithAllDepth(MailboxPath mailboxPath, MailboxSession session,
-                Set<MailboxAnnotationKey> keys) throws MailboxException {
-            return null;
-        }
-
-        @Override
-        public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-            return false;
-        }
-
-        @Override
-        public MailboxSession loginAsOtherUser(String adminUserId, String passwd, String realUserId) throws BadCredentialsException, MailboxException {
-            return null;
-        }
+    @Test
+    public void testConcurrentAccessToFilterShouldNotThrow() throws Exception {
+        doNothing().when(subscriptionManager).subscribe(eq(session), anyString());
+
+        when(mailboxManager.createMailbox(any(MailboxPath.class), eq(session))).thenReturn(Optional.of(TestId.of(18L)));
+        when(mailboxManager.mailboxExists(any(MailboxPath.class), eq(session))).thenReturn(false);
+        when(mailboxManager.createSystemSession(USERNAME)).thenReturn(session);
+
+        ConcurrentTestRunner
+            .builder()
+            .threadCount(2)
+            .build((threadNumber, step) -> sut.createMailboxesIfNeeded(session))
+            .run()
+            .assertNoException();
     }
 }
-

http://git-wip-us.apache.org/repos/asf/james-project/blob/088bdd58/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
index 14dd76f..0f09544 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java
@@ -18,50 +18,37 @@
  ****************************************************************/
 package org.apache.james.jmap;
 
+import java.util.concurrent.ExecutionException;
+
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.user.memory.MemoryUsersRepository;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
+import org.junit.Before;
 import org.junit.Test;
 
-import com.google.testing.threadtester.AnnotatedTestRunner;
-import com.google.testing.threadtester.ThreadedAfter;
-import com.google.testing.threadtester.ThreadedBefore;
-import com.google.testing.threadtester.ThreadedMain;
-import com.google.testing.threadtester.ThreadedSecondary;
-
 public class UserProvisioningFilterThreadTest {
 
     private UserProvisioningFilter sut;
     private MemoryUsersRepository usersRepository;
     private MailboxSession session;
 
-    @ThreadedBefore
+    @Before
     public void before() {
         usersRepository = MemoryUsersRepository.withoutVirtualHosting();
         session = new MockMailboxSession("username");
         sut = new UserProvisioningFilter(usersRepository, new NoopMetricFactory());
     }
-    
-    @ThreadedMain
-    public void mainThread() {
-        sut.createAccountIfNeeded(session);
-    }
-    
-    @ThreadedSecondary
-    public void secondThread() {
-        sut.createAccountIfNeeded(session);
-    }
-    
-    @ThreadedAfter
-    public void after() {
-        // Exception is thrown if test fails
-    }
-    
+
     @Test
-    public void testConcurrentAccessToFilterShouldNotThrow() {
-        AnnotatedTestRunner runner = new AnnotatedTestRunner();
-        runner.runTests(this.getClass(), UserProvisioningFilter.class);
+    public void testConcurrentAccessToFilterShouldNotThrow() throws ExecutionException, InterruptedException {
+        ConcurrentTestRunner
+            .builder()
+            .threadCount(2)
+            .build((threadNumber, step) -> sut.createAccountIfNeeded(session))
+            .run()
+            .assertNoException();
     }
 }
 


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


[10/13] james-project git commit: JAMES-2530 Implement JMAP methods for implementing filtering

Posted by ad...@apache.org.
JAMES-2530 Implement JMAP methods for implementing filtering


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3bc2eecf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3bc2eecf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3bc2eecf

Branch: refs/heads/master
Commit: 3bc2eecf16108c3f4a6c29726d755d2b164b4fd0
Parents: 2224a02
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 10:17:21 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:51 2018 +0200

----------------------------------------------------------------------
 .../james/jmap/methods/GetFilterMethod.java     | 118 ++++++++++
 .../james/jmap/methods/SetFilterMethod.java     | 216 +++++++++++++++++++
 2 files changed, 334 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3bc2eecf/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
new file mode 100644
index 0000000..5c04c60
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
@@ -0,0 +1,118 @@
+/****************************************************************
+ * 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.methods;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.james.core.User;
+import org.apache.james.jmap.api.filtering.FilteringManagement;
+import org.apache.james.jmap.api.filtering.Rule;
+import org.apache.james.jmap.model.ClientId;
+import org.apache.james.jmap.model.GetFilterRequest;
+import org.apache.james.jmap.model.GetFilterResponse;
+import org.apache.james.jmap.model.SetError;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+
+public class GetFilterMethod implements Method {
+    private static final Logger LOGGER = LoggerFactory.getLogger(GetFilterMethod.class);
+
+    private static final Method.Request.Name METHOD_NAME = Method.Request.name("getFilter");
+    private static final Method.Response.Name RESPONSE_NAME = Method.Response.name("filter");
+
+    private final MetricFactory metricFactory;
+    private final FilteringManagement filteringManagement;
+
+    @Inject
+    private GetFilterMethod(MetricFactory metricFactory, FilteringManagement filteringManagement) {
+        this.metricFactory = metricFactory;
+        this.filteringManagement = filteringManagement;
+    }
+
+    @Override
+    public Request.Name requestHandled() {
+        return METHOD_NAME;
+    }
+
+    @Override
+    public Class<? extends JmapRequest> requestType() {
+        return GetFilterRequest.class;
+    }
+
+    @Override
+    public Stream<JmapResponse> process(JmapRequest request, ClientId clientId, MailboxSession mailboxSession) {
+        Preconditions.checkNotNull(request);
+        Preconditions.checkNotNull(clientId);
+        Preconditions.checkNotNull(mailboxSession);
+        Preconditions.checkArgument(request instanceof GetFilterRequest);
+
+        GetFilterRequest filterRequest = (GetFilterRequest) request;
+
+        return metricFactory.withMetric(JMAP_PREFIX + METHOD_NAME.getName(),
+            MDCBuilder.create()
+                .addContext(MDCBuilder.ACTION, "GET_FILTER")
+                .wrapArround(() -> process(clientId, mailboxSession, filterRequest)));
+    }
+
+    private Stream<JmapResponse> process(ClientId clientId, MailboxSession mailboxSession, GetFilterRequest request) {
+        try {
+            User user = User.fromUsername(mailboxSession.getUser().getUserName());
+
+            return retrieveFilter(clientId, user);
+        } catch (Exception e) {
+            LOGGER.warn("Failed to retrieve filter");
+
+            return Stream.of(unKnownError(clientId));
+        }
+    }
+
+    private Stream<JmapResponse> retrieveFilter(ClientId clientId, User user) {
+        List<Rule> rules = filteringManagement.listRulesForUser(user);
+
+        GetFilterResponse getFilterResponse = GetFilterResponse.builder()
+            .rules(rules)
+            .build();
+
+        return Stream.of(JmapResponse.builder()
+            .clientId(clientId)
+            .response(getFilterResponse)
+            .responseName(RESPONSE_NAME)
+            .build());
+    }
+
+    private JmapResponse unKnownError(ClientId clientId) {
+        return JmapResponse.builder()
+            .clientId(clientId)
+            .responseName(RESPONSE_NAME)
+            .response(ErrorResponse.builder()
+                .type(SetError.Type.ERROR.asString())
+                .description("Failed to retrieve filter")
+                .build())
+            .build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/3bc2eecf/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
new file mode 100644
index 0000000..b9eb9e7
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
@@ -0,0 +1,216 @@
+/****************************************************************
+ * 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.methods;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.inject.Inject;
+
+import org.apache.james.core.User;
+import org.apache.james.jmap.api.filtering.FilteringManagement;
+import org.apache.james.jmap.api.filtering.Rule;
+import org.apache.james.jmap.model.ClientId;
+import org.apache.james.jmap.model.JmapRuleDTO;
+import org.apache.james.jmap.model.SetError;
+import org.apache.james.jmap.model.SetFilterRequest;
+import org.apache.james.jmap.model.SetFilterResponse;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.util.MDCBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableListMultimap;
+
+public class SetFilterMethod implements Method {
+
+    public static class DuplicatedRuleException extends Exception {
+        private final ImmutableList<Rule.Id> duplicatedIds;
+
+        public DuplicatedRuleException(ImmutableList<Rule.Id> duplicatedIds) {
+            super("The following rules were duplicated:" + format(duplicatedIds));
+            this.duplicatedIds = duplicatedIds;
+        }
+    }
+
+    public static class MultipleMailboxIdException extends Exception {
+        private final ImmutableList<Rule.Id> idsWithMultipleMailboxes;
+
+        public MultipleMailboxIdException(ImmutableList<Rule.Id> idsWithMultipleMailboxes) {
+            super("The following rules were targeting several mailboxes:" + format(idsWithMultipleMailboxes));
+            this.idsWithMultipleMailboxes = idsWithMultipleMailboxes;
+        }
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SetFilterMethod.class);
+
+    private static final Request.Name METHOD_NAME = Request.name("setFilter");
+    private static final Response.Name RESPONSE_NAME = Response.name("filterSet");
+
+    private static String format(ImmutableList<Rule.Id> ids) {
+        return "[" + ids.stream()
+                .map(Rule.Id::asString)
+                .map(SetFilterMethod::quote)
+                .collect(Collectors.joining(","))
+                + "]";
+    }
+
+    private static String quote(String s) {
+        return "'" + s + "'";
+    }
+
+    private final MetricFactory metricFactory;
+    private final FilteringManagement filteringManagement;
+
+    @Inject
+    public SetFilterMethod(MetricFactory metricFactory, FilteringManagement filteringManagement) {
+        this.filteringManagement = filteringManagement;
+        this.metricFactory = metricFactory;
+    }
+
+    @Override
+    public Request.Name requestHandled() {
+        return METHOD_NAME;
+    }
+
+    @Override
+    public Class<? extends JmapRequest> requestType() {
+        return SetFilterRequest.class;
+    }
+
+    @Override
+    public Stream<JmapResponse> process(JmapRequest request, ClientId clientId, MailboxSession mailboxSession) {
+        Preconditions.checkNotNull(request);
+        Preconditions.checkNotNull(clientId);
+        Preconditions.checkNotNull(mailboxSession);
+
+        Preconditions.checkArgument(request instanceof SetFilterRequest);
+
+        SetFilterRequest setFilterRequest = (SetFilterRequest) request;
+
+        return metricFactory.withMetric(JMAP_PREFIX + METHOD_NAME.getName(),
+            MDCBuilder.create()
+                .addContext(MDCBuilder.ACTION, "SET_FILTER")
+                .addContext("update", setFilterRequest.getSingleton())
+                .wrapArround(
+                    () -> process(clientId, mailboxSession, setFilterRequest)));
+    }
+
+    private Stream<JmapResponse> process(ClientId clientId, MailboxSession mailboxSession, SetFilterRequest request) {
+        try {
+            User user = User.fromUsername(mailboxSession.getUser().getUserName());
+
+            return updateFilter(clientId, request, user);
+        } catch (MultipleMailboxIdException e) {
+            LOGGER.debug("Rule targeting several mailboxes", e);
+            return Stream.of(multipleMailboxesError(clientId, e));
+        }  catch (DuplicatedRuleException e) {
+            LOGGER.debug("Duplicated rules", e);
+            return Stream.of(duplicatedIdsError(clientId, e));
+        } catch (Exception e) {
+            LOGGER.warn("Failed setting Rules", e);
+            return Stream.of(unKnownError(clientId));
+        }
+    }
+
+    private Stream<JmapResponse> updateFilter(ClientId clientId, SetFilterRequest request, User user) throws DuplicatedRuleException, MultipleMailboxIdException {
+        ImmutableList<Rule> rules = request.getSingleton().stream()
+            .map(JmapRuleDTO::toRule)
+            .collect(ImmutableList.toImmutableList());
+
+        ensureNoDuplicatedRules(rules);
+        ensureNoMultipleMailboxesRules(rules);
+
+        filteringManagement.defineRulesForUser(user, rules);
+
+        return Stream.of(JmapResponse.builder()
+            .clientId(clientId)
+            .responseName(RESPONSE_NAME)
+            .response(SetFilterResponse.updated())
+            .build());
+    }
+
+    private void ensureNoMultipleMailboxesRules(ImmutableList<Rule> rules) throws MultipleMailboxIdException {
+        ImmutableList<Rule.Id> idWithMultipleMailboxes = rules.stream()
+            .filter(rule -> rule.getAction().getAppendInMailboxes().getMailboxIds().size() > 1)
+            .map(Rule::getId)
+            .collect(ImmutableList.toImmutableList());
+
+        if (!idWithMultipleMailboxes.isEmpty()) {
+            throw new MultipleMailboxIdException(idWithMultipleMailboxes);
+        }
+    }
+
+    private void ensureNoDuplicatedRules(List<Rule> rules) throws DuplicatedRuleException {
+        ImmutableList<Rule.Id> duplicatedIds = rules.stream()
+            .collect(ImmutableListMultimap.toImmutableListMultimap(
+                Rule::getId,
+                Function.identity()))
+            .asMap()
+            .entrySet()
+            .stream()
+            .filter(entry -> entry.getValue().size() > 1)
+            .map(Map.Entry::getKey)
+            .collect(ImmutableList.toImmutableList());
+
+        if (!duplicatedIds.isEmpty()) {
+            throw new DuplicatedRuleException(duplicatedIds);
+        }
+    }
+
+    private JmapResponse unKnownError(ClientId clientId) {
+        return JmapResponse.builder()
+            .clientId(clientId)
+            .responseName(RESPONSE_NAME)
+            .response(ErrorResponse.builder()
+                .type(SetError.Type.ERROR.asString())
+                .description("Failed to retrieve filter")
+                .build())
+            .build();
+    }
+
+    private JmapResponse duplicatedIdsError(ClientId clientId, DuplicatedRuleException e) {
+        return JmapResponse.builder()
+            .clientId(clientId)
+            .responseName(RESPONSE_NAME)
+            .response(SetFilterResponse.notUpdated(SetError.builder()
+                .type(SetError.Type.INVALID_ARGUMENTS)
+                .description("The following rules were duplicated: " + format(e.duplicatedIds))
+                .build()))
+            .build();
+    }
+
+    private JmapResponse multipleMailboxesError(ClientId clientId, MultipleMailboxIdException e) {
+        return JmapResponse.builder()
+            .clientId(clientId)
+            .responseName(RESPONSE_NAME)
+            .response(SetFilterResponse.notUpdated(SetError.builder()
+                .type(SetError.Type.INVALID_ARGUMENTS)
+                .description("The following rules targeted several mailboxes, which is not supported: " + format(e.idsWithMultipleMailboxes))
+                .build()))
+            .build();
+    }
+}


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


[09/13] james-project git commit: JAMES-2530 Guice bindings for JMAP filtering

Posted by ad...@apache.org.
JAMES-2530 Guice bindings for JMAP filtering


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3c8db042
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3c8db042
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3c8db042

Branch: refs/heads/master
Commit: 3c8db042082060b5a0589384f7f4c9606c146467
Parents: 3bc2eec
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 10:31:35 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:51 2018 +0200

----------------------------------------------------------------------
 .../apache/james/modules/data/CassandraJmapModule.java    | 10 ++++++++++
 .../apache/james/modules/data/MemoryDataJmapModule.java   |  5 +++++
 .../main/java/org/apache/james/jmap/MethodsModule.java    |  4 ++++
 3 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8db042/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
index 3a88c08..ee5e194 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
@@ -20,11 +20,15 @@
 package org.apache.james.modules.data;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.jmap.api.access.AccessTokenRepository;
+import org.apache.james.jmap.api.filtering.FilteringManagement;
+import org.apache.james.jmap.api.filtering.impl.EventSourcingFilteringManagement;
 import org.apache.james.jmap.api.vacation.NotificationRegistry;
 import org.apache.james.jmap.api.vacation.VacationRepository;
 import org.apache.james.jmap.cassandra.access.CassandraAccessModule;
 import org.apache.james.jmap.cassandra.access.CassandraAccessTokenRepository;
+import org.apache.james.jmap.cassandra.filtering.FilteringRuleSetDefineDTOModules;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistry;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistryModule;
 import org.apache.james.jmap.cassandra.vacation.CassandraVacationModule;
@@ -47,9 +51,15 @@ public class CassandraJmapModule extends AbstractModule {
         bind(CassandraNotificationRegistry.class).in(Scopes.SINGLETON);
         bind(NotificationRegistry.class).to(CassandraNotificationRegistry.class);
 
+        bind(EventSourcingFilteringManagement.class).in(Scopes.SINGLETON);
+        bind(FilteringManagement.class).to(EventSourcingFilteringManagement.class);
+
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().toInstance(CassandraAccessModule.MODULE);
         cassandraDataDefinitions.addBinding().toInstance(CassandraVacationModule.MODULE);
         cassandraDataDefinitions.addBinding().toInstance(CassandraNotificationRegistryModule.MODULE);
+
+        Multibinder<EventDTOModule> eventDTOModuleBinder = Multibinder.newSetBinder(binder(), EventDTOModule.class);
+        eventDTOModuleBinder.addBinding().toInstance(FilteringRuleSetDefineDTOModules.FILTERING_RULE_SET_DEFINED);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8db042/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
index 43b50ad..24a9813 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
@@ -20,6 +20,8 @@
 package org.apache.james.modules.data;
 
 import org.apache.james.jmap.api.access.AccessTokenRepository;
+import org.apache.james.jmap.api.filtering.FilteringManagement;
+import org.apache.james.jmap.api.filtering.impl.EventSourcingFilteringManagement;
 import org.apache.james.jmap.api.vacation.NotificationRegistry;
 import org.apache.james.jmap.api.vacation.VacationRepository;
 import org.apache.james.jmap.memory.access.MemoryAccessTokenRepository;
@@ -45,6 +47,9 @@ public class MemoryDataJmapModule extends AbstractModule {
         bind(MemoryNotificationRegistry.class).in(Scopes.SINGLETON);
         bind(NotificationRegistry.class).to(MemoryNotificationRegistry.class);
 
+        bind(EventSourcingFilteringManagement.class).in(Scopes.SINGLETON);
+        bind(FilteringManagement.class).to(EventSourcingFilteringManagement.class);
+
         bind(DefaultTextExtractor.class).in(Scopes.SINGLETON);
         bind(TextExtractor.class).to(JsoupTextExtractor.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8db042/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MethodsModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MethodsModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MethodsModule.java
index 37b2863..13055de 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MethodsModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/MethodsModule.java
@@ -20,6 +20,7 @@
 package org.apache.james.jmap;
 
 import org.apache.james.jmap.json.ObjectMapperFactory;
+import org.apache.james.jmap.methods.GetFilterMethod;
 import org.apache.james.jmap.methods.GetMailboxesMethod;
 import org.apache.james.jmap.methods.GetMessageListMethod;
 import org.apache.james.jmap.methods.GetMessagesMethod;
@@ -30,6 +31,7 @@ import org.apache.james.jmap.methods.JmapResponseWriter;
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.methods.Method;
 import org.apache.james.jmap.methods.SendMDNProcessor;
+import org.apache.james.jmap.methods.SetFilterMethod;
 import org.apache.james.jmap.methods.SetMailboxesCreationProcessor;
 import org.apache.james.jmap.methods.SetMailboxesDestructionProcessor;
 import org.apache.james.jmap.methods.SetMailboxesMethod;
@@ -68,6 +70,8 @@ public class MethodsModule extends AbstractModule {
         methods.addBinding().to(SetMailboxesMethod.class);
         methods.addBinding().to(GetVacationResponseMethod.class);
         methods.addBinding().to(SetVacationResponseMethod.class);
+        methods.addBinding().to(GetFilterMethod.class);
+        methods.addBinding().to(SetFilterMethod.class);
 
         Multibinder<SetMailboxesProcessor> setMailboxesProcessor =
             Multibinder.newSetBinder(binder(), SetMailboxesProcessor.class);


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


[11/13] james-project git commit: JAMES-2530 Integration tests for JMAP filtering CRUD APIs

Posted by ad...@apache.org.
JAMES-2530 Integration tests for JMAP filtering CRUD APIs


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7214635a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7214635a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7214635a

Branch: refs/heads/master
Commit: 7214635ae41fdd59a55a98f6c9b8d2c77d57e3eb
Parents: 3c8db04
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 12:24:45 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:52 2018 +0200

----------------------------------------------------------------------
 .../jmap/cassandra/CassandraFilterTest.java     |  50 ++
 .../jmap/methods/integration/FilterTest.java    | 575 +++++++++++++++++++
 .../james/jmap/memory/MemoryFilterTest.java     |  47 ++
 3 files changed, 672 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7214635a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraFilterTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraFilterTest.java b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraFilterTest.java
new file mode 100644
index 0000000..b00c974
--- /dev/null
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraFilterTest.java
@@ -0,0 +1,50 @@
+/****************************************************************
+ * 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.cassandra;
+
+import java.io.IOException;
+
+import org.apache.james.CassandraJmapTestRule;
+import org.apache.james.DockerCassandraRule;
+import org.apache.james.GuiceJamesServer;
+import org.apache.james.jmap.methods.integration.FilterTest;
+import org.apache.james.mailbox.cassandra.ids.CassandraId;
+import org.apache.james.mailbox.model.MailboxId;
+import org.junit.ClassRule;
+import org.junit.Rule;
+
+public class CassandraFilterTest extends FilterTest {
+
+    @ClassRule
+    public static DockerCassandraRule cassandra = new DockerCassandraRule();
+
+    @Rule
+    public CassandraJmapTestRule rule = CassandraJmapTestRule.defaultTestRule();
+
+    @Override
+    protected GuiceJamesServer createJmapServer() throws IOException {
+        return rule.jmapServer(cassandra.getModule());
+    }
+
+    @Override
+    protected MailboxId randomMailboxId() {
+        return CassandraId.timeBased();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7214635a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/FilterTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/FilterTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/FilterTest.java
new file mode 100644
index 0000000..643c844
--- /dev/null
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/FilterTest.java
@@ -0,0 +1,575 @@
+/****************************************************************
+ * 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.methods.integration;
+
+import static io.restassured.RestAssured.given;
+import static io.restassured.RestAssured.with;
+import static org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser;
+import static org.apache.james.jmap.JmapURIBuilder.baseUri;
+import static org.apache.james.jmap.TestingConstants.ALICE;
+import static org.apache.james.jmap.TestingConstants.ALICE_PASSWORD;
+import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
+import static org.apache.james.jmap.TestingConstants.DOMAIN;
+import static org.apache.james.jmap.TestingConstants.NAME;
+import static org.apache.james.jmap.TestingConstants.jmapRequestSpecBuilder;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.hasSize;
+
+import java.io.IOException;
+
+import org.apache.james.GuiceJamesServer;
+import org.apache.james.jmap.api.access.AccessToken;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.probe.DataProbe;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.JmapGuiceProbe;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import io.restassured.RestAssured;
+
+public abstract class FilterTest {
+
+    protected abstract GuiceJamesServer createJmapServer() throws IOException;
+
+    protected abstract MailboxId randomMailboxId();
+
+    private AccessToken accessToken;
+    private GuiceJamesServer jmapServer;
+
+    @Before
+    public void setup() throws Throwable {
+        jmapServer = createJmapServer();
+        jmapServer.start();
+
+        RestAssured.requestSpecification = jmapRequestSpecBuilder
+                .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort())
+                .build();
+
+        DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class);
+        dataProbe.addDomain(DOMAIN);
+        dataProbe.addUser(ALICE, ALICE_PASSWORD);
+        accessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD);
+    }
+
+    @After
+    public void teardown() {
+        jmapServer.stop();
+    }
+
+    @Test
+    public void getFilterShouldReturnEmptyByDefault() {
+        String body = "[[" +
+                "  \"getFilter\", " +
+                "  {}, " +
+                "\"#0\"" +
+                "]]";
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body(body)
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("filter"))
+            .body(ARGUMENTS + ".singleton", hasSize(0));
+    }
+
+    @Test
+    public void setFilterShouldOverwritePreviouslyStoredRules() {
+        MailboxId mailbox1 = randomMailboxId();
+        MailboxId mailbox2 = randomMailboxId();
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My first rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox2.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"42-ac\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"from\"," +
+                  "        \"comparator\": \"exactly-equals\"," +
+                  "        \"value\": \"marvin@h2.g2\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "            \"mailboxIds\": [\"" + mailbox1.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"getFilter\", " +
+                  "  {}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("filter"))
+            .body(ARGUMENTS + ".singleton", hasSize(1))
+            .body(ARGUMENTS + ".singleton[0].id", equalTo("42-ac"))
+            .body(ARGUMENTS + ".singleton[0].name", equalTo("My last rule"))
+            .body(ARGUMENTS + ".singleton[0].condition.field", equalTo("from"))
+            .body(ARGUMENTS + ".singleton[0].condition.comparator", equalTo("exactly-equals"))
+            .body(ARGUMENTS + ".singleton[0].condition.value", equalTo("marvin@h2.g2"))
+            .body(ARGUMENTS + ".singleton[0].action.appendIn.mailboxIds", containsInAnyOrder(mailbox1.serialize()));
+    }
+
+    @Test
+    public void setFilterShouldReturnUpdatedSingleton() {
+        MailboxId mailbox = randomMailboxId();
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .body(NAME, equalTo("filterSet"))
+            .body(ARGUMENTS + ".updated", containsInAnyOrder("singleton"));
+    }
+
+    @Test
+    public void setFilterShouldRejectDuplicatedRules() {
+        MailboxId mailbox = randomMailboxId();
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .body(NAME, equalTo("filterSet"))
+            .body(ARGUMENTS + ".updated", hasSize(0))
+            .body(ARGUMENTS + ".notUpdated.singleton.type", equalTo("invalidArguments"))
+            .body(ARGUMENTS + ".notUpdated.singleton.description", equalTo("The following rules were duplicated: ['3000-34e']"));
+    }
+
+    @Test
+    public void setFilterShouldRejectRulesTargetingSeveralMailboxes() {
+        MailboxId mailbox1 = randomMailboxId();
+        MailboxId mailbox2 = randomMailboxId();
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox1.serialize() + "\",\"" + mailbox2.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .body(NAME, equalTo("filterSet"))
+            .body(ARGUMENTS + ".updated", hasSize(0))
+            .body(ARGUMENTS + ".notUpdated.singleton.type", equalTo("invalidArguments"))
+            .body(ARGUMENTS + ".notUpdated.singleton.description", equalTo("The following rules targeted several mailboxes, which is not supported: ['3000-34e']"));
+    }
+
+    @Test
+    public void setFilterShouldRejectAccountId() {
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"accountId\": \"any\"," +
+                  "    \"singleton\": []" +
+                  "  }, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .body(NAME, equalTo("error"))
+            .body(ARGUMENTS + ".type", equalTo("invalidArguments"))
+            .body(ARGUMENTS + ".description", equalTo("The field 'accountId' of 'SetFilterRequest' is not supported"));
+    }
+
+    @Test
+    public void setFilterShouldRejectIfInState() {
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"ifInState\": \"any\"," +
+                  "    \"singleton\": []" +
+                  "  }, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .body(NAME, equalTo("error"))
+            .body(ARGUMENTS + ".type", equalTo("invalidArguments"))
+            .body(ARGUMENTS + ".description", equalTo("The field 'ifInState' of 'SetFilterRequest' is not supported"));
+    }
+
+    @Test
+    public void getFilterShouldRetrievePreviouslyStoredRules() {
+        MailboxId mailbox1 = randomMailboxId();
+        MailboxId mailbox2 = randomMailboxId();
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"42-ac\"," +
+                  "      \"name\": \"My first rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"from\"," +
+                  "        \"comparator\": \"exactly-equals\"," +
+                  "        \"value\": \"marvin@h2.g2\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "            \"mailboxIds\": [\"" + mailbox1.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox2.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"getFilter\", " +
+                  "  {}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("filter"))
+            .body(ARGUMENTS + ".singleton", hasSize(2))
+            .body(ARGUMENTS + ".singleton[0].id", equalTo("42-ac"))
+            .body(ARGUMENTS + ".singleton[0].name", equalTo("My first rule"))
+            .body(ARGUMENTS + ".singleton[0].condition.field", equalTo("from"))
+            .body(ARGUMENTS + ".singleton[0].condition.comparator", equalTo("exactly-equals"))
+            .body(ARGUMENTS + ".singleton[0].condition.value", equalTo("marvin@h2.g2"))
+            .body(ARGUMENTS + ".singleton[0].action.appendIn.mailboxIds", containsInAnyOrder(mailbox1.serialize()))
+            .body(ARGUMENTS + ".singleton[1].id", equalTo("3000-34e"))
+            .body(ARGUMENTS + ".singleton[1].name", equalTo("My last rule"))
+            .body(ARGUMENTS + ".singleton[1].condition.field", equalTo("subject"))
+            .body(ARGUMENTS + ".singleton[1].condition.comparator", equalTo("contains"))
+            .body(ARGUMENTS + ".singleton[1].condition.value", equalTo("question"))
+            .body(ARGUMENTS + ".singleton[1].action.appendIn.mailboxIds", containsInAnyOrder(mailbox2.serialize()));
+    }
+
+    @Test
+    public void setFilterShouldClearPreviouslyStoredRulesWhenEmptyBody() {
+        MailboxId mailbox = randomMailboxId();
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-34e\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": []" +
+                  "  }, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"getFilter\", " +
+                  "  {}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("filter"))
+            .body(ARGUMENTS + ".singleton", hasSize(0));
+    }
+
+    @Test
+    public void allFieldsAndComparatorsShouldBeSupported() {
+        MailboxId mailbox = randomMailboxId();
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"setFilter\", " +
+                  "  {" +
+                  "    \"singleton\": [" +
+                  "    {" +
+                  "      \"id\": \"3000-341\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"subject\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-342\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"cc\"," +
+                  "        \"comparator\": \"not-contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-343\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"to\"," +
+                  "        \"comparator\": \"exactly-equals\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-344\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"recipient\"," +
+                  "        \"comparator\": \"not-exactly-equals\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }," +
+                  "    {" +
+                  "      \"id\": \"3000-345\"," +
+                  "      \"name\": \"My last rule\"," +
+                  "      \"condition\": {" +
+                  "        \"field\": \"from\"," +
+                  "        \"comparator\": \"contains\"," +
+                  "        \"value\": \"question\"" +
+                  "      }," +
+                  "      \"action\": {" +
+                  "        \"appendIn\": {" +
+                  "          \"mailboxIds\": [\"" + mailbox.serialize() + "\"]" +
+                  "        }" +
+                  "      }" +
+                  "    }" +
+                  "  ]}, " +
+                  "\"#0\"" +
+                  "]]")
+            .post("/jmap");
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[" +
+                  "  \"getFilter\", " +
+                  "  {}, " +
+                  "\"#0\"" +
+                  "]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("filter"))
+            .body(ARGUMENTS + ".singleton", hasSize(5))
+            .body(ARGUMENTS + ".singleton[0].id", equalTo("3000-341"))
+            .body(ARGUMENTS + ".singleton[0].condition.field", equalTo("subject"))
+            .body(ARGUMENTS + ".singleton[0].condition.comparator", equalTo("contains"))
+            .body(ARGUMENTS + ".singleton[1].id", equalTo("3000-342"))
+            .body(ARGUMENTS + ".singleton[1].condition.field", equalTo("cc"))
+            .body(ARGUMENTS + ".singleton[1].condition.comparator", equalTo("not-contains"))
+            .body(ARGUMENTS + ".singleton[2].id", equalTo("3000-343"))
+            .body(ARGUMENTS + ".singleton[2].condition.field", equalTo("to"))
+            .body(ARGUMENTS + ".singleton[2].condition.comparator", equalTo("exactly-equals"))
+            .body(ARGUMENTS + ".singleton[3].id", equalTo("3000-344"))
+            .body(ARGUMENTS + ".singleton[3].condition.field", equalTo("recipient"))
+            .body(ARGUMENTS + ".singleton[3].condition.comparator", equalTo("not-exactly-equals"))
+            .body(ARGUMENTS + ".singleton[4].id", equalTo("3000-345"))
+            .body(ARGUMENTS + ".singleton[4].condition.field", equalTo("from"))
+            .body(ARGUMENTS + ".singleton[4].condition.comparator", equalTo("contains"));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7214635a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryFilterTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryFilterTest.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryFilterTest.java
new file mode 100644
index 0000000..f1a2f97
--- /dev/null
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryFilterTest.java
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.memory;
+
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.james.GuiceJamesServer;
+import org.apache.james.MemoryJmapTestRule;
+import org.apache.james.jmap.methods.integration.FilterTest;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
+import org.junit.Rule;
+
+public class MemoryFilterTest extends FilterTest {
+    private static final AtomicLong MAILBOX_ID_GENERATOR = new AtomicLong(0);
+
+    @Rule
+    public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
+
+    @Override
+    protected GuiceJamesServer createJmapServer() throws IOException {
+        return memoryJmap.jmapServer();
+    }
+
+    @Override
+    protected MailboxId randomMailboxId() {
+        return InMemoryId.of(MAILBOX_ID_GENERATOR.incrementAndGet());
+    }
+}


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


[06/13] james-project git commit: JAMES-2533 remove uses of shaded classes and add a checkstyle rule

Posted by ad...@apache.org.
JAMES-2533 remove uses of shaded classes and add a checkstyle rule


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9422eda0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9422eda0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9422eda0

Branch: refs/heads/master
Commit: 9422eda08ac208e11c2e0852ca75006f3151697c
Parents: 088bdd5
Author: Matthieu Baechler <ma...@apache.org>
Authored: Fri Aug 24 15:51:31 2018 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:49 2018 +0200

----------------------------------------------------------------------
 .../backends/cassandra/ContainerLifecycleConfiguration.java   | 3 ++-
 checkstyle.xml                                                | 4 ++++
 .../james/mailbox/backup/InternalDateExtraFieldTest.java      | 7 +++----
 .../org/apache/james/mailbox/backup/SizeExtraFieldTest.java   | 7 +++----
 .../org/apache/james/mailbox/backup/UidExtraFieldTest.java    | 7 +++----
 .../james/mailbox/backup/UidValidityExtraFieldTest.java       | 7 +++----
 .../cassandra/mail/CassandraAttachmentFallbackTest.java       | 3 ++-
 .../org/apache/james/JamesServerWithRetryConnectionTest.java  | 3 +--
 .../CassandraEventSourcingDLPConfigurationStoreExtension.java | 3 ++-
 .../org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java | 2 +-
 .../cassandra/CassandraMailRepositoryMailDAOTest.java         | 3 ++-
 .../src/test/java/org/apache/james/jmap/MessageAppender.java  | 3 ++-
 .../methods/integration/cucumber/StringListToFlagsTest.java   | 3 ++-
 .../java/org/apache/james/smtpserver/ValidRcptMXTest.java     | 3 ++-
 .../org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java  | 2 +-
 .../java/org/apache/james/queue/rabbitmq/RabbitMQTest.java    | 2 +-
 .../org/apache/james/util/docker/SwarmGenericContainer.java   | 2 +-
 17 files changed, 35 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
index d9592f9..208448c 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
@@ -24,7 +24,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.junit.rules.TestRule;
 import org.junit.runners.model.Statement;
 import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.shaded.com.google.common.base.Preconditions;
+
+import com.google.common.base.Preconditions;
 
 public class ContainerLifecycleConfiguration {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/checkstyle.xml
----------------------------------------------------------------------
diff --git a/checkstyle.xml b/checkstyle.xml
index 33ad5d8..3ff4a59 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -31,6 +31,10 @@
   <property name="charset" value="UTF-8"/>
   <property name="fileExtensions" value="java, properties, xml"/>
   <module name="TreeWalker">
+    <module name="IllegalImport">
+      <property name="regexp" value="true"/>
+      <property name="illegalPkgs" value=".*\.shaded\..*" />
+    </module>
     <module name="OuterTypeFilename"/>
     <module name="IllegalTokenText">
       <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
index 18c81bc..62cb26b 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
@@ -29,10 +29,9 @@ import java.util.zip.ZipException;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
 
 import com.google.common.base.Charsets;
-
+import com.google.common.primitives.Bytes;
 import nl.jqno.equalsverifier.EqualsVerifier;
 import nl.jqno.equalsverifier.Warning;
 
@@ -214,7 +213,7 @@ public class InternalDateExtraFieldTest {
         void parseFromLocalFileDataShouldHandleOffset() throws Exception {
             InternalDateExtraField testee = new InternalDateExtraField();
 
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
             testee.parseFromLocalFileData(input, 2, 8);
             assertThat(testee.getValue())
                 .contains(0x123456789ABCDEF0L);
@@ -292,7 +291,7 @@ public class InternalDateExtraFieldTest {
         @Test
         void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
             InternalDateExtraField testee = new InternalDateExtraField();
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
 
             testee.parseFromCentralDirectoryData(input, 2, 8);
             assertThat(testee.getValue())

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
index c2275bd..c05ec09 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
@@ -27,10 +27,9 @@ import java.util.zip.ZipException;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
 
 import com.google.common.base.Charsets;
-
+import com.google.common.primitives.Bytes;
 import nl.jqno.equalsverifier.EqualsVerifier;
 import nl.jqno.equalsverifier.Warning;
 
@@ -160,7 +159,7 @@ public class SizeExtraFieldTest {
 
     @Test
     void parseFromLocalFileDataShouldHandleOffset() throws Exception {
-        byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+        byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
         testee.parseFromLocalFileData(input, 2, 8);
         assertThat(testee.getValue())
             .contains(0x123456789ABCDEF0L);
@@ -204,7 +203,7 @@ public class SizeExtraFieldTest {
 
     @Test
     void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
-        byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+        byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
         testee.parseFromCentralDirectoryData(input, 2, 8);
         assertThat(testee.getValue())
             .contains(0x123456789ABCDEF0L);

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
index 3514717..8067ee8 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
@@ -28,10 +28,9 @@ import java.util.zip.ZipException;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
 
 import com.google.common.base.Charsets;
-
+import com.google.common.primitives.Bytes;
 import nl.jqno.equalsverifier.EqualsVerifier;
 import nl.jqno.equalsverifier.Warning;
 
@@ -195,7 +194,7 @@ public class UidExtraFieldTest {
         void parseFromLocalFileDataShouldHandleOffset() throws Exception {
             UidExtraField testee = new UidExtraField();
 
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
             testee.parseFromLocalFileData(input, 2, 8);
             assertThat(testee.getValue())
                 .contains(0x123456789ABCDEF0L);
@@ -254,7 +253,7 @@ public class UidExtraFieldTest {
         @Test
         void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
             UidExtraField testee = new UidExtraField();
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
 
             testee.parseFromCentralDirectoryData(input, 2, 8);
             assertThat(testee.getValue())

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
index e9b312f..2ba8aed 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
@@ -28,10 +28,9 @@ import java.util.zip.ZipException;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
 
 import com.google.common.base.Charsets;
-
+import com.google.common.primitives.Bytes;
 import nl.jqno.equalsverifier.EqualsVerifier;
 import nl.jqno.equalsverifier.Warning;
 
@@ -195,7 +194,7 @@ public class UidValidityExtraFieldTest {
         void parseFromLocalFileDataShouldHandleOffset() throws Exception {
             UidValidityExtraField testee = new UidValidityExtraField();
 
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
             testee.parseFromLocalFileData(input, 2, 8);
             assertThat(testee.getValue())
                 .contains(0x123456789ABCDEF0L);
@@ -254,7 +253,7 @@ public class UidValidityExtraFieldTest {
         @Test
         void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
             UidValidityExtraField testee = new UidValidityExtraField();
-            byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+            byte[] input = Bytes.concat(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
 
             testee.parseFromCentralDirectoryData(input, 2, 8);
             assertThat(testee.getValue())

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
index 5c15145..17257b6 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
@@ -44,7 +44,8 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
 import org.junit.Test;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+import com.google.common.collect.ImmutableList;
 
 public class CassandraAttachmentFallbackTest {
     public static final AttachmentId ATTACHMENT_ID_1 = AttachmentId.from("id1");

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index 73d5151..075c8a0 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -36,7 +36,6 @@ import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
-import org.testcontainers.shaded.com.google.common.base.Throwables;
 
 public class JamesServerWithRetryConnectionTest {
     private static final long WAITING_TIME = TimeUnit.MILLISECONDS.convert(10, TimeUnit.SECONDS);
@@ -102,7 +101,7 @@ public class JamesServerWithRetryConnectionTest {
             try {
                 Thread.sleep(waitingTime);
             } catch (InterruptedException e) {
-                throw Throwables.propagate(e);
+                throw new RuntimeException(e);
             }
             action.execute();
         });

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
index 1f152d2..7cde47a 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
@@ -35,7 +35,8 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableSet;
+
+import com.google.common.collect.ImmutableSet;
 
 public class CassandraEventSourcingDLPConfigurationStoreExtension implements BeforeAllCallback, AfterAllCallback, AfterEachCallback, ParameterResolver {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
index ac82112..3357ba8 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
@@ -34,11 +34,11 @@ import org.apache.james.dlp.eventsourcing.events.ConfigurationItemsRemoved;
 import org.apache.james.eventsourcing.EventId;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.google.common.collect.ImmutableList;
 
 public class DTOTest {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
index 48b4aee..e0635bf 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
@@ -38,7 +38,8 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 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(DockerCassandraExtension.class)
 public class CassandraMailRepositoryMailDAOTest {

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java
index cb78a6f..a1f3d13 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java
@@ -30,7 +30,8 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.probe.MailboxProbe;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+import com.google.common.collect.ImmutableList;
 
 public class MessageAppender {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/StringListToFlagsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/StringListToFlagsTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/StringListToFlagsTest.java
index 0f7ee58..f8b54c1 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/StringListToFlagsTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/StringListToFlagsTest.java
@@ -26,7 +26,8 @@ import javax.mail.Flags.Flag;
 
 import org.apache.james.jmap.model.Keyword;
 import org.junit.Test;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+import com.google.common.collect.ImmutableList;
 
 public class StringListToFlagsTest {
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
index a0605ec..fa4c09e 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
@@ -30,7 +30,8 @@ import org.apache.james.protocols.smtp.hook.HookReturnCode;
 import org.apache.james.protocols.smtp.utils.BaseFakeSMTPSession;
 import org.apache.james.smtpserver.fastfail.ValidRcptMX;
 import org.junit.Test;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+import com.google.common.collect.ImmutableList;
 
 public class ValidRcptMXTest {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java
index f03b646..2f4dcb6 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQClusterTest.java
@@ -47,11 +47,11 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.rabbitmq.client.Address;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
index b81035e..61d3aa5 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
@@ -42,11 +42,11 @@ 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.ImmutableMap;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;

http://git-wip-us.apache.org/repos/asf/james-project/blob/9422eda0/server/testing/src/main/java/org/apache/james/util/docker/SwarmGenericContainer.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/util/docker/SwarmGenericContainer.java b/server/testing/src/main/java/org/apache/james/util/docker/SwarmGenericContainer.java
index 386eaa8..57fb9a5 100644
--- a/server/testing/src/main/java/org/apache/james/util/docker/SwarmGenericContainer.java
+++ b/server/testing/src/main/java/org/apache/james/util/docker/SwarmGenericContainer.java
@@ -35,10 +35,10 @@ import org.testcontainers.DockerClientFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.wait.strategy.WaitStrategy;
 import org.testcontainers.images.builder.ImageFromDockerfile;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
 
 import com.github.dockerjava.api.command.InspectContainerResponse;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
 
 public class SwarmGenericContainer implements TestRule {
     private static final Logger LOGGER = LoggerFactory.getLogger(SwarmGenericContainer.class);


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


[02/13] james-project git commit: JAMES-2074 Run James on random ports

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
index def9542..6cfd351 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
@@ -21,10 +21,8 @@ package org.apache.james.transport.mailets;
 
 import static io.restassured.RestAssured.with;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.TemporaryJamesServer;
@@ -33,6 +31,8 @@ import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mailrepository.api.MailKey;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.utils.DataProbeImpl;
@@ -97,7 +97,7 @@ public class ToRepositoryTest {
 
     @Test
     public void incomingShouldBeStoredInProcessorByDefault() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT)
             .sendMessage(RECIPIENT, RECIPIENT);
 
@@ -106,7 +106,7 @@ public class ToRepositoryTest {
 
     @Test
     public void userShouldBeAbleToAccessReprocessedMails() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT)
             .sendMessage(RECIPIENT, RECIPIENT);
 
@@ -127,7 +127,7 @@ public class ToRepositoryTest {
             .basePath(TasksRoutes.BASE)
             .get(taskId + "/await");
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessageCount(awaitAtMostOneMinute, 2);
@@ -136,7 +136,7 @@ public class ToRepositoryTest {
 
     @Test
     public void userShouldBeAbleToAccessReprocessedMail() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT)
             .sendMessage(RECIPIENT, RECIPIENT);
 
@@ -153,7 +153,7 @@ public class ToRepositoryTest {
             .jsonPath()
             .get("taskId");
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessageCount(awaitAtMostOneMinute, 1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
index 79ff8bc..aacc8b0 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
@@ -22,7 +22,6 @@ package org.apache.james.transport.mailets;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -31,6 +30,7 @@ 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.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -74,7 +74,7 @@ public class ToSenderDomainRepositoryTest {
                     .addProperty("urlPrefix", CUSTOM_REPOSITORY_PREFIX))));
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT);
 
         awaitAtMostOneMinute.until(
@@ -95,7 +95,7 @@ public class ToSenderDomainRepositoryTest {
                     .addProperty("allowRepositoryCreation", "true"))));
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT);
 
         awaitAtMostOneMinute.until(
@@ -118,7 +118,7 @@ public class ToSenderDomainRepositoryTest {
 
         probe.createRepository(DOMAIN_URL);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT);
 
         awaitAtMostOneMinute.until(
@@ -144,7 +144,7 @@ public class ToSenderDomainRepositoryTest {
                     .addProperty("repositoryPath", AWAIT_REPOSITORY_PATH.asString()))));
         MailRepositoryProbeImpl mailRepositoryProbe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT);
 
         awaitAtMostOneMinute.until(
@@ -167,7 +167,7 @@ public class ToSenderDomainRepositoryTest {
 
         probe.createRepository(DOMAIN_URL);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT);
 
         awaitAtMostOneMinute.until(
@@ -187,7 +187,7 @@ public class ToSenderDomainRepositoryTest {
                     .addProperty("urlPrefix", CUSTOM_REPOSITORY_PREFIX))));
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(RECIPIENT, RECIPIENT)
             .sendMessage(RECIPIENT, RECIPIENT);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/resources/imapserver.xml b/server/mailet/integration-testing/src/test/resources/imapserver.xml
index 5db05e9..aa7c2fb 100644
--- a/server/mailet/integration-testing/src/test/resources/imapserver.xml
+++ b/server/mailet/integration-testing/src/test/resources/imapserver.xml
@@ -23,7 +23,7 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/resources/smtpserver.xml b/server/mailet/integration-testing/src/test/resources/smtpserver.xml
index b0e2764..3466c9c 100644
--- a/server/mailet/integration-testing/src/test/resources/smtpserver.xml
+++ b/server/mailet/integration-testing/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -48,7 +48,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/imapserver.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/imapserver.xml
index 28ce44c..e997022 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/imapserver.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/imapserver.xml
@@ -23,7 +23,7 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
@@ -38,7 +38,7 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/lmtpserver.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/lmtpserver.xml
index 5c4a9c7..ffa6eae 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/lmtpserver.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/pop3server.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/pop3server.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/smtpserver.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/smtpserver.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
index 26c1261..02a8f5d 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
@@ -72,11 +72,21 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-guice-imap</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-guice-mailbox</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-guice-smtp</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-guice-webadmin</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/TestingConstants.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/TestingConstants.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/TestingConstants.java
index 54f10b3..0fa17dc 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/TestingConstants.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/TestingConstants.java
@@ -64,8 +64,4 @@ public interface TestingConstants {
 
 
     String LOCALHOST_IP = "127.0.0.1";
-    int SMTP_PORT = 1025;
-    int IMAP_PORT = 1143;
-
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
index 0a40262..c9e6b04 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
@@ -21,7 +21,6 @@ package org.apache.james.jmap;
 
 import static org.apache.james.jmap.TestingConstants.DOMAIN;
 import static org.apache.james.jmap.TestingConstants.LOCALHOST_IP;
-import static org.apache.james.jmap.TestingConstants.SMTP_PORT;
 import static org.apache.james.jmap.TestingConstants.calmlyAwait;
 import static org.awaitility.Duration.ONE_MINUTE;
 import static org.hamcrest.Matchers.equalTo;
@@ -38,6 +37,7 @@ import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.store.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.FakeSmtp;
@@ -108,7 +108,7 @@ public abstract class VacationRelayIntegrationTest {
         String externalMail = "ray@yopmail.com";
 
         SMTPClient smtpClient = new SMTPClient();
-        smtpClient.connect(LOCALHOST_IP, SMTP_PORT);
+        smtpClient.connect(LOCALHOST_IP, guiceJamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort());
         smtpClient.helo(DOMAIN);
         smtpClient.setSender(externalMail);
         smtpClient.rcpt("<" + USER_WITH_DOMAIN + ">");

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index af15f8b..f49a9b4 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -35,12 +35,10 @@ import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
 import static org.apache.james.jmap.TestingConstants.BOB;
 import static org.apache.james.jmap.TestingConstants.BOB_PASSWORD;
 import static org.apache.james.jmap.TestingConstants.DOMAIN;
-import static org.apache.james.jmap.TestingConstants.IMAP_PORT;
 import static org.apache.james.jmap.TestingConstants.LOCALHOST_IP;
 import static org.apache.james.jmap.TestingConstants.NAME;
 import static org.apache.james.jmap.TestingConstants.SECOND_ARGUMENTS;
 import static org.apache.james.jmap.TestingConstants.SECOND_NAME;
-import static org.apache.james.jmap.TestingConstants.SMTP_PORT;
 import static org.apache.james.jmap.TestingConstants.calmlyAwait;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.contains;
@@ -101,6 +99,8 @@ import org.apache.james.mailbox.store.probe.QuotaProbe;
 import org.apache.james.modules.ACLProbeImpl;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.QuotaProbesImpl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.util.MimeMessageUtil;
@@ -5010,7 +5010,7 @@ public abstract class SetMessagesMethodTest {
         calmlyAwait.atMost(30, TimeUnit.SECONDS).until(() -> isAnyMessageFoundInInbox(accessToken));
 
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(USERNAME, PASSWORD)
                 .select(MailboxConstants.INBOX);
             assertThat(imapMessageReader.readFirstMessage())
@@ -5403,7 +5403,7 @@ public abstract class SetMessagesMethodTest {
             .sender(fromAddress)
             .recipient(fromAddress)
             .build();
-        try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, DOMAIN)) {
+        try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, jmapServer.getProbe(SmtpGuiceProbe.class).getSmtpPort(), DOMAIN)) {
             messageSender.sendMessage(mail);
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java
index dfcbdda..b28044d 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SpamAssassinContract.java
@@ -26,7 +26,6 @@ import static io.restassured.config.RestAssuredConfig.newConfig;
 import static org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser;
 import static org.apache.james.jmap.JmapURIBuilder.baseUri;
 import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
-import static org.apache.james.jmap.TestingConstants.IMAP_PORT;
 import static org.apache.james.jmap.TestingConstants.LOCALHOST_IP;
 import static org.apache.james.jmap.TestingConstants.NAME;
 import static org.apache.james.jmap.TestingConstants.calmlyAwait;
@@ -40,6 +39,7 @@ import java.util.Map;
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.jmap.api.access.AccessToken;
 import org.apache.james.mailbox.Role;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.JmapGuiceProbe;
@@ -164,7 +164,7 @@ public interface SpamAssassinContract {
             .path(ARGUMENTS + ".messageIds");
 
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, james.getJmapServer().getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(ALICE, ALICE_PASSWORD)
                 .select(IMAPMessageReader.INBOX);
 
@@ -211,7 +211,7 @@ public interface SpamAssassinContract {
             .path(ARGUMENTS + ".messageIds");
 
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, james.getJmapServer().getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(ALICE, ALICE_PASSWORD)
                 .select(IMAPMessageReader.INBOX);
 
@@ -397,7 +397,7 @@ public interface SpamAssassinContract {
 
         // Alice is moving this message out of Spam -> forgetting in SpamAssassin
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, james.getJmapServer().getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(ALICE, ALICE_PASSWORD)
                 .select("Spam");
 
@@ -457,7 +457,7 @@ public interface SpamAssassinContract {
 
         // Alice is deleting this message
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, james.getJmapServer().getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(ALICE, ALICE_PASSWORD)
                 .select("Spam");
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
index 15ac827..b09b4d8 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.jmap.methods.integration.cucumber;
 
-import static org.apache.james.jmap.TestingConstants.IMAP_PORT;
 import static org.apache.james.transport.mailets.remote.delivery.HeloNameProvider.LOCALHOST;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -27,6 +26,7 @@ import java.util.Map;
 
 import javax.inject.Inject;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.utils.IMAPMessageReader;
 
 import com.github.fge.lambdas.Throwing;
@@ -58,7 +58,7 @@ public class ImapStepdefs {
     @Then("^the user has a IMAP message in mailbox \"([^\"]*)\"$")
     public void hasMessageInMailbox(String mailbox) throws Throwable {
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(userStepdefs.getConnectedUser(),
                         userStepdefs.getUserPassword(userStepdefs.getConnectedUser()))
                 .select(mailbox);
@@ -69,7 +69,7 @@ public class ImapStepdefs {
     @Then("^the message has IMAP flag \"([^\"]*)\" in mailbox \"([^\"]*)\" for \"([^\"]*)\"$")
     public void hasMessageWithFlagInMailbox(String flags, String mailbox, String username) throws Throwable {
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(userStepdefs.getConnectedUser(),
                         userStepdefs.getUserPassword(username))
                 .select(mailbox);
@@ -81,7 +81,7 @@ public class ImapStepdefs {
     @Then("^the user has a IMAP notification about (\\d+) new message when selecting mailbox \"([^\"]*)\"$")
     public void hasANotificationAboutNewMessagesInMailbox(int numOfNewMessage, String mailbox) throws Throwable {
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(userStepdefs.getConnectedUser(),
                         userStepdefs.getUserPassword(userStepdefs.getConnectedUser()))
                 .select(mailbox);
@@ -94,7 +94,7 @@ public class ImapStepdefs {
     @Then("^the user does not have a IMAP message in mailbox \"([^\"]*)\"$")
     public void hasNoMessageInMailbox(String mailbox) throws Throwable {
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(userStepdefs.getConnectedUser(),
                         userStepdefs.getUserPassword(userStepdefs.getConnectedUser()))
                 .select(mailbox);
@@ -110,7 +110,7 @@ public class ImapStepdefs {
         String password = userStepdefs.getUserPassword(login);
 
         imapConnections.put(mailbox, new IMAPMessageReader()
-            .connect(LOCALHOST, IMAP_PORT)
+            .connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(login, password)
             .select(mailbox));
     }
@@ -135,7 +135,7 @@ public class ImapStepdefs {
         String password = userStepdefs.getUserPassword(login);
 
         try (IMAPMessageReader imapMessageReader = new IMAPMessageReader()) {
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST, mainStepdefs.jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(login, password)
                 .select(srcMailbox);
             assertThat(imapMessageReader).isNotNull();

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/imapserver.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/imapserver.xml
index 5db05e9..aa7c2fb 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/imapserver.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/imapserver.xml
@@ -23,7 +23,7 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/smtpserver.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/smtpserver.xml
index eb84850..0211d77 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/smtpserver.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
index a6fe7a2..b5edfb2 100644
--- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
+++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
@@ -119,6 +119,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
 
     private MBeanServer mbeanServer;
 
+    private int port;
 
     @Inject
     public final void setFileSystem(FileSystem filesystem) {
@@ -264,6 +265,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
             executionHandler = createExecutionHander();
             frameHandlerFactory = createFrameHandlerFactory();
             bind();
+            port = retrieveFirstBindedPort();
 
             mbeanServer = ManagementFactory.getPlatformMBeanServer();
             registerMBean();
@@ -274,6 +276,20 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
     
     }
 
+    private int retrieveFirstBindedPort() {
+        List<InetSocketAddress> listenAddresses = getListenAddresses();
+        InetSocketAddress inetSocketAddress = listenAddresses.get(0);
+        return inetSocketAddress.getPort();
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public boolean useSSL() {
+        return useSSL;
+    }
+
     @PreDestroy
     public final void destroy() {
         

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
index 7775024..dd466a0 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.lmtpserver.netty;
 
+import javax.inject.Inject;
+
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
@@ -25,6 +27,7 @@ import org.jboss.netty.util.HashedWheelTimer;
 
 public class OioLMTPServerFactory extends LMTPServerFactory {
 
+    @Inject
     public OioLMTPServerFactory(ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory,
                                 HashedWheelTimer hashedWheelTimer) {
         super(loader, fileSystem, metricFactory, hashedWheelTimer);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
index 44d8b80..d95d24a 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.smtpserver.netty;
 
+import javax.inject.Inject;
+
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.metrics.api.MetricFactory;
@@ -27,6 +29,7 @@ import org.jboss.netty.util.HashedWheelTimer;
 
 public class OioSMTPServerFactory extends SMTPServerFactory {
 
+    @Inject
     public OioSMTPServerFactory(DNSService dns, ProtocolHandlerLoader loader, FileSystem fileSystem,
                                 MetricFactory metricFactory, HashedWheelTimer hashedWheelTimer) {
         super(dns, loader, fileSystem, metricFactory, hashedWheelTimer);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
index 632f574..304dd07 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
@@ -51,9 +51,9 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
     /**
      * Whether authentication is required to use this SMTP server.
      */
-    private static final int AUTH_DISABLED = 0;
-    private static final int AUTH_REQUIRED = 1;
-    private static final int AUTH_ANNOUNCE = 2;
+    public static final int AUTH_DISABLED = 0;
+    public static final int AUTH_REQUIRED = 1;
+    public static final int AUTH_ANNOUNCE = 2;
     private int authRequired = AUTH_DISABLED;
     
     /**
@@ -339,4 +339,7 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
         return new AllButStartTlsLineChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH);
     }
 
+    public int getAuthRequired() {
+        return authRequired;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/webadmin-integration-test/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/resources/imapserver.xml b/server/protocols/webadmin-integration-test/src/test/resources/imapserver.xml
index 28ce44c..e997022 100644
--- a/server/protocols/webadmin-integration-test/src/test/resources/imapserver.xml
+++ b/server/protocols/webadmin-integration-test/src/test/resources/imapserver.xml
@@ -23,7 +23,7 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
@@ -38,7 +38,7 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/webadmin-integration-test/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/resources/lmtpserver.xml b/server/protocols/webadmin-integration-test/src/test/resources/lmtpserver.xml
index 5c4a9c7..7739071 100644
--- a/server/protocols/webadmin-integration-test/src/test/resources/lmtpserver.xml
+++ b/server/protocols/webadmin-integration-test/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>127.0.0.1:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/webadmin-integration-test/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/resources/managesieveserver.xml b/server/protocols/webadmin-integration-test/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/protocols/webadmin-integration-test/src/test/resources/managesieveserver.xml
+++ b/server/protocols/webadmin-integration-test/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/webadmin-integration-test/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/resources/pop3server.xml b/server/protocols/webadmin-integration-test/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/protocols/webadmin-integration-test/src/test/resources/pop3server.xml
+++ b/server/protocols/webadmin-integration-test/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/protocols/webadmin-integration-test/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/src/test/resources/smtpserver.xml b/server/protocols/webadmin-integration-test/src/test/resources/smtpserver.xml
index a3d4b8f..c932ff1 100644
--- a/server/protocols/webadmin-integration-test/src/test/resources/smtpserver.xml
+++ b/server/protocols/webadmin-integration-test/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -46,7 +46,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -74,7 +74,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>


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


[13/13] james-project git commit: JAMES-2530 Add a convenience `toCoreUser` to MailboxSession

Posted by ad...@apache.org.
JAMES-2530 Add a convenience `toCoreUser` to MailboxSession


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2dbdc83a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2dbdc83a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2dbdc83a

Branch: refs/heads/master
Commit: 2dbdc83a22829ed75cffc884ad42ae1d5d480af0
Parents: 80d0dec
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 12:30:16 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:52 2018 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/james/mailbox/MailboxSession.java   | 4 ++++
 .../main/java/org/apache/james/jmap/methods/GetFilterMethod.java | 4 +---
 .../main/java/org/apache/james/jmap/methods/SetFilterMethod.java | 4 +---
 .../jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java  | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2dbdc83a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
index 4ac93a1..50136b9 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
@@ -108,6 +108,10 @@ public interface MailboxSession {
         List<Locale> getLocalePreferences();
         
         boolean isSameUser(String username);
+
+        default org.apache.james.core.User getCoreUser() {
+            return org.apache.james.core.User.fromUsername(getUserName());
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/2dbdc83a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
index 5c04c60..2dac51e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetFilterMethod.java
@@ -81,9 +81,7 @@ public class GetFilterMethod implements Method {
 
     private Stream<JmapResponse> process(ClientId clientId, MailboxSession mailboxSession, GetFilterRequest request) {
         try {
-            User user = User.fromUsername(mailboxSession.getUser().getUserName());
-
-            return retrieveFilter(clientId, user);
+            return retrieveFilter(clientId, mailboxSession.getUser().getCoreUser());
         } catch (Exception e) {
             LOGGER.warn("Failed to retrieve filter");
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/2dbdc83a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
index b9eb9e7..e6184ec 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetFilterMethod.java
@@ -121,9 +121,7 @@ public class SetFilterMethod implements Method {
 
     private Stream<JmapResponse> process(ClientId clientId, MailboxSession mailboxSession, SetFilterRequest request) {
         try {
-            User user = User.fromUsername(mailboxSession.getUser().getUserName());
-
-            return updateFilter(clientId, request, user);
+            return updateFilter(clientId, request, mailboxSession.getUser().getCoreUser());
         } catch (MultipleMailboxIdException e) {
             LOGGER.debug("Rule targeting several mailboxes", e);
             return Stream.of(multipleMailboxesError(clientId, e));

http://git-wip-us.apache.org/repos/asf/james-project/blob/2dbdc83a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
index 99f54f5..e162961 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
@@ -142,7 +142,7 @@ public class JmapMDN {
 
     public Message generateMDNMessage(Message originalMessage, MailboxSession mailboxSession) throws ParseException, IOException, InvalidOriginMessageForMDNException {
 
-        User user = User.fromUsername(mailboxSession.getUser().getUserName());
+        User user = mailboxSession.getUser().getCoreUser();
 
         return MDN.builder()
             .report(generateReport(originalMessage, mailboxSession))


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


[05/13] james-project git commit: JAMES-2074 Run James on random ports

Posted by ad...@apache.org.
JAMES-2074 Run James on random ports


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/60b1d219
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/60b1d219
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/60b1d219

Branch: refs/heads/master
Commit: 60b1d21906d0a6f46d6ded5aa399b1a4cb24c998
Parents: 1a5f21a
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Jul 6 14:44:27 2016 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:08:46 2018 +0200

----------------------------------------------------------------------
 .../mpt/smtp/CassandraForwardSmtpTest.java      |  26 ++-
 .../smtp/CassandraSmtpStarttlsCommandTest.java  |  28 +--
 .../james/mpt/smtp/CassandraSmtpTestRule.java   | 172 +++++++++++++++++++
 .../apache/james/mpt/smtp/SmtpTestModule.java   |  45 -----
 .../smtp/host/CassandraJamesSmtpHostSystem.java | 132 --------------
 .../cassandra/src/test/resources/smtpserver.xml |   6 +-
 pom.xml                                         |  10 ++
 server/app/src/test/resources/imapserver.xml    |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 server/app/src/test/resources/pop3server.xml    |   2 +-
 server/app/src/test/resources/smtpserver.xml    |   2 +-
 .../src/test/resources/imapserver.xml           |   4 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 .../apache/james/CassandraJamesServerTest.java  |   2 +-
 .../james/CassandraJmapJamesServerTest.java     |  44 +++++
 .../CassandraMailRepositoryIntegrationTest.java |   3 +-
 .../org/apache/james/CassandraNodeConfTest.java |   4 +-
 .../james/CassandraVersionCheckingTest.java     |   4 +-
 .../org/apache/james/CassandraWithTikaTest.java |   2 +-
 .../java/org/apache/james/ESReporterTest.java   |   4 +-
 .../JamesServerWithRetryConnectionTest.java     |   4 +-
 .../src/test/resources/imapserver.xml           |  10 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 .../james/CassandraLdapJamesServerTest.java     |   8 +-
 .../james/CassandraLdapJmapJamesServerTest.java |  53 ++++++
 .../src/test/resources/imapserver.xml           |  10 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 .../apache/james/AbstractJamesServerTest.java   |  20 +--
 .../org/apache/james/JPAJamesServerTest.java    |  12 +-
 .../JPAJamesServerWithSqlValidationTest.java    |   5 +
 .../jpa-guice/src/test/resources/imapserver.xml |  10 +-
 .../jpa-guice/src/test/resources/lmtpserver.xml |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../jpa-guice/src/test/resources/pop3server.xml |   2 +-
 .../jpa-guice/src/test/resources/smtpserver.xml |   6 +-
 .../org/apache/james/JPAJamesServerTest.java    |   5 +-
 .../src/test/resources/smtpserver.xml           |   4 +-
 .../org/apache/james/JPAJamesServerTest.java    |   5 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../jpa-smtp/src/test/resources/smtpserver.xml  |   6 +-
 .../org/apache/james/MemoryJamesServerTest.java |   2 +-
 .../apache/james/MemoryJmapJamesServerTest.java |  39 +++++
 .../src/test/resources/imapserver.xml           |  10 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 .../modules/protocols/IMAPServerModule.java     |   7 +
 .../james/modules/protocols/ImapGuiceProbe.java |  58 +++++++
 .../james/AbstractJmapJamesServerTest.java      |  68 --------
 .../modules/protocols/LMTPServerModule.java     |   7 +
 .../james/modules/protocols/LmtpGuiceProbe.java |  45 +++++
 .../modules/protocols/POP3ServerModule.java     |   7 +
 .../james/modules/protocols/Pop3GuiceProbe.java |  45 +++++
 .../modules/protocols/SMTPServerModule.java     |   6 +
 .../james/modules/protocols/SmtpGuiceProbe.java |  60 +++++++
 .../main/java/org/apache/james/util/Port.java   |   4 +
 .../james/mailets/AddDeliveredToHeaderTest.java |   8 +-
 .../james/mailets/BounceIntegrationTest.java    |  32 ++--
 .../mailets/CommonMailetConfigurationTest.java  |   8 +-
 ...ResolutionRemoteDeliveryIntegrationTest.java |  16 +-
 .../GatewayRemoteDeliveryIntegrationTest.java   |  24 +--
 .../apache/james/mailets/MailetErrorsTest.java  |  38 ++--
 .../mailets/NetworkMatcherIntegrationTest.java  |  36 ++--
 .../RecipientRewriteTableIntegrationTest.java   |  42 ++---
 .../org/apache/james/mailets/SieveDelivery.java |   8 +-
 .../james/mailets/SmtpAuthIntegrationTest.java  |  12 +-
 .../james/mailets/configuration/Constants.java  |   2 -
 .../crypto/SMIMEDecryptIntegrationTest.java     |  16 +-
 .../crypto/SMIMESignIntegrationTest.java        |  12 +-
 .../james/smtp/SmtpAuthorizedAddressesTest.java |  14 +-
 .../james/smtp/SmtpBracketEnforcementTest.java  |  10 +-
 .../smtp/SmtpIdentityVerificationTest.java      |   8 +-
 .../apache/james/smtp/SmtpNullSenderTest.java   |  10 +-
 .../james/smtp/SmtpSizeLimitationTest.java      |   6 +-
 .../james/transport/mailets/AddFooterTest.java  |  12 +-
 .../mailets/AmqpForwardAttachmentTest.java      |   8 +-
 .../transport/mailets/ContactExtractorTest.java |   8 +-
 .../transport/mailets/DlpIntegrationTest.java   |  11 +-
 .../mailets/GroupMappingRelayTest.java          |   4 +-
 .../transport/mailets/GroupMappingTest.java     |  76 ++++----
 .../mailets/ICSAttachmentWorkflowTest.java      |  44 ++---
 .../mailets/IsOverQuotaMatcherTest.java         |  28 +--
 .../transport/mailets/SpamAssassinTest.java     |  22 +--
 .../transport/mailets/StripAttachmentTest.java  |   8 +-
 .../transport/mailets/ToRepositoryTest.java     |  14 +-
 .../mailets/ToSenderDomainRepositoryTest.java   |  14 +-
 .../src/test/resources/imapserver.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   4 +-
 .../src/test/resources/imapserver.xml           |   4 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 .../jmap-integration-testing-common/pom.xml     |  10 ++
 .../org/apache/james/jmap/TestingConstants.java |   4 -
 .../jmap/VacationRelayIntegrationTest.java      |   4 +-
 .../integration/SetMessagesMethodTest.java      |   8 +-
 .../integration/SpamAssassinContract.java       |  10 +-
 .../integration/cucumber/ImapStepdefs.java      |  14 +-
 .../src/test/resources/imapserver.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   2 +-
 .../netty/AbstractConfigurableAsyncServer.java  |  16 ++
 .../lmtpserver/netty/OioLMTPServerFactory.java  |   3 +
 .../smtpserver/netty/OioSMTPServerFactory.java  |   3 +
 .../james/smtpserver/netty/SMTPServer.java      |   9 +-
 .../src/test/resources/imapserver.xml           |   4 +-
 .../src/test/resources/lmtpserver.xml           |   2 +-
 .../src/test/resources/managesieveserver.xml    |   2 +-
 .../src/test/resources/pop3server.xml           |   2 +-
 .../src/test/resources/smtpserver.xml           |   6 +-
 119 files changed, 1042 insertions(+), 696 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java
----------------------------------------------------------------------
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 abc50df..331a65b 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,37 +19,35 @@
 
 package org.apache.james.mpt.smtp;
 
+import static org.apache.james.mpt.smtp.CassandraSmtpTestRule.SmtpServerConnectedType.SMTP_GLOBAL_SERVER;
+
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+import org.junit.Rule;
 
 public class CassandraForwardSmtpTest extends ForwardSmtpTest {
 
     @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
-    
-    private SmtpHostSystem system;
 
-    @Override
+    @Rule
+    public CassandraSmtpTestRule cassandraSmtpTestRule = new CassandraSmtpTestRule(SMTP_GLOBAL_SERVER, cassandraServer.getHost());
+
     @Before
+    @Override
     public void setUp() throws Exception {
-        Injector injector = Guice.createInjector(
-                new SmtpTestModule(SmtpTestModule.SMTP_PORT, cassandraServer.getHost()));
-        system = injector.getInstance(SmtpHostSystem.class);
-        system.beforeTest();
+        cassandraSmtpTestRule.beforeTest();
         super.setUp();
     }
-    
+
     @Override
     protected SmtpHostSystem createSmtpHostSystem() {
-        return system;
+        return cassandraSmtpTestRule;
     }
 
     @After
-    public void tearDown() throws Exception {
-        system.afterTest();
+    public void tearDown() {
+        cassandraSmtpTestRule.afterTest();
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java
----------------------------------------------------------------------
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 18f052c..245fa1b 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,37 +19,37 @@
 
 package org.apache.james.mpt.smtp;
 
+import static org.apache.james.mpt.smtp.CassandraSmtpTestRule.SmtpServerConnectedType.SMTP_START_TLS_SERVER;
+
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+import org.junit.Rule;
 
 public class CassandraSmtpStarttlsCommandTest extends SmtpStarttlsCommandTest {
 
     @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
-    
-    private SmtpHostSystem system;
 
-    @Override
+    @Rule
+    public CassandraSmtpTestRule cassandraSmtpTestRule = new CassandraSmtpTestRule(SMTP_START_TLS_SERVER, cassandraServer.getHost());
+
     @Before
+    @Override
     public void setUp() throws Exception {
-        Injector injector = Guice.createInjector(
-                new SmtpTestModule(SmtpTestModule.SMTP_START_TLS_PORT, cassandraServer.getHost()));
-        system = injector.getInstance(SmtpHostSystem.class);
-        system.beforeTest();
+        cassandraSmtpTestRule.beforeTest();
         super.setUp();
     }
-    
+
     @Override
     protected SmtpHostSystem createSmtpHostSystem() {
-        return system;
+        return cassandraSmtpTestRule;
     }
 
+
     @After
-    public void tearDown() throws Exception {
-        system.afterTest();
+    public void tearDown() {
+        cassandraSmtpTestRule.afterTest();
     }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRule.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..6ec1107
--- /dev/null
+++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRule.java
@@ -0,0 +1,172 @@
+/****************************************************************
+ * 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 java.util.Iterator;
+import java.util.function.Function;
+
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.james.CassandraJamesServerMain;
+import org.apache.james.GuiceJamesServer;
+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.protocols.ProtocolHandlerModule;
+import org.apache.james.modules.protocols.SMTPServerModule;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
+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 CassandraSmtpTestRule 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<SmtpGuiceProbe, Port> portExtractor;
+
+        private SmtpServerConnectedType(Function<SmtpGuiceProbe, Port> portExtractor) {
+            this.portExtractor = portExtractor;
+        }
+
+        public Function<SmtpGuiceProbe, Port> getPortExtractor() {
+            return portExtractor;
+        }
+    }
+
+    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 CassandraSmtpTestRule(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<String> split = Splitter.on("@").split(userAtDomain).iterator();
+        split.next();
+        String domain = split.next();
+
+        createDomainIfNeeded(domain);
+        jamesServer.getProbe(DataProbeImpl.class).addUser(userAtDomain, password);
+        return true;
+    }
+
+    @Override
+    public Session newSession(Continuation continuation) throws Exception {
+        return sessionFactory.newSession(continuation);
+    }
+
+    private void createDomainIfNeeded(String domain) throws Exception {
+        if (!jamesServer.getProbe(DataProbeImpl.class).containsDomain(domain)) {
+            jamesServer.getProbe(DataProbeImpl.class).addDomain(domain);
+        }
+    }
+
+    @Override
+    public void addAddressMapping(String user, String domain, String address) throws Exception {
+        jamesServer.getProbe(DataProbeImpl.class).addAddressMapping(user, domain, address);
+    }
+
+    @Override
+    public void beforeTest() throws Exception {
+        inMemoryDNSService = new InMemoryDNSService();
+        folder = new TemporaryFolder();
+        folder.create();
+        jamesServer = createJamesServer();
+        jamesServer.start();
+
+        createSessionFactory();
+    }
+
+    @Override
+    public void afterTest() {
+        jamesServer.stop();
+        folder.delete();
+    }
+
+    @Override
+    public InMemoryDNSService getInMemoryDnsService() {
+        return inMemoryDNSService;
+    }
+
+    private GuiceJamesServer createJamesServer() throws Exception {
+        Configuration configuration = Configuration.builder()
+            .workingDirectory(folder.newFolder())
+            .configurationFromClasspath()
+            .build();
+
+        return GuiceJamesServer.forConfiguration(configuration)
+            .combineWith(
+                CassandraJamesServerMain.CASSANDRA_SERVER_CORE_MODULE,
+                SMTP_PROTOCOL_MODULE,
+                binder -> binder.bind(MailQueueItemDecoratorFactory.class).to(RawMailQueueItemDecoratorFactory.class),
+                binder -> binder.bind(CamelMailetContainerModule.DefaultProcessorsConfigurationSupplier.class)
+                    .toInstance(DefaultConfigurationBuilder::new))
+            .overrideWith(
+                binder -> binder.bind(ClusterConfiguration.class).toInstance(
+                    ClusterConfiguration.builder()
+                        .host(cassandraHost)
+                        .keyspace("testing")
+                        .replicationFactor(1)
+                        .build()),
+                binder -> binder.bind(DNSService.class).toInstance(inMemoryDNSService));
+    }
+
+    private void createSessionFactory() {
+        SmtpGuiceProbe smtpProbe = jamesServer.getProbe(SmtpGuiceProbe.class);
+        Port smtpPort = smtpServerConnectedType.getPortExtractor().apply(smtpProbe);
+
+        sessionFactory = new ExternalSessionFactory("localhost", smtpPort, new SystemLoggingMonitor(), "220 mydomain.tld smtp");
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
deleted file mode 100644
index fa87b4b..0000000
--- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
+++ /dev/null
@@ -1,45 +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.james.mpt.smtp.host.CassandraJamesSmtpHostSystem;
-import org.apache.james.util.Host;
-import org.apache.james.util.Port;
-
-import com.google.inject.AbstractModule;
-
-public class SmtpTestModule extends AbstractModule {
-
-    public static Port SMTP_PORT = new Port(1025);
-    public static Port SMTP_START_TLS_PORT = new Port(1587);
-
-    private final Port smtpPort;
-    private final Host cassandraHost;
-
-    public SmtpTestModule(Port smtpPort, Host cassandraHost) {
-        this.smtpPort = smtpPort;
-        this.cassandraHost = cassandraHost;
-    }
-    
-    @Override
-    protected void configure() {
-        bind(SmtpHostSystem.class).toInstance(new CassandraJamesSmtpHostSystem(smtpPort, cassandraHost));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
deleted file mode 100644
index 11c01fe..0000000
--- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
+++ /dev/null
@@ -1,132 +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.host;
-
-import java.util.Iterator;
-
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.james.CassandraJamesServerMain;
-import org.apache.james.GuiceJamesServer;
-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.protocols.ProtocolHandlerModule;
-import org.apache.james.modules.protocols.SMTPServerModule;
-import org.apache.james.modules.server.CamelMailetContainerModule;
-import org.apache.james.mpt.monitor.SystemLoggingMonitor;
-import org.apache.james.mpt.session.ExternalSessionFactory;
-import org.apache.james.mpt.smtp.SmtpHostSystem;
-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 com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.inject.Module;
-import com.google.inject.util.Modules;
-
-public class CassandraJamesSmtpHostSystem extends ExternalSessionFactory implements SmtpHostSystem {
-
-    private static final Module SMTP_PROTOCOL_MODULE = Modules.combine(
-        new ProtocolHandlerModule(),
-        new SMTPServerModule());
-
-    private TemporaryFolder folder;
-
-    private GuiceJamesServer jamesServer;
-    private InMemoryDNSService inMemoryDNSService;
-    private final Host cassandraHost;
-
-
-    public CassandraJamesSmtpHostSystem(Port smtpPort, Host cassandraHost) {
-        super("localhost", smtpPort, new SystemLoggingMonitor(), "220 mydomain.tld smtp");
-        this.cassandraHost = cassandraHost;
-    }
-
-    @Override
-    public boolean addUser(String userAtDomain, String password) throws Exception {
-        Preconditions.checkArgument(userAtDomain.contains("@"), "The 'user' should contain the 'domain'");
-        Iterator<String> split = Splitter.on("@").split(userAtDomain).iterator();
-        split.next();
-        String domain = split.next();
-
-        createDomainIfNeeded(domain);
-        jamesServer.getProbe(DataProbeImpl.class).addUser(userAtDomain, password);
-        return true;
-    }
-
-    private void createDomainIfNeeded(String domain) throws Exception {
-        if (!jamesServer.getProbe(DataProbeImpl.class).containsDomain(domain)) {
-            jamesServer.getProbe(DataProbeImpl.class).addDomain(domain);
-        }
-    }
-
-    @Override
-    public void addAddressMapping(String user, String domain, String address) throws Exception {
-        jamesServer.getProbe(DataProbeImpl.class).addAddressMapping(user, domain, address);
-    }
-
-    @Override
-    public void beforeTest() throws Exception {
-        inMemoryDNSService = new InMemoryDNSService();
-        folder = new TemporaryFolder();
-        folder.create();
-        jamesServer = createJamesServer();
-        jamesServer.start();
-    }
-
-    @Override
-    public void afterTest() {
-        jamesServer.stop();
-        folder.delete();
-    }
-
-    @Override
-    public InMemoryDNSService getInMemoryDnsService() {
-        return inMemoryDNSService;
-    }
-
-    protected GuiceJamesServer createJamesServer() throws Exception {
-        Configuration configuration = Configuration.builder()
-            .workingDirectory(folder.newFolder())
-            .configurationFromClasspath()
-            .build();
-
-        return GuiceJamesServer.forConfiguration(configuration)
-            .combineWith(
-                CassandraJamesServerMain.CASSANDRA_SERVER_CORE_MODULE,
-                SMTP_PROTOCOL_MODULE,
-                binder -> binder.bind(MailQueueItemDecoratorFactory.class).to(RawMailQueueItemDecoratorFactory.class),
-                binder -> binder.bind(CamelMailetContainerModule.DefaultProcessorsConfigurationSupplier.class)
-                    .toInstance(DefaultConfigurationBuilder::new))
-            .overrideWith(
-                binder -> binder.bind(ClusterConfiguration.class).toInstance(
-                    ClusterConfiguration.builder()
-                        .host(cassandraHost)
-                        .keyspace("testing")
-                        .replicationFactor(1)
-                        .build()),
-                binder -> binder.bind(DNSService.class).toInstance(inMemoryDNSService));
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml b/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
index b5a4608..a862fad 100644
--- a/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
+++ b/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
@@ -23,7 +23,7 @@
     <smtpserver enabled="true">
         <heloName autodetect="false">mydomain.tld</heloName>
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -46,7 +46,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -73,7 +73,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="true">
             <keystore>keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5cd48c8..87575e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1277,6 +1277,11 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
+                <artifactId>james-server-guice-imap</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-guice-jmap</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -1298,6 +1303,11 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
+                <artifactId>james-server-guice-smtp</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-guice-webadmin</artifactId>
                 <version>${project.version}</version>
             </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/app/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/app/src/test/resources/imapserver.xml b/server/app/src/test/resources/imapserver.xml
index 4f95587..7bc66e2 100644
--- a/server/app/src/test/resources/imapserver.xml
+++ b/server/app/src/test/resources/imapserver.xml
@@ -37,7 +37,7 @@
        <!-- port 993 is the well-known/IANA registered port for IMAPS  ie over SSL/TLS -->
        <!-- Please NOTE: you should add this IP also to your RemoteAddrNotInNetwork -->
        <!-- in order to avoid relay check for locally generated bounces -->
-       <bind>0.0.0.0:1433</bind>
+       <bind>0.0.0.0:0</bind>
 
        <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/app/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/app/src/test/resources/managesieveserver.xml b/server/app/src/test/resources/managesieveserver.xml
index 22e7a53..f8c83ee 100644
--- a/server/app/src/test/resources/managesieveserver.xml
+++ b/server/app/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/app/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/app/src/test/resources/pop3server.xml b/server/app/src/test/resources/pop3server.xml
index 2acc1c5..b610137 100644
--- a/server/app/src/test/resources/pop3server.xml
+++ b/server/app/src/test/resources/pop3server.xml
@@ -35,7 +35,7 @@
        <!-- Configure this to bind to a specific inetaddress -->
        <!-- port 995 is the well-known/IANA registered port for POP3S  ie over SSL/TLS -->
        <!-- port 110 is the well-known/IANA registered port for Standard POP3 -->
-       <bind>0.0.0.0:1100</bind>
+       <bind>0.0.0.0:0</bind>
 
        <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/app/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/app/src/test/resources/smtpserver.xml b/server/app/src/test/resources/smtpserver.xml
index 6d6681d..0307dc2 100644
--- a/server/app/src/test/resources/smtpserver.xml
+++ b/server/app/src/test/resources/smtpserver.xml
@@ -25,7 +25,7 @@
 <smtpservers>
   <smtpserver enabled="true">
     <jmxName>smtpserver</jmxName>
-    <bind>0.0.0.0:2525</bind>
+    <bind>0.0.0.0:0</bind>
     <connectionBacklog>200</connectionBacklog>
     <tls socketTLS="false" startTLS="false">
       <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/cli-integration/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/resources/imapserver.xml b/server/container/cli-integration/src/test/resources/imapserver.xml
index 28ce44c..e997022 100644
--- a/server/container/cli-integration/src/test/resources/imapserver.xml
+++ b/server/container/cli-integration/src/test/resources/imapserver.xml
@@ -23,7 +23,7 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
@@ -38,7 +38,7 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/cli-integration/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/resources/lmtpserver.xml b/server/container/cli-integration/src/test/resources/lmtpserver.xml
index 5c4a9c7..7739071 100644
--- a/server/container/cli-integration/src/test/resources/lmtpserver.xml
+++ b/server/container/cli-integration/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>127.0.0.1:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/cli-integration/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/resources/managesieveserver.xml b/server/container/cli-integration/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/cli-integration/src/test/resources/managesieveserver.xml
+++ b/server/container/cli-integration/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/cli-integration/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/resources/pop3server.xml b/server/container/cli-integration/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/container/cli-integration/src/test/resources/pop3server.xml
+++ b/server/container/cli-integration/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/cli-integration/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/cli-integration/src/test/resources/smtpserver.xml b/server/container/cli-integration/src/test/resources/smtpserver.xml
index a3d4b8f..c932ff1 100644
--- a/server/container/cli-integration/src/test/resources/smtpserver.xml
+++ b/server/container/cli-integration/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -46,7 +46,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -74,7 +74,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
index 0a13642..61b04fb 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
@@ -24,7 +24,7 @@ import java.io.IOException;
 import org.junit.ClassRule;
 import org.junit.Rule;
 
-public class CassandraJamesServerTest extends AbstractJmapJamesServerTest {
+public class CassandraJamesServerTest extends AbstractJamesServerTest {
 
     @ClassRule
     public static DockerCassandraRule cassandra = new DockerCassandraRule();

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
new file mode 100644
index 0000000..f2d9d91
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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;
+
+import java.io.IOException;
+
+import org.junit.ClassRule;
+import org.junit.Rule;
+
+public class CassandraJmapJamesServerTest extends AbstractJmapJamesServerTest {
+
+    @ClassRule
+    public static DockerCassandraRule cassandra = new DockerCassandraRule();
+    
+    @Rule
+    public CassandraJmapTestRule cassandraJmap = CassandraJmapTestRule.defaultTestRule();
+
+    @Override
+    protected GuiceJamesServer createJamesServer() throws IOException {
+        return cassandraJmap.jmapServer(cassandra.getModule());
+    }
+
+    @Override
+    protected void clean() {
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java
index 3be4457..97c021a 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java
@@ -24,6 +24,7 @@ import static org.awaitility.Duration.FIVE_HUNDRED_MILLISECONDS;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.MailRepositoryProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -76,7 +77,7 @@ public class CassandraMailRepositoryIntegrationTest {
             .addDomain("domain.com")
             .addUser("user@domain.com", "secret");
 
-        smtpMessageSender.connect("127.0.0.1", 1025)
+        smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("denied@other.com", "user@domain.com");
 
         MailRepositoryProbeImpl repositoryProbe = server.getProbe(MailRepositoryProbeImpl.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
index 6747acf..81cadcc 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
@@ -27,6 +27,7 @@ import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
 
 import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.util.Host;
 import org.junit.After;
 import org.junit.Before;
@@ -38,7 +39,6 @@ import org.testcontainers.DockerClientFactory;
 public class CassandraNodeConfTest {
 
     private static final int CASSANDRA_PORT = 9042;
-    private static final int IMAP_PORT = 1143;
 
     private static String getDockerHostIp() {
         return DockerClientFactory.instance().dockerHostIpAddress();
@@ -102,7 +102,7 @@ public class CassandraNodeConfTest {
 
     private void assertThatServerStartCorrectly() throws Exception {
         jamesServer.start();
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", IMAP_PORT));
+        socketChannel.connect(new InetSocketAddress("127.0.0.1", jamesServer.getProbe(ImapGuiceProbe.class).getImapPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraVersionCheckingTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraVersionCheckingTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraVersionCheckingTest.java
index 4544587..585bb4a 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraVersionCheckingTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraVersionCheckingTest.java
@@ -33,6 +33,7 @@ import java.util.concurrent.CompletableFuture;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
 import org.apache.james.backends.cassandra.versions.SchemaVersion;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -43,7 +44,6 @@ import org.junit.rules.ExpectedException;
 public class CassandraVersionCheckingTest {
 
     private static final String LOCAL_HOST = "127.0.0.1";
-    private static final int IMAP_PORT = 1143;
     private static final SchemaVersion MIN_VERSION = new SchemaVersion(2);
     private static final SchemaVersion MAX_VERSION = new SchemaVersion(4);
 
@@ -155,7 +155,7 @@ public class CassandraVersionCheckingTest {
 
     private void assertThatServerStartCorrectly() throws Exception {
         jamesServer.start();
-        socketChannel.connect(new InetSocketAddress(LOCAL_HOST, IMAP_PORT));
+        socketChannel.connect(new InetSocketAddress(LOCAL_HOST, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort()));
         assertThat(getServerConnectionResponse(socketChannel))
             .startsWith("* OK JAMES IMAP4rev1 Server");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
index 408fef0..47dfc82 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
@@ -24,7 +24,7 @@ import java.io.IOException;
 import org.junit.ClassRule;
 import org.junit.Rule;
 
-public class CassandraWithTikaTest extends AbstractJmapJamesServerTest {
+public class CassandraWithTikaTest extends AbstractJamesServerTest {
 
     @ClassRule
     public static final DockerCassandraRule cassandra = new DockerCassandraRule();

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/ESReporterTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/ESReporterTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/ESReporterTest.java
index f7cab75..a25a7b4 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/ESReporterTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/ESReporterTest.java
@@ -35,6 +35,7 @@ import java.util.stream.Collectors;
 import org.apache.commons.net.imap.IMAPClient;
 import org.apache.james.jmap.api.access.AccessToken;
 import org.apache.james.modules.TestESMetricReporterModule;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.JmapGuiceProbe;
 import org.awaitility.Duration;
@@ -54,7 +55,6 @@ import io.restassured.http.ContentType;
 
 public class ESReporterTest {
 
-    private static final int IMAP_PORT = 1143;
     private static final int DELAY_IN_MS = 100;
     private static final int PERIOD_IN_MS = 100;
 
@@ -108,7 +108,7 @@ public class ESReporterTest {
     @Test
     public void timeMetricsShouldBeReportedWhenImapCommandsReceived() throws Exception {
         IMAPClient client = new IMAPClient();
-        client.connect(InetAddress.getLocalHost(), IMAP_PORT);
+        client.connect(InetAddress.getLocalHost(), server.getProbe(ImapGuiceProbe.class).getImapPort());
         client.login(USERNAME, PASSWORD);
         
         TimerTask timerTask = new TimerTask() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index 87397dd..73d5151 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -38,7 +39,6 @@ import org.junit.Test;
 import org.testcontainers.shaded.com.google.common.base.Throwables;
 
 public class JamesServerWithRetryConnectionTest {
-    private static final int IMAP_PORT = 1143;
     private static final long WAITING_TIME = TimeUnit.MILLISECONDS.convert(10, TimeUnit.SECONDS);
 
     @ClassRule
@@ -110,7 +110,7 @@ public class JamesServerWithRetryConnectionTest {
 
     private void assertThatServerStartCorrectly() throws Exception {
         jamesServer.start();
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", IMAP_PORT));
+        socketChannel.connect(new InetSocketAddress("127.0.0.1", jamesServer.getProbe(ImapGuiceProbe.class).getImapPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/imapserver.xml b/server/container/guice/cassandra-guice/src/test/resources/imapserver.xml
index 28ce44c..509fdb3 100644
--- a/server/container/guice/cassandra-guice/src/test/resources/imapserver.xml
+++ b/server/container/guice/cassandra-guice/src/test/resources/imapserver.xml
@@ -23,13 +23,13 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
             keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
               -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>
@@ -38,13 +38,13 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
-        <tls socketTLS="false" startTLS="false">
+        <tls socketTLS="false" startTLS="true">
             <!-- To create a new keystore execute:
               keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
              -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/lmtpserver.xml b/server/container/guice/cassandra-guice/src/test/resources/lmtpserver.xml
index 5c4a9c7..ffa6eae 100644
--- a/server/container/guice/cassandra-guice/src/test/resources/lmtpserver.xml
+++ b/server/container/guice/cassandra-guice/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/managesieveserver.xml b/server/container/guice/cassandra-guice/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/guice/cassandra-guice/src/test/resources/managesieveserver.xml
+++ b/server/container/guice/cassandra-guice/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/pop3server.xml b/server/container/guice/cassandra-guice/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/container/guice/cassandra-guice/src/test/resources/pop3server.xml
+++ b/server/container/guice/cassandra-guice/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-guice/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/smtpserver.xml b/server/container/guice/cassandra-guice/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/container/guice/cassandra-guice/src/test/resources/smtpserver.xml
+++ b/server/container/guice/cassandra-guice/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
index 5aa6c35..9009a21 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
+++ b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
@@ -26,6 +26,8 @@ import java.io.IOException;
 
 import org.apache.commons.net.imap.IMAPClient;
 import org.apache.james.core.Domain;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.user.ldap.LdapGenericContainer;
 import org.apache.james.utils.IMAPMessageReader;
 import org.apache.james.utils.SMTPMessageSender;
@@ -86,19 +88,19 @@ public class CassandraLdapJamesServerTest extends AbstractJmapJamesServerTest {
 
     @Test
     public void userFromLdapShouldLoginViaImapProtocol() throws Exception {
-        imapClient.connect(JAMES_SERVER_HOST, IMAP_PORT);
+        imapClient.connect(JAMES_SERVER_HOST, server.getProbe(ImapGuiceProbe.class).getImapPort());
 
         assertThat(imapClient.login(JAMES_USER, PASSWORD)).isTrue();
     }
 
     @Test
     public void mailsShouldBeWellReceivedBeforeFirstUserConnectionWithLdap() throws Exception {
-        messageSender.connect("127.0.0.1", 1025)
+        messageSender.connect(JAMES_SERVER_HOST, server.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("bob@any.com", JAMES_USER + "@localhost");
 
         calmlyAwait.until(() -> server.getProbe(SpoolerProbe.class).processingFinished());
 
-        imapMessageReader.connect("127.0.0.1", 1143)
+        imapMessageReader.connect(JAMES_SERVER_HOST, server.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(JAMES_USER, PASSWORD)
             .select("INBOX")
             .awaitMessage(calmlyAwait);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
new file mode 100644
index 0000000..14a965d
--- /dev/null
+++ b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.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;
+
+import java.io.IOException;
+
+import org.apache.james.user.ldap.LdapGenericContainer;
+import org.junit.Rule;
+import org.junit.rules.RuleChain;
+
+public class CassandraLdapJmapJamesServerTest extends AbstractJmapJamesServerTest {
+    private static final String DOMAIN = "james.org";
+    private static final String ADMIN_PASSWORD = "mysecretpassword";
+
+    private LdapGenericContainer ldapContainer = LdapGenericContainer.builder()
+        .domain(DOMAIN)
+        .password(ADMIN_PASSWORD)
+        .build();
+    private CassandraLdapJmapTestRule cassandraLdapJmap = CassandraLdapJmapTestRule.defaultTestRule();
+
+    @Rule
+    public RuleChain ruleChain = RuleChain.outerRule(ldapContainer).around(cassandraLdapJmap);
+
+    @Override
+    protected GuiceJamesServer createJamesServer() throws IOException {
+        ldapContainer.start();
+        return cassandraLdapJmap.jmapServer(ldapContainer.getLdapHost());
+    }
+
+    @Override
+    protected void clean() {
+        if (ldapContainer != null) {
+            ldapContainer.stop();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/resources/imapserver.xml b/server/container/guice/cassandra-ldap-guice/src/test/resources/imapserver.xml
index 28ce44c..509fdb3 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/resources/imapserver.xml
+++ b/server/container/guice/cassandra-ldap-guice/src/test/resources/imapserver.xml
@@ -23,13 +23,13 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
             keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
               -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>
@@ -38,13 +38,13 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
-        <tls socketTLS="false" startTLS="false">
+        <tls socketTLS="false" startTLS="true">
             <!-- To create a new keystore execute:
               keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
              -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/resources/lmtpserver.xml b/server/container/guice/cassandra-ldap-guice/src/test/resources/lmtpserver.xml
index 5c4a9c7..7739071 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/resources/lmtpserver.xml
+++ b/server/container/guice/cassandra-ldap-guice/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>127.0.0.1:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/resources/managesieveserver.xml b/server/container/guice/cassandra-ldap-guice/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/resources/managesieveserver.xml
+++ b/server/container/guice/cassandra-ldap-guice/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/resources/pop3server.xml b/server/container/guice/cassandra-ldap-guice/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/resources/pop3server.xml
+++ b/server/container/guice/cassandra-ldap-guice/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/cassandra-ldap-guice/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/resources/smtpserver.xml b/server/container/guice/cassandra-ldap-guice/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/resources/smtpserver.xml
+++ b/server/container/guice/cassandra-ldap-guice/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
index f10d8d6..c87ad4b 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/AbstractJamesServerTest.java
@@ -27,6 +27,10 @@ import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.LmtpGuiceProbe;
+import org.apache.james.modules.protocols.Pop3GuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.utils.DataProbeImpl;
 import org.junit.After;
@@ -37,11 +41,7 @@ import com.google.inject.Module;
 
 public abstract class AbstractJamesServerTest {
 
-    private static final int IMAP_PORT = 1143; // You need to be root (superuser) to bind to ports under 1024.
-    private static final int IMAP_PORT_SSL = 1993;
-    private static final int POP3_PORT = 1110;
-    private static final int SMTP_PORT = 1025;
-    private static final int LMTP_PORT = 1024;
+    protected static final String JAMES_SERVER_HOST = "127.0.0.1";
 
     public static final Module DOMAIN_LIST_CONFIGURATION_MODULE = binder -> binder.bind(DomainListConfiguration.class)
         .toInstance(DomainListConfiguration.builder()
@@ -87,31 +87,31 @@ public abstract class AbstractJamesServerTest {
 
     @Test
     public void connectIMAPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", IMAP_PORT));
+        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, server.getProbe(ImapGuiceProbe.class).getImapPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
     }
 
     @Test
     public void connectOnSecondaryIMAPServerIMAPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", IMAP_PORT_SSL));
+        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, server.getProbe(ImapGuiceProbe.class).getImapsPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
     }
 
     @Test
     public void connectPOP3ServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", POP3_PORT));
+        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, server.getProbe(Pop3GuiceProbe.class).getPop3Port()));
         assertThat(getServerConnectionResponse(socketChannel)).contains("POP3 server (JAMES POP3 Server ) ready");
     }
 
     @Test
     public void connectSMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", SMTP_PORT));
+        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, server.getProbe(SmtpGuiceProbe.class).getSmtpPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server");
     }
 
     @Test
     public void connectLMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", LMTP_PORT));
+        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, server.getProbe(LmtpGuiceProbe.class).getLmtpPort()));
         assertThat(getServerConnectionResponse(socketChannel)).contains("LMTP Server (JAMES Protocols Server) ready");
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
index b4acca6..40c48c6 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
@@ -26,6 +26,8 @@ import java.io.IOException;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailbox.store.mail.model.SerializableQuotaValue;
 import org.apache.james.modules.QuotaProbesImpl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -48,9 +50,6 @@ public class JPAJamesServerTest extends AbstractJamesServerTest {
     private static final String DOMAIN = "james.local";
     private static final String USER = "toto@" + DOMAIN;
     private static final String PASSWORD = "123456";
-    private static final String LOCALHOST = "127.0.0.1";
-    private static final int SMTP_PORT = 1025;
-    private static final int IMAP_PORT = 1143;
 
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -84,15 +83,16 @@ public class JPAJamesServerTest extends AbstractJamesServerTest {
         server.getProbe(QuotaProbesImpl.class).setGlobalMaxStorage(new SerializableQuotaValue<>(QuotaSize.size(50 * 1024)));
 
         // ~ 12 KB email
-        smtpMessageSender.connect(LOCALHOST, SMTP_PORT)
+        int imapPort = server.getProbe(ImapGuiceProbe.class).getImapPort();
+        smtpMessageSender.connect(JAMES_SERVER_HOST, server.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessageWithHeaders(USER, USER, "header: toto\\r\\n\\r\\n" + Strings.repeat("0123456789\n", 1024));
-        AWAIT.until(() -> imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+        AWAIT.until(() -> imapMessageReader.connect(JAMES_SERVER_HOST, imapPort)
             .login(USER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .hasAMessage());
 
         assertThat(
-            imapMessageReader.connect(LOCALHOST, IMAP_PORT)
+            imapMessageReader.connect(JAMES_SERVER_HOST, imapPort)
                 .login(USER, PASSWORD)
                 .getQuotaRoot(IMAPMessageReader.INBOX))
             .startsWith("* QUOTAROOT \"INBOX\" #private&toto@james.local\r\n" +

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
index 7739338..aafddad 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
@@ -22,6 +22,7 @@ package org.apache.james;
 import java.io.IOException;
 
 import org.apache.james.server.core.configuration.Configuration;
+import org.junit.Ignore;
 
 public class JPAJamesServerWithSqlValidationTest extends JPAJamesServerTest {
 
@@ -37,4 +38,8 @@ public class JPAJamesServerWithSqlValidationTest extends JPAJamesServerTest {
             .overrideWith(new TestJPAConfigurationModuleWithSqlValidation(), DOMAIN_LIST_CONFIGURATION_MODULE);
     }
 
+    @Override
+    @Ignore("Failing to create the domain: duplicate with test in JPAJamesServerTest")
+    public void jpaGuiceServerShouldUpdateQuota() {
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/resources/imapserver.xml b/server/container/guice/jpa-guice/src/test/resources/imapserver.xml
index 28ce44c..509fdb3 100644
--- a/server/container/guice/jpa-guice/src/test/resources/imapserver.xml
+++ b/server/container/guice/jpa-guice/src/test/resources/imapserver.xml
@@ -23,13 +23,13 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
             keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
               -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>
@@ -38,13 +38,13 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
-        <tls socketTLS="false" startTLS="false">
+        <tls socketTLS="false" startTLS="true">
             <!-- To create a new keystore execute:
               keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
              -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/resources/lmtpserver.xml b/server/container/guice/jpa-guice/src/test/resources/lmtpserver.xml
index 5c4a9c7..7739071 100644
--- a/server/container/guice/jpa-guice/src/test/resources/lmtpserver.xml
+++ b/server/container/guice/jpa-guice/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>127.0.0.1:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/resources/managesieveserver.xml b/server/container/guice/jpa-guice/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/guice/jpa-guice/src/test/resources/managesieveserver.xml
+++ b/server/container/guice/jpa-guice/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/resources/pop3server.xml b/server/container/guice/jpa-guice/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/container/guice/jpa-guice/src/test/resources/pop3server.xml
+++ b/server/container/guice/jpa-guice/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-guice/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/test/resources/smtpserver.xml b/server/container/guice/jpa-guice/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/container/guice/jpa-guice/src/test/resources/smtpserver.xml
+++ b/server/container/guice/jpa-guice/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-smtp-mariadb/src/test/java/org/apache/james/JPAJamesServerTest.java
----------------------------------------------------------------------
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 d8f7fde..e2e5528 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
@@ -32,6 +32,7 @@ import javax.persistence.EntityManagerFactory;
 import org.apache.james.backends.jpa.JpaTestCluster;
 import org.apache.james.domainlist.jpa.model.JPADomain;
 import org.apache.james.mailrepository.jpa.JPAUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.rrt.jpa.model.JPARecipientRewrite;
 import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.user.jpa.model.JPAUser;
@@ -44,8 +45,6 @@ import org.testcontainers.containers.MariaDBContainer;
 
 public class JPAJamesServerTest {
 
-    private static final int SMTP_PORT = 1025;
-
     private GuiceJamesServer server;
     private SocketChannel socketChannel;
 
@@ -89,7 +88,7 @@ public class JPAJamesServerTest {
 
     @Test
     public void connectSMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", SMTP_PORT));
+        socketChannel.connect(new InetSocketAddress("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server");
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-smtp-mariadb/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp-mariadb/src/test/resources/smtpserver.xml b/server/container/guice/jpa-smtp-mariadb/src/test/resources/smtpserver.xml
index 2f83c8e..ec6419c 100644
--- a/server/container/guice/jpa-smtp-mariadb/src/test/resources/smtpserver.xml
+++ b/server/container/guice/jpa-smtp-mariadb/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>


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


[07/13] james-project git commit: JAMES-2530 Rule serialization for the JMAP layer

Posted by ad...@apache.org.
JAMES-2530 Rule serialization for the JMAP layer

This is a copy of the event sourcing serialization.

Please note that this was done to allow JSON format to diverge between storage and API.

For instance let's say we want to rename a field on the JMAP layer, but we would want to keep the storage untouched for limiting our work.

This DTO will be tested later in JMAP CRUD tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/25965a9b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/25965a9b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/25965a9b

Branch: refs/heads/master
Commit: 25965a9b182345fa17ad4f6fb5d847d9473df994
Parents: 9422eda
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 09:21:11 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:50 2018 +0200

----------------------------------------------------------------------
 .../apache/james/jmap/model/JmapRuleDTO.java    | 191 +++++++++++++++++++
 1 file changed, 191 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/25965a9b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapRuleDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapRuleDTO.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapRuleDTO.java
new file mode 100644
index 0000000..446e2d3
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapRuleDTO.java
@@ -0,0 +1,191 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+
+import org.apache.james.jmap.api.filtering.Rule;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+public class JmapRuleDTO {
+
+    public static class ConditionDTO {
+
+        public static ConditionDTO from(Rule.Condition condition) {
+            return new ConditionDTO(
+                condition.getField().asString(),
+                condition.getComparator().asString(),
+                condition.getValue());
+        }
+
+        private final String field;
+        private final String comparator;
+        private final String value;
+
+        @JsonCreator
+        public ConditionDTO(@JsonProperty("field") String field,
+                            @JsonProperty("comparator") String comparator,
+                            @JsonProperty("value") String value) {
+            this.field = field;
+            this.comparator = comparator;
+            this.value = value;
+        }
+
+        public String getField() {
+            return field;
+        }
+
+        public String getComparator() {
+            return comparator;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        public Rule.Condition toCondition() {
+            return Rule.Condition.of(
+                    Rule.Condition.Field.of(field),
+                    Rule.Condition.Comparator.of(comparator),
+                    value);
+        }
+    }
+
+    public static class ActionDTO {
+
+        public static class AppendInMailboxesDTO {
+
+            public static AppendInMailboxesDTO from(Rule.Action.AppendInMailboxes appendInMailboxes) {
+                return new AppendInMailboxesDTO(appendInMailboxes.getMailboxIds());
+            }
+
+            @JsonCreator
+            public AppendInMailboxesDTO(@JsonProperty("mailboxIds") List<String> mailboxIds) {
+                this.mailboxIds = ImmutableList.copyOf(mailboxIds);
+            }
+
+            private final List<String> mailboxIds;
+
+            public List<String> getMailboxIds() {
+                return mailboxIds;
+            }
+
+            public Rule.Action.AppendInMailboxes toAppendInMailboxes() {
+                return Rule.Action.AppendInMailboxes.withMailboxIds(mailboxIds);
+            }
+        }
+
+        public static ActionDTO from(Rule.Action action) {
+            return new ActionDTO(AppendInMailboxesDTO.from(action.getAppendInMailboxes()));
+        }
+
+        @JsonCreator
+        public ActionDTO(@JsonProperty("appendIn") AppendInMailboxesDTO appendIn) {
+            this.appendIn = appendIn;
+        }
+
+        private final AppendInMailboxesDTO appendIn;
+
+        public AppendInMailboxesDTO getAppendIn() {
+            return appendIn;
+        }
+
+        public Rule.Action toAction() {
+            return Rule.Action.of(appendIn.toAppendInMailboxes());
+        }
+    }
+
+    public static ImmutableList<Rule> toRules(List<JmapRuleDTO> ruleDTOList) {
+        Preconditions.checkNotNull(ruleDTOList);
+        return ruleDTOList.stream()
+                .map(JmapRuleDTO::toRule)
+                .collect(ImmutableList.toImmutableList());
+    }
+
+    public static ImmutableList<JmapRuleDTO> from(List<Rule> rules) {
+        Preconditions.checkNotNull(rules);
+        return rules.stream()
+            .map(JmapRuleDTO::from)
+            .collect(ImmutableList.toImmutableList());
+    }
+
+    public static JmapRuleDTO from(Rule rule) {
+        return new JmapRuleDTO(rule.getId().asString(),
+                rule.getName(),
+                ConditionDTO.from(rule.getCondition()),
+                ActionDTO.from(rule.getAction()));
+    }
+
+    private final String id;
+    private final String name;
+    private final ConditionDTO conditionDTO;
+    private final ActionDTO actionDTO;
+
+    @JsonCreator
+    public JmapRuleDTO(@JsonProperty("id") String id,
+                       @JsonProperty("name") String name,
+                       @JsonProperty("condition") ConditionDTO conditionDTO,
+                       @JsonProperty("action") ActionDTO actionDTO) {
+        this.name = name;
+        this.conditionDTO = conditionDTO;
+        this.actionDTO = actionDTO;
+        Preconditions.checkNotNull(id);
+
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public ConditionDTO getCondition() {
+        return conditionDTO;
+    }
+
+    public ActionDTO getAction() {
+        return actionDTO;
+    }
+
+    public Rule toRule() {
+        return Rule.builder()
+            .id(Rule.Id.of(id))
+            .name(name)
+            .condition(conditionDTO.toCondition())
+            .name(name)
+            .action(actionDTO.toAction())
+            .build();
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("id", id)
+            .toString();
+    }
+}


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


[04/13] james-project git commit: JAMES-2074 Run James on random ports

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java
----------------------------------------------------------------------
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/JPAJamesServerTest.java
index 7e192fe..aec51d6 100644
--- 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/JPAJamesServerTest.java
@@ -32,6 +32,7 @@ import javax.persistence.EntityManagerFactory;
 import org.apache.james.backends.jpa.JpaTestCluster;
 import org.apache.james.domainlist.jpa.model.JPADomain;
 import org.apache.james.mailrepository.jpa.JPAUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.rrt.jpa.model.JPARecipientRewrite;
 import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.user.jpa.model.JPAUser;
@@ -43,8 +44,6 @@ import org.junit.rules.TemporaryFolder;
 
 public class JPAJamesServerTest {
 
-    private static final int SMTP_PORT = 1025;
-
     private GuiceJamesServer server;
     private SocketChannel socketChannel;
 
@@ -85,7 +84,7 @@ public class JPAJamesServerTest {
 
     @Test
     public void connectSMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress("127.0.0.1", SMTP_PORT));
+        socketChannel.connect(new InetSocketAddress("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()));
         assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server");
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-smtp/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/test/resources/managesieveserver.xml b/server/container/guice/jpa-smtp/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/guice/jpa-smtp/src/test/resources/managesieveserver.xml
+++ b/server/container/guice/jpa-smtp/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/jpa-smtp/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/test/resources/smtpserver.xml b/server/container/guice/jpa-smtp/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/container/guice/jpa-smtp/src/test/resources/smtpserver.xml
+++ b/server/container/guice/jpa-smtp/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
index b8dfd4f..f617921 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
@@ -23,7 +23,7 @@ import java.io.IOException;
 
 import org.junit.Rule;
 
-public class MemoryJamesServerTest extends AbstractJmapJamesServerTest {
+public class MemoryJamesServerTest extends AbstractJamesServerTest {
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
new file mode 100644
index 0000000..eb3ca00
--- /dev/null
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
@@ -0,0 +1,39 @@
+/****************************************************************
+ * 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;
+
+import java.io.IOException;
+
+import org.junit.Rule;
+
+public class MemoryJmapJamesServerTest extends AbstractJmapJamesServerTest {
+
+    @Rule
+    public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
+
+    @Override
+    protected GuiceJamesServer createJamesServer() throws IOException {
+        return memoryJmap.jmapServer();
+    }
+
+    @Override
+    protected void clean() {
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/resources/imapserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/resources/imapserver.xml b/server/container/guice/memory-guice/src/test/resources/imapserver.xml
index 28ce44c..509fdb3 100644
--- a/server/container/guice/memory-guice/src/test/resources/imapserver.xml
+++ b/server/container/guice/memory-guice/src/test/resources/imapserver.xml
@@ -23,13 +23,13 @@ under the License.
 <imapservers>
     <imapserver enabled="true">
         <jmxName>imapserver</jmxName>
-        <bind>0.0.0.0:1143</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:
             keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
               -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>
@@ -38,13 +38,13 @@ under the License.
     </imapserver>
     <imapserver enabled="true">
         <jmxName>imapserver-ssl</jmxName>
-        <bind>0.0.0.0:1993</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
-        <tls socketTLS="false" startTLS="false">
+        <tls socketTLS="false" startTLS="true">
             <!-- To create a new keystore execute:
               keytool -genkey -alias james -keyalg RSA -keystore /path/to/james/conf/keystore
              -->
-            <keystore>file://conf/keystore</keystore>
+            <keystore>classpath://keystore</keystore>
             <secret>james72laBalle</secret>
             <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
         </tls>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/resources/lmtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/resources/lmtpserver.xml b/server/container/guice/memory-guice/src/test/resources/lmtpserver.xml
index 5c4a9c7..7739071 100644
--- a/server/container/guice/memory-guice/src/test/resources/lmtpserver.xml
+++ b/server/container/guice/memory-guice/src/test/resources/lmtpserver.xml
@@ -23,7 +23,7 @@
     <lmtpserver enabled="true">
         <jmxName>lmtpserver</jmxName>
         <!-- LMTP should not be reachable from outside your network so bind it to loopback-->
-        <bind>127.0.0.1:1024</bind>
+        <bind>127.0.0.1:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <connectiontimeout>1200</connectiontimeout>
         <!-- Set the maximum simultaneous incoming connections for this service -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/resources/managesieveserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/resources/managesieveserver.xml b/server/container/guice/memory-guice/src/test/resources/managesieveserver.xml
index ec57e09..eee4052 100644
--- a/server/container/guice/memory-guice/src/test/resources/managesieveserver.xml
+++ b/server/container/guice/memory-guice/src/test/resources/managesieveserver.xml
@@ -31,7 +31,7 @@
 
      <jmxName>managesieveserver</jmxName>
 
-     <bind>0.0.0.0:4190</bind>
+     <bind>0.0.0.0:0</bind>
 
      <connectionBacklog>200</connectionBacklog>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/resources/pop3server.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/resources/pop3server.xml b/server/container/guice/memory-guice/src/test/resources/pop3server.xml
index e4187da..595c313 100644
--- a/server/container/guice/memory-guice/src/test/resources/pop3server.xml
+++ b/server/container/guice/memory-guice/src/test/resources/pop3server.xml
@@ -22,7 +22,7 @@
 <pop3servers>
     <pop3server enabled="true">
         <jmxName>pop3server</jmxName>
-        <bind>0.0.0.0:1110</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <!-- To create a new keystore execute:

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/memory-guice/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/resources/smtpserver.xml b/server/container/guice/memory-guice/src/test/resources/smtpserver.xml
index 2f83c8e..c348f04 100644
--- a/server/container/guice/memory-guice/src/test/resources/smtpserver.xml
+++ b/server/container/guice/memory-guice/src/test/resources/smtpserver.xml
@@ -22,7 +22,7 @@
 <smtpservers>
     <smtpserver enabled="true">
         <jmxName>smtpserver-global</jmxName>
-        <bind>0.0.0.0:1025</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -45,7 +45,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-TLS</jmxName>
-        <bind>0.0.0.0:10465</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>
@@ -72,7 +72,7 @@
     </smtpserver>
     <smtpserver enabled="true">
         <jmxName>smtpserver-authenticated</jmxName>
-        <bind>0.0.0.0:1587</bind>
+        <bind>0.0.0.0:0</bind>
         <connectionBacklog>200</connectionBacklog>
         <tls socketTLS="false" startTLS="false">
             <keystore>file://conf/keystore</keystore>

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
index bd608cf..0e2ac9a 100644
--- a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
+++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
@@ -27,6 +27,7 @@ import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.imapserver.netty.IMAPServerFactory;
+import org.apache.james.imapserver.netty.OioIMAPServerFactory;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.SubscriptionManager;
@@ -36,11 +37,13 @@ import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.modules.Names;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
+import org.apache.james.utils.GuiceProbe;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Named;
@@ -49,7 +52,11 @@ public class IMAPServerModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        bind(IMAPServerFactory.class).in(Scopes.SINGLETON);
+        bind(OioIMAPServerFactory.class).in(Scopes.SINGLETON);
+
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(IMAPModuleConfigurationPerformer.class);
+        Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(ImapGuiceProbe.class);
     }
 
     @Provides

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.java b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.java
new file mode 100644
index 0000000..0c7c1fc
--- /dev/null
+++ b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.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.protocols;
+
+import java.net.InetSocketAddress;
+import java.util.Optional;
+import java.util.function.Predicate;
+
+import javax.inject.Inject;
+
+import org.apache.james.imapserver.netty.IMAPServerFactory;
+import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
+import org.apache.james.utils.GuiceProbe;
+
+
+public class ImapGuiceProbe implements GuiceProbe {
+
+    private final IMAPServerFactory imapServerFactory;
+
+    @Inject
+    private ImapGuiceProbe(IMAPServerFactory imapServerFactory) {
+        this.imapServerFactory = imapServerFactory;
+    }
+
+    public int getImapPort() {
+        return getPort(server -> !server.getStartTLSSupported())
+                .orElseThrow(() -> new IllegalStateException("IMAP server not defined"));
+    }
+
+    public int getImapsPort() {
+        return getPort(server -> server.getStartTLSSupported())
+                .orElseThrow(() -> new IllegalStateException("IMAPS server not defined"));
+    }
+
+    private Optional<Integer> getPort(Predicate<? super AbstractConfigurableAsyncServer> filter) {
+        return imapServerFactory.getServers().stream()
+                .filter(filter)
+                .findFirst()
+                .flatMap(server -> server.getListenAddresses().stream().findFirst())
+                .map(InetSocketAddress::getPort);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/jmap/src/test/java/org/apache/james/AbstractJmapJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/AbstractJmapJamesServerTest.java b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/AbstractJmapJamesServerTest.java
index 1abae59..318e15b 100644
--- a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/AbstractJmapJamesServerTest.java
+++ b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/AbstractJmapJamesServerTest.java
@@ -21,18 +21,11 @@ package org.apache.james;
 import static io.restassured.RestAssured.given;
 import static io.restassured.config.EncoderConfig.encoderConfig;
 import static io.restassured.config.RestAssuredConfig.newConfig;
-import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.james.domainlist.lib.DomainListConfiguration;
-import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.JmapGuiceProbe;
 import org.junit.After;
 import org.junit.Before;
@@ -52,21 +45,13 @@ public abstract class AbstractJmapJamesServerTest {
             .autoDetectIp(false)
             .build());
 
-    private static final int IMAP_PORT_SSL = 1993;
-    private static final int POP3_PORT = 1110;
-    private static final int SMTP_PORT = 1025;
-    private static final int LMTP_PORT = 1024;
-
     protected static final String JAMES_SERVER_HOST = "127.0.0.1";
-    protected static final int IMAP_PORT = 1143; // You need to be root (superuser) to bind to ports under 1024.
 
     protected GuiceJamesServer server;
-    private SocketChannel socketChannel;
 
     @Before
     public void setup() throws Exception {
         server = createJamesServer();
-        socketChannel = SocketChannel.open();
         server.start();
 
         RestAssured.requestSpecification = new RequestSpecBuilder()
@@ -90,52 +75,6 @@ public abstract class AbstractJmapJamesServerTest {
     }
 
     @Test
-    public void hostnameShouldBeUsedAsDefaultDomain() throws Exception {
-        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
-
-        assertThat(server.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
-    }
-
-    @Test
-    public void hostnameShouldBeRetrievedWhenRestarting() throws Exception {
-        server.stop();
-        server.start();
-        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
-
-        assertThat(server.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
-    }
-
-    @Test
-    public void connectIMAPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, IMAP_PORT));
-        assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
-    }
-
-    @Test
-    public void connectOnSecondaryIMAPServerIMAPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, IMAP_PORT_SSL));
-        assertThat(getServerConnectionResponse(socketChannel)).startsWith("* OK JAMES IMAP4rev1 Server");
-    }
-
-    @Test
-    public void connectPOP3ServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, POP3_PORT));
-        assertThat(getServerConnectionResponse(socketChannel)).contains("POP3 server (JAMES POP3 Server ) ready");
-    }
-
-    @Test
-    public void connectSMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, SMTP_PORT));
-        assertThat(getServerConnectionResponse(socketChannel)).startsWith("220 JAMES Linagora's SMTP awesome Server");
-    }
-
-    @Test
-    public void connectLMTPServerShouldSendShabangOnConnect() throws Exception {
-        socketChannel.connect(new InetSocketAddress(JAMES_SERVER_HOST, LMTP_PORT));
-        assertThat(getServerConnectionResponse(socketChannel)).contains("LMTP Server (JAMES Protocols Server) ready");
-    }
-
-    @Test
     public void connectJMAPServerShouldRespondBadRequest() throws Exception {
         given()
             .body("{\"badAttributeName\": \"value\"}")
@@ -144,11 +83,4 @@ public abstract class AbstractJmapJamesServerTest {
         .then()
             .statusCode(400);
     }
-
-    private String getServerConnectionResponse(SocketChannel socketChannel) throws IOException {
-        ByteBuffer byteBuffer = ByteBuffer.allocate(1000);
-        socketChannel.read(byteBuffer);
-        byte[] bytes = byteBuffer.array();
-        return new String(bytes, Charset.forName("UTF-8"));
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
index 4d20631..dd67a1b 100644
--- a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
+++ b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
@@ -23,12 +23,15 @@ import java.util.List;
 
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.lmtpserver.netty.LMTPServerFactory;
+import org.apache.james.lmtpserver.netty.OioLMTPServerFactory;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
+import org.apache.james.utils.GuiceProbe;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
@@ -36,7 +39,11 @@ public class LMTPServerModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        bind(LMTPServerFactory.class).in(Scopes.SINGLETON);
+        bind(OioLMTPServerFactory.class).in(Scopes.SINGLETON);
+
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(LMTPModuleConfigurationPerformer.class);
+        Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(LmtpGuiceProbe.class);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java
new file mode 100644
index 0000000..fe8ad90
--- /dev/null
+++ b/server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.protocols;
+
+import java.net.InetSocketAddress;
+
+import javax.inject.Inject;
+
+import org.apache.james.lmtpserver.netty.LMTPServerFactory;
+import org.apache.james.utils.GuiceProbe;
+
+
+public class LmtpGuiceProbe implements GuiceProbe {
+
+    private final LMTPServerFactory lmtpServerFactory;
+
+    @Inject
+    private LmtpGuiceProbe(LMTPServerFactory lmtpServerFactory) {
+        this.lmtpServerFactory = lmtpServerFactory;
+    }
+
+    public int getLmtpPort() {
+        return lmtpServerFactory.getServers().stream()
+                .findFirst()
+                .flatMap(server -> server.getListenAddresses().stream().findFirst())
+                .map(InetSocketAddress::getPort)
+                .orElseThrow(() -> new IllegalStateException("LMTP server not defined"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
index 4fbc30e..457bca5 100644
--- a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
+++ b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
@@ -22,13 +22,16 @@ package org.apache.james.modules.protocols;
 import java.util.List;
 
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.pop3server.netty.OioPOP3ServerFactory;
 import org.apache.james.pop3server.netty.POP3ServerFactory;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
+import org.apache.james.utils.GuiceProbe;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
@@ -36,7 +39,11 @@ public class POP3ServerModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        bind(POP3ServerFactory.class).in(Scopes.SINGLETON);
+        bind(OioPOP3ServerFactory.class).in(Scopes.SINGLETON);
+
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(POP3ModuleConfigurationPerformer.class);
+        Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(Pop3GuiceProbe.class);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java
new file mode 100644
index 0000000..148f78c
--- /dev/null
+++ b/server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.protocols;
+
+import java.net.InetSocketAddress;
+
+import javax.inject.Inject;
+
+import org.apache.james.pop3server.netty.POP3ServerFactory;
+import org.apache.james.utils.GuiceProbe;
+
+
+public class Pop3GuiceProbe implements GuiceProbe {
+
+    private final POP3ServerFactory pop3ServerFactory;
+
+    @Inject
+    private Pop3GuiceProbe(POP3ServerFactory pop3ServerFactory) {
+        this.pop3ServerFactory = pop3ServerFactory;
+    }
+
+    public int getPop3Port() {
+        return pop3ServerFactory.getServers().stream()
+                .findFirst()
+                .flatMap(server -> server.getListenAddresses().stream().findFirst())
+                .map(InetSocketAddress::getPort)
+                .orElseThrow(() -> new IllegalStateException("POP3 server not defined"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
index 2e88204..7a55aa8 100644
--- a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
+++ b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
@@ -24,12 +24,15 @@ import java.util.List;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.smtpserver.SendMailHandler;
+import org.apache.james.smtpserver.netty.OioSMTPServerFactory;
 import org.apache.james.smtpserver.netty.SMTPServerFactory;
 import org.apache.james.utils.ConfigurationPerformer;
+import org.apache.james.utils.GuiceProbe;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
@@ -38,8 +41,11 @@ public class SMTPServerModule extends AbstractModule {
     @Override
     protected void configure() {
         install(new JSPFModule());
+        bind(SMTPServerFactory.class).in(Scopes.SINGLETON);
+        bind(OioSMTPServerFactory.class).in(Scopes.SINGLETON);
 
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(SMTPModuleConfigurationPerformer.class);
+        Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(SmtpGuiceProbe.class);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java
new file mode 100644
index 0000000..1468820
--- /dev/null
+++ b/server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java
@@ -0,0 +1,60 @@
+/****************************************************************
+ * 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.protocols;
+
+import java.net.InetSocketAddress;
+import java.util.function.Predicate;
+
+import javax.inject.Inject;
+
+import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
+import org.apache.james.smtpserver.netty.SMTPServer;
+import org.apache.james.smtpserver.netty.SMTPServerFactory;
+import org.apache.james.utils.GuiceProbe;
+
+public class SmtpGuiceProbe implements GuiceProbe {
+
+    private final SMTPServerFactory smtpServerFactory;
+
+    @Inject
+    private SmtpGuiceProbe(SMTPServerFactory smtpServerFactory) {
+        this.smtpServerFactory = smtpServerFactory;
+    }
+
+    public int getSmtpPort() {
+        return getPort(server -> true);
+    }
+
+    public int getSmtpsPort() {
+        return getPort(AbstractConfigurableAsyncServer::getStartTLSSupported);
+    }
+
+    public Integer getSmtpAuthRequiredPort() {
+        return getPort(server -> ((SMTPServer) server).getAuthRequired() == SMTPServer.AUTH_REQUIRED);
+    }
+
+    private Integer getPort(Predicate<? super AbstractConfigurableAsyncServer> filter) {
+        return smtpServerFactory.getServers().stream()
+            .filter(filter)
+            .findFirst()
+            .flatMap(server -> server.getListenAddresses().stream().findFirst())
+            .map(InetSocketAddress::getPort)
+            .orElseThrow(() -> new IllegalStateException("SMTP server not defined"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/container/util/src/main/java/org/apache/james/util/Port.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/Port.java b/server/container/util/src/main/java/org/apache/james/util/Port.java
index 016c4b4..5c90aa7 100644
--- a/server/container/util/src/main/java/org/apache/james/util/Port.java
+++ b/server/container/util/src/main/java/org/apache/james/util/Port.java
@@ -29,6 +29,10 @@ public class Port {
     public static final int PRIVILEGED_PORT_BOUND = 1024;
     private static final Range<Integer> VALID_PORT_RANGE = Range.closed(1, MAX_PORT_VALUE);
 
+    public static Port of(int portNumber) {
+        return new Port(portNumber);
+    }
+
     public static int generateValidUnprivilegedPort() {
         return new Random().nextInt(Port.MAX_PORT_VALUE - PRIVILEGED_PORT_BOUND) + PRIVILEGED_PORT_BOUND;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
index 469f0f0..795ca91 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
@@ -21,14 +21,14 @@ package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.AddDeliveredToHeader;
 import org.apache.james.utils.DataProbeImpl;
@@ -66,10 +66,10 @@ public class AddDeliveredToHeaderTest {
 
     @Test
     public void receivedMessagesShouldContainDeliveredToHeaders() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
index 295bdd6..0dfc134 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
@@ -20,17 +20,17 @@
 package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.MemoryJamesServerMain;
 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.Bounce;
 import org.apache.james.transport.mailets.DSNBounce;
@@ -85,10 +85,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(BOUNCE_RECEIVER, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -110,10 +110,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(BOUNCE_RECEIVER, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -135,10 +135,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("any@" + DEFAULT_DOMAIN, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -161,10 +161,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("any@" + DEFAULT_DOMAIN, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -187,10 +187,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("any@" + DEFAULT_DOMAIN, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -212,10 +212,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(BOUNCE_RECEIVER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(BOUNCE_RECEIVER, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(BOUNCE_RECEIVER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -237,10 +237,10 @@ public class BounceIntegrationTest {
         dataProbe.addUser(RECIPIENT, PASSWORD);
         dataProbe.addUser(POSTMASTER, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage("any@" + DEFAULT_DOMAIN, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(POSTMASTER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
index 0861fdb..3728b08 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
@@ -21,13 +21,13 @@ package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -68,10 +68,10 @@ public class CommonMailetConfigurationTest {
 
     @Test
     public void simpleMailShouldBeSent() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
index c9509a4..88f5617 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
@@ -22,10 +22,8 @@ package org.apache.james.mailets;
 import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
 import static org.apache.james.MemoryJamesServerMain.SMTP_ONLY_MODULE;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.apache.james.mailets.configuration.MailetConfiguration.LOCAL_DELIVERY;
 import static org.hamcrest.Matchers.equalTo;
@@ -40,6 +38,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.utils.DataProbeImpl;
@@ -115,7 +115,7 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute
@@ -144,7 +144,7 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute
@@ -171,10 +171,10 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -199,10 +199,10 @@ public class DirectResolutionRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index 71c1ebe..cb43c36 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -22,10 +22,8 @@ package org.apache.james.mailets;
 import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
 import static org.apache.james.MemoryJamesServerMain.SMTP_ONLY_MODULE;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.equalTo;
@@ -37,6 +35,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.utils.DataProbeImpl;
@@ -103,7 +103,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute
@@ -124,7 +124,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute.until(this::messageIsReceivedByTheSmtpServer);
@@ -143,7 +143,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute
@@ -164,7 +164,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         awaitAtMostOneMinute
@@ -186,11 +186,11 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
         // Wait for bounce being sent before checking no email is sent
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -212,10 +212,10 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -241,10 +241,10 @@ public class GatewayRemoteDeliveryIntegrationTest {
         dataProbe.addDomain(DEFAULT_DOMAIN);
         dataProbe.addUser(FROM, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
index 0dc9ed0..5657b01 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
@@ -24,7 +24,6 @@ import static org.apache.james.mailets.configuration.CommonProcessors.ERROR_REPO
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.configuration.CommonProcessors;
@@ -32,6 +31,7 @@ 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.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.transport.mailets.ErrorMailet;
 import org.apache.james.transport.mailets.ErrorMatcher;
 import org.apache.james.transport.mailets.NoopMailet;
@@ -80,7 +80,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
@@ -99,7 +99,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
@@ -120,7 +120,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
 
@@ -142,7 +142,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -167,7 +167,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -192,7 +192,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -211,7 +211,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
@@ -230,7 +230,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
@@ -251,7 +251,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -272,7 +272,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -297,7 +297,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -322,7 +322,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -347,7 +347,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -372,7 +372,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -401,7 +401,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -430,7 +430,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }
@@ -459,7 +459,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1);
     }
@@ -488,7 +488,7 @@ public class MailetErrorsTest {
             .build(temporaryFolder);
         MailRepositoryProbeImpl probe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
 
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT).sendMessage(FROM, FROM);
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort()).sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> probe.getRepositoryMailCount(ERROR_REPOSITORY) == 1);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
index 7132860..f355a69 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -32,6 +30,8 @@ import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.ToProcessor;
 import org.apache.james.transport.mailets.ToRepository;
@@ -96,11 +96,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -116,11 +116,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -136,11 +136,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -156,11 +156,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -176,11 +176,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -196,11 +196,11 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -216,14 +216,14 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
         MailRepositoryProbeImpl repositoryProbe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
         awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(FROM, PASSWORD)
                 .select(IMAPMessageReader.INBOX)
                 .hasAMessage())
@@ -240,14 +240,14 @@ public class NetworkMatcherIntegrationTest {
                 .addProperty("processor", ProcessorConfiguration.STATE_TRANSPORT))
             .addMailet(toRepository()));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
         MailRepositoryProbeImpl repositoryProbe = jamesServer.getProbe(MailRepositoryProbeImpl.class);
         awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(FROM, PASSWORD)
                 .select(IMAPMessageReader.INBOX)
                 .hasAMessage())

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
index 4bc8a3c..2b5d709 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
@@ -20,13 +20,13 @@
 package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -81,10 +81,10 @@ public class RecipientRewriteTableIntegrationTest {
 
     @Test
     public void rrtServiceShouldNotImpactRecipientsNotMatchingAnyRRT() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -96,15 +96,15 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, ANY_AT_JAMES);
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(ANY_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).isNotNull();
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -116,10 +116,10 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, ANY_AT_JAMES);
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitNoMessage(awaitAtMostOneMinute);
@@ -135,15 +135,15 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, nonDomainUser);
         dataProbe.addAddressMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(localUser, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
         assertThat(imapMessageReader.readFirstMessage()).isNotNull();
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -155,10 +155,10 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addDomainAliasMapping(DEFAULT_DOMAIN, JAMES_ANOTHER_DOMAIN);
         dataProbe.addUser(ANY_AT_ANOTHER_DOMAIN, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, ANY_AT_JAMES);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(ANY_AT_ANOTHER_DOMAIN, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -170,10 +170,10 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addDomainAliasMapping(DEFAULT_DOMAIN, JAMES_ANOTHER_DOMAIN);
         dataProbe.addUser(ANY_AT_ANOTHER_DOMAIN, PASSWORD);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, ANY_AT_JAMES);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(ANY_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitNoMessage(awaitAtMostOneMinute);
@@ -185,14 +185,14 @@ public class RecipientRewriteTableIntegrationTest {
         dataProbe.addForwardMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, ANY_AT_JAMES);
         dataProbe.addForwardMapping(RECIPIENT_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(ANY_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -205,10 +205,10 @@ public class RecipientRewriteTableIntegrationTest {
 
         dataProbe.addForwardMapping(ANY_LOCAL_PART, DEFAULT_DOMAIN, OTHER_AT_JAMES);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, GROUP);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(OTHER_AT_JAMES, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);


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


[12/13] james-project git commit: JAMES-2530 GetMailboxes should use more fluent wrapAround MDC capability

Posted by ad...@apache.org.
JAMES-2530 GetMailboxes should use more fluent wrapAround MDC capability


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/80d0dec7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/80d0dec7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/80d0dec7

Branch: refs/heads/master
Commit: 80d0dec7c19e66ec895212b09641f3e84577c76a
Parents: 7214635
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 10:22:47 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:52 2018 +0200

----------------------------------------------------------------------
 .../apache/james/jmap/methods/GetMailboxesMethod.java  | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/80d0dec7/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index c27ff9b..62c827d 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -81,13 +81,12 @@ public class GetMailboxesMethod implements Method {
         Preconditions.checkArgument(request instanceof GetMailboxesRequest);
         GetMailboxesRequest mailboxesRequest = (GetMailboxesRequest) request;
         return metricFactory.withMetric(JMAP_PREFIX + METHOD_NAME.getName(),
-            () -> MDCBuilder.withMdc(
-                MDCBuilder.create()
-                    .addContext(MDCBuilder.ACTION, "GET_MAILBOXES")
-                    .addContext("accountId", mailboxesRequest.getAccountId())
-                    .addContext("mailboxIds", mailboxesRequest.getIds())
-                    .addContext("properties", mailboxesRequest.getProperties()),
-                () -> process(clientId, mailboxSession, mailboxesRequest)));
+            MDCBuilder.create()
+                .addContext(MDCBuilder.ACTION, "GET_MAILBOXES")
+                .addContext("accountId", mailboxesRequest.getAccountId())
+                .addContext("mailboxIds", mailboxesRequest.getIds())
+                .addContext("properties", mailboxesRequest.getProperties())
+                .wrapArround(() -> process(clientId, mailboxSession, mailboxesRequest)));
     }
 
     private Stream<JmapResponse> process(ClientId clientId, MailboxSession mailboxSession, GetMailboxesRequest mailboxesRequest) {


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


[03/13] james-project git commit: JAMES-2074 Run James on random ports

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
index c2706f9..0b68e56 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
@@ -21,16 +21,16 @@ package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.modules.MailboxProbeImpl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.modules.protocols.SieveProbeImpl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -77,10 +77,10 @@ public class SieveDelivery {
             "\n" +
             "fileinto \"" + TARGETED_MAILBOX + "\";");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(TARGETED_MAILBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
index 4f5085e..c048d65 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -33,6 +31,8 @@ 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.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.ToProcessor;
 import org.apache.james.transport.mailets.ToRepository;
@@ -102,11 +102,11 @@ public class SmtpAuthIntegrationTest {
 
     @Test
     public void authenticatedSmtpSessionsShouldBeDelivered() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -114,12 +114,12 @@ public class SmtpAuthIntegrationTest {
 
     @Test
     public void nonAuthenticatedSmtpSessionsShouldNotBeDelivered() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, FROM);
 
         awaitAtMostOneMinute.until(() -> repositoryProbe.getRepositoryMailCount(DROPPED_MAILS) == 1);
         assertThat(
-            imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+            imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
                 .login(FROM, PASSWORD)
                 .select(IMAPMessageReader.INBOX)
                 .hasAMessage())

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
index ee95d3e..13522f4 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/Constants.java
@@ -42,8 +42,6 @@ public class Constants {
 
     public static final String DEFAULT_DOMAIN = "james.org";
     public static final String LOCALHOST_IP = "127.0.0.1";
-    public static final int IMAP_PORT = 1143;
-    public static final int SMTP_PORT = 1025;
     public static final String PASSWORD = "secret";
     public static final String FROM = "user@" + DEFAULT_DOMAIN;
     public static final String RECIPIENT = "user2@" + DEFAULT_DOMAIN;

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
index 0e9b4a6..5c35a48 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailets.crypto;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -33,6 +32,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.transport.mailets.SMIMEDecrypt;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.util.ClassLoaderUtils;
@@ -48,7 +49,6 @@ import org.junit.rules.TemporaryFolder;
 
 public class SMIMEDecryptIntegrationTest {
     private static final ZonedDateTime DATE_2015 = ZonedDateTime.parse("2015-10-15T14:10:00Z");
-    private static final int SMTP_SECURE_PORT = 10465;
     private static final String FROM = "sender@" + DEFAULT_DOMAIN;
     private static final String PASSWORD = "secret";
 
@@ -97,12 +97,12 @@ public class SMIMEDecryptIntegrationTest {
 
     @Test
     public void cryptedMessageShouldBeDecryptedWhenCertificateMatches() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort())
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/crypted.eml"));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -111,12 +111,12 @@ public class SMIMEDecryptIntegrationTest {
 
     @Test
     public void cryptedMessageWithAttachmentShouldBeDecryptedWhenCertificateMatches() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort())
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/crypted_with_attachment.eml"));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -126,12 +126,12 @@ public class SMIMEDecryptIntegrationTest {
 
     @Test
     public void cryptedMessageShouldNotBeDecryptedWhenCertificateDoesntMatch() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort())
             .authenticate(FROM, PASSWORD)
             .sendMessageWithHeaders(FROM, FROM,
                 ClassLoaderUtils.getSystemResourceAsString("eml/bad_crypted.eml"));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
index 03f9506..124c3f8 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailets.crypto;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.awaitAtMostOneMinute;
@@ -34,6 +33,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.SMIMESign;
 import org.apache.james.transport.mailets.SetMimeHeader;
@@ -52,7 +53,6 @@ import org.junit.rules.TemporaryFolder;
 public class SMIMESignIntegrationTest {
 
     private static final ZonedDateTime DATE_2015 = ZonedDateTime.parse("2015-10-15T14:10:00Z");
-    private static final int SMTP_SECURE_PORT = 10465;
 
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -107,11 +107,11 @@ public class SMIMESignIntegrationTest {
 
     @Test
     public void authenticatedMessagesShouldBeSigned() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX);
         awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);
@@ -121,10 +121,10 @@ public class SMIMESignIntegrationTest {
 
     @Test
     public void nonAuthenticatedMessagesShouldNotBeSigned() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_SECURE_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpAuthRequiredPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX);
         awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index ed3a9b6..dab089b 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.smtp;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.hamcrest.Matchers.equalTo;
@@ -36,6 +34,8 @@ 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.mailets.configuration.SmtpConfiguration;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.SMTPIsAuthNetwork;
 import org.apache.james.utils.DataProbeImpl;
@@ -106,7 +106,7 @@ public class SmtpAuthorizedAddressesTest {
             .requireAuthentication()
             .withAutorizedAddresses("127.0.0.0/8"));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, TO);
 
         awaitAtMostOneMinute
@@ -124,7 +124,7 @@ public class SmtpAuthorizedAddressesTest {
             .withAutorizedAddresses("172.0.0.0/8"));
 
         assertThatThrownBy(() ->
-            messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
                 .sendMessage(FROM, TO))
             .isEqualTo(new SMTPSendingException(SmtpSendingStep.RCPT, "530 5.7.1 Authentication Required\n"));
     }
@@ -135,7 +135,7 @@ public class SmtpAuthorizedAddressesTest {
             .requireAuthentication()
             .withAutorizedAddresses("172.0.0.0/8"));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(FROM, PASSWORD)
             .sendMessage(FROM, TO);
 
@@ -153,10 +153,10 @@ public class SmtpAuthorizedAddressesTest {
             .requireAuthentication()
             .withAutorizedAddresses("172.0.0.0/8"));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(TO, FROM);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
index a974d3f..03a1e9e 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
@@ -22,11 +22,11 @@ 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.SMTP_PORT;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -69,7 +69,7 @@ public class SmtpBracketEnforcementTest {
         createJamesServer(SmtpConfiguration.builder()
             .doNotRequireBracketEnforcement());
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD)
             .sendMessage(USER, USER);
     }
@@ -79,7 +79,7 @@ public class SmtpBracketEnforcementTest {
         createJamesServer(SmtpConfiguration.builder()
             .doNotRequireBracketEnforcement());
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD)
             .sendMessageNoBracket(USER, USER);
     }
@@ -89,7 +89,7 @@ public class SmtpBracketEnforcementTest {
         createJamesServer(SmtpConfiguration.builder()
             .requireBracketEnforcement());
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD)
             .sendMessage(USER, USER);
     }
@@ -100,7 +100,7 @@ public class SmtpBracketEnforcementTest {
             .requireBracketEnforcement());
 
         assertThatThrownBy(() ->
-            messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
                 .authenticate(USER, PASSWORD)
                 .sendMessageNoBracket(USER, USER))
             .isEqualTo(new SMTPSendingException(SmtpSendingStep.RCPT, "501 5.5.2 Syntax error in parameters or arguments\n"));

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
index 1a7d323..3faabe5 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
@@ -22,11 +22,11 @@ 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.SMTP_PORT;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -74,7 +74,7 @@ public class SmtpIdentityVerificationTest {
             .requireAuthentication()
             .verifyIdentity());
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD).sendMessage(USER, USER);
     }
 
@@ -84,7 +84,7 @@ public class SmtpIdentityVerificationTest {
             .requireAuthentication()
             .doNotVerifyIdentity());
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(ATTACKER, ATTACKER_PASSWORD)
             .sendMessage(USER, USER);
     }
@@ -96,7 +96,7 @@ public class SmtpIdentityVerificationTest {
             .verifyIdentity());
 
         assertThatThrownBy(() ->
-            messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
                 .authenticate(ATTACKER, ATTACKER_PASSWORD)
                 .sendMessage(USER, USER))
             .isEqualTo(new SMTPSendingException(SmtpSendingStep.RCPT, "503 5.7.1 Incorrect Authentication for Specified Email Address\n"));

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
index 2bcb837..e9dbeda 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
@@ -20,13 +20,13 @@
 package org.apache.james.smtp;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -66,16 +66,16 @@ public class SmtpNullSenderTest {
 
     @Test
     public void smtpLayerShouldAcceptEmptySenders() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessageWithHeaders("", USER,"Short message");
     }
 
     @Test
     public void mailProcessingShouldDeliverNullSender() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessageWithHeaders("", USER,"Short message");
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
index bc5aea9..9120eb3 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
@@ -22,11 +22,11 @@ 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.SMTP_PORT;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.SmtpConfiguration;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -73,7 +73,7 @@ public class SmtpSizeLimitationTest {
             .withMaxMessageSizeInKb(10));
 
         assertThatThrownBy(() ->
-            messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+            messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
                 .authenticate(USER, PASSWORD)
                 .sendMessageWithHeaders(USER, USER, Strings.repeat("Long message", 1024)))
             .isEqualTo(new SMTPSendingException(SmtpSendingStep.Data, "500 Line length exceeded. See RFC 2821 #4.5.3.1.\n"));
@@ -85,7 +85,7 @@ public class SmtpSizeLimitationTest {
             .doNotVerifyIdentity()
             .withMaxMessageSizeInKb(10));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD)
             .sendMessageWithHeaders(USER, USER,"Short message");
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
index 88adc4e..e475af7 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
@@ -21,11 +21,9 @@ package org.apache.james.transport.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -34,6 +32,8 @@ 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.ProcessorConfiguration;
+import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.modules.server.ActiveMQQueueModule;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
@@ -84,7 +84,7 @@ public class AddFooterTest {
 
     @Test
     public void shouldAddFooterWhenSimpleMessage() throws Exception {
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .setText("Any content")
@@ -92,7 +92,7 @@ public class AddFooterTest {
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -102,7 +102,7 @@ public class AddFooterTest {
 
     @Test
     public void shouldAddFooterWhenMultipartMessage() throws Exception {
-        smtpMessageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        smtpMessageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .setMultipartWithBodyParts(
@@ -116,7 +116,7 @@ public class AddFooterTest {
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index c876847..babe313 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.transport.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -36,6 +34,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.amqp.AmqpRule;
 import org.apache.james.transport.matchers.All;
@@ -126,13 +126,13 @@ public class AmqpForwardAttachmentTest {
                     .filename("test.txt"))
             .setSubject("test");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index 220c4dc..1211bc8 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
@@ -20,10 +20,8 @@ package org.apache.james.transport.mailets;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -36,6 +34,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.transport.mailets.amqp.AmqpRule;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.transport.matchers.SMTPAuthSuccessful;
@@ -126,14 +126,14 @@ public class ContactExtractorTest {
             .addBccRecipient(BCC, "John Bcc2 <" + BCC2 + ">")
             .setSubject("Contact collection Rocks")
             .setText("This is my email");
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(SENDER, PASSWORD)
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(TO, TO2, CC, CC2, BCC, BCC2));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(TO, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
index 697d90e..32f4ad0 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
@@ -26,7 +26,6 @@ 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.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT2;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 
 import java.util.Optional;
@@ -39,6 +38,7 @@ 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.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.transport.matchers.dlp.Dlp;
 import org.apache.james.utils.DataProbeImpl;
@@ -57,6 +57,7 @@ import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
 import com.google.inject.util.Modules;
+
 import io.restassured.specification.RequestSpecification;
 
 public class DlpIntegrationTest {
@@ -130,7 +131,7 @@ public class DlpIntegrationTest {
                 "}]}")
             .put("/dlp/rules/" + DEFAULT_DOMAIN);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .addToRecipient(RECIPIENT)
@@ -162,7 +163,7 @@ public class DlpIntegrationTest {
                 "}]}")
             .put("/dlp/rules/" + DEFAULT_DOMAIN);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .addToRecipient(RECIPIENT)
@@ -200,7 +201,7 @@ public class DlpIntegrationTest {
                 "}]}")
             .put("/dlp/rules/" + DEFAULT_DOMAIN);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .addToRecipient(RECIPIENT)
@@ -238,7 +239,7 @@ public class DlpIntegrationTest {
                 "}]}")
             .put("/dlp/rules/" + DEFAULT_DOMAIN);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
                     .addToRecipient(RECIPIENT)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
index 7a58eff..4ba8505 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
@@ -23,7 +23,6 @@ import static io.restassured.RestAssured.given;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.hamcrest.Matchers.equalTo;
 
@@ -37,6 +36,7 @@ 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.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.transport.matchers.IsSenderInRRTLoop;
@@ -149,7 +149,7 @@ public class GroupMappingRelayTest {
         String externalMail = "ray@yopmail.com";
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + externalMail);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
index 6703b98..7b9dc10 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
@@ -21,10 +21,8 @@ package org.apache.james.transport.mailets;
 
 import static io.restassured.RestAssured.given;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -40,6 +38,8 @@ import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
 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.transport.matchers.All;
 import org.apache.james.transport.matchers.IsSenderInRRTLoop;
@@ -149,13 +149,13 @@ public class GroupMappingTest {
     public void messageShouldRedirectToUserWhenBelongingToGroup() throws Exception {
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -166,13 +166,13 @@ public class GroupMappingTest {
     public void messageShouldRedirectToUserDoesNotHaveSameDomainWhenBelongingToGroup() throws Exception {
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -185,17 +185,17 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -207,13 +207,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX);
         awaitAtMostOneMinute.until(imapMessageReader::hasAMessage);
@@ -228,13 +228,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -244,13 +244,13 @@ public class GroupMappingTest {
     public void messageShouldNotBeDuplicatedWhenRecipientIsAlsoPartOfGroup() throws Exception {
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(GROUP_ON_DOMAIN1, USER_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -264,18 +264,18 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + GROUP_ON_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -291,7 +291,7 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + GROUP_ON_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
@@ -308,13 +308,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + GROUP_ON_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(GROUP_ON_DOMAIN1, USER_DOMAIN2));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -326,13 +326,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + GROUP_ON_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(GROUP_ON_DOMAIN1, USER_DOMAIN2));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(SENDER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -344,13 +344,13 @@ public class GroupMappingTest {
 
         jamesServer.getProbe(DataProbeImpl.class).addAddressMapping(SENDER_LOCAL_PART, DOMAIN1, GROUP_ON_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipients(GROUP_ON_DOMAIN1, USER_DOMAIN2));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(SENDER, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitNoMessage(awaitAtMostOneMinute);
@@ -362,7 +362,7 @@ public class GroupMappingTest {
 
         jamesServer.getProbe(DataProbeImpl.class).addAddressMapping(SENDER_LOCAL_PART, DOMAIN1, GROUP_ON_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
@@ -379,13 +379,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -397,13 +397,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + USER_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitNoMessage(awaitAtMostOneMinute);
@@ -415,13 +415,13 @@ public class GroupMappingTest {
 
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN2 + "/" + USER_DOMAIN2);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient((GROUP_ON_DOMAIN1)));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -433,13 +433,13 @@ public class GroupMappingTest {
         String groupWithEncodedSlash = "a%2Fa@" + DOMAIN1;
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedSlash + "/" + USER_DOMAIN1);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(groupWithSlash));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -452,13 +452,13 @@ public class GroupMappingTest {
         String userWithEncodedSlash = "a%2Fa@" + DOMAIN1;
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + GROUP_ON_DOMAIN1 + "/" + userWithEncodedSlash);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(userWithSlash, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -470,13 +470,13 @@ public class GroupMappingTest {
         String groupWithEncodedAt = "group%40" + DOMAIN1;
         webAdminApi.put(GroupsRoutes.ROOT_PATH + "/" + groupWithEncodedAt + "/" + userWithEncodedAt);
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(SENDER)
                 .recipient(GROUP_ON_DOMAIN1));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(USER_DOMAIN1, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index e8ecd93..f121228 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.transport.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -40,6 +38,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.mailets.amqp.AmqpRule;
 import org.apache.james.transport.matchers.All;
@@ -556,13 +556,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void calendarAttachmentShouldNotBePublishedInMQWhenNoICalAttachment() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithoutICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -572,13 +572,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void calendarAttachmentShouldBePublishedInMQWhenMatchingWorkflowConfiguration() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -604,13 +604,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void headersShouldNotBeAddedInMailWhenNoICalAttachment() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithoutICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -625,13 +625,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void headersShouldBeAddedInMailWhenOneICalAttachment() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -645,13 +645,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void headersShouldBeAddedInMailWhenOneBase64ICalAttachment() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithICSBase64Attached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -665,13 +665,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void base64CalendarAttachmentShouldBePublishedInMQWhenMatchingWorkflowConfiguration() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithICSBase64Attached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -690,13 +690,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void yahooBase64CalendarAttachmentShouldBePublishedInMQWhenMatchingWorkflowConfiguration() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(yahooInvitationMessage)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -716,13 +716,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void headersShouldBeFilledOnlyWithOneICalAttachmentWhenMailHasSeveral() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithThreeICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -736,13 +736,13 @@ public class ICSAttachmentWorkflowTest {
 
     @Test
     public void pipelineShouldSendSeveralJSONOverRabbitMQWhenSeveralAttachments() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(messageWithThreeICSAttached)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -774,13 +774,13 @@ public class ICSAttachmentWorkflowTest {
     public void mailShouldNotContainCalendarContentInTextBodyButAttachment() throws Exception {
         MimeMessage calendarMessage = MimeMessageUtil.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(calendarMessage)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
index e0f9e16..ac79ee1 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
@@ -21,10 +21,8 @@ package org.apache.james.transport.mailets;
 
 import static io.restassured.RestAssured.given;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -36,6 +34,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.IsOverQuota;
 import org.apache.james.utils.DataProbeImpl;
@@ -115,10 +115,10 @@ public class IsOverQuotaMatcherTest {
             .body(SMALL_SIZE.asLong())
             .put("/quota/users/" + RECIPIENT + "/size");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -133,10 +133,10 @@ public class IsOverQuotaMatcherTest {
             .body(SMALL_SIZE.asLong())
             .put("/quota/domains/" + DEFAULT_DOMAIN + "/size");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -151,10 +151,10 @@ public class IsOverQuotaMatcherTest {
             .body(LARGE_SIZE.asLong())
             .put("/quota/users/" + RECIPIENT + "/size");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -166,10 +166,10 @@ public class IsOverQuotaMatcherTest {
             .body(SMALL_COUNT.asLong())
             .put("/quota/users/" + RECIPIENT + "/count");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -184,10 +184,10 @@ public class IsOverQuotaMatcherTest {
             .body(SMALL_COUNT.asLong())
             .put("/quota/domains/" + DEFAULT_DOMAIN + "/count");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(FROM, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -202,10 +202,10 @@ public class IsOverQuotaMatcherTest {
             .body(LARGE_COUNT.asLong())
             .put("/quota/users/" + RECIPIENT + "/count");
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FROM, RECIPIENT);
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index ac3887e..a97bcb6 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -21,12 +21,10 @@ package org.apache.james.transport.mailets;
 import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
 import static org.apache.james.mailets.configuration.Constants.FROM;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.RECIPIENT;
 import static org.apache.james.mailets.configuration.Constants.RECIPIENT2;
-import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -38,6 +36,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.spamassassin.SpamAssassinResult;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.util.docker.Images;
@@ -102,10 +102,10 @@ public class SpamAssassinTest {
 
     @Test
     public void spamAssassinShouldAppendNewHeaderOnMessage() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(mailWithContent("This is the content", RECIPIENT));
 
-        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        messageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -118,10 +118,10 @@ public class SpamAssassinTest {
 
     @Test
     public void spamAssassinShouldAppendNewHeaderWhichDetectIsSpamWhenSpamMessage() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(mailWithContent(SPAM_CONTENT, RECIPIENT));
 
-        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        messageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -133,10 +133,10 @@ public class SpamAssassinTest {
 
     @Test
     public void spamAssassinShouldAppendNewHeaderWhichNoWhenNonSpamMessage() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(mailWithContent("This is the content", RECIPIENT));
 
-        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        messageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -148,10 +148,10 @@ public class SpamAssassinTest {
 
     @Test
     public void spamAssassinShouldAppendNewHeaderPerRecipientOnMessage() throws Exception {
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(mailWithContent("This is the content", RECIPIENT, RECIPIENT2));
 
-        messageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        messageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);
@@ -162,7 +162,7 @@ public class SpamAssassinTest {
                 SpamAssassinResult.STATUS_MAIL_ATTRIBUTE_NAME);
 
         messageReader.disconnect()
-            .connect(LOCALHOST_IP, IMAP_PORT)
+            .connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT2, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60b1d219/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
index 5ed44b3..b13b6e9 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
@@ -20,10 +20,8 @@
 package org.apache.james.transport.mailets;
 
 import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
-import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
 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.SMTP_PORT;
 import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -36,6 +34,8 @@ 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.protocols.ImapGuiceProbe;
+import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.utils.DataProbeImpl;
@@ -118,13 +118,13 @@ public class StripAttachmentTest {
             .setSubject("test")
             .build();
 
-        messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+        messageSender.connect(LOCALHOST_IP, jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .sendMessage(FakeMail.builder()
                 .mimeMessage(message)
                 .sender(FROM)
                 .recipient(RECIPIENT));
 
-        imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+        imapMessageReader.connect(LOCALHOST_IP, jamesServer.getProbe(ImapGuiceProbe.class).getImapPort())
             .login(RECIPIENT, PASSWORD)
             .select(IMAPMessageReader.INBOX)
             .awaitMessage(awaitAtMostOneMinute);


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


[08/13] james-project git commit: JAMES-2530 Requests/Responses for JMAP filters

Posted by ad...@apache.org.
JAMES-2530 Requests/Responses for JMAP filters

This will be tested later in JMAP CRUD tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2224a02e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2224a02e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2224a02e

Branch: refs/heads/master
Commit: 2224a02eb9957e89a6c91d2d13b292162da1fa6d
Parents: 25965a9
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Aug 28 09:35:22 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Aug 28 14:11:50 2018 +0200

----------------------------------------------------------------------
 .../james/jmap/model/GetFilterRequest.java      | 55 ++++++++++++
 .../james/jmap/model/GetFilterResponse.java     | 88 ++++++++++++++++++++
 .../james/jmap/model/SetFilterRequest.java      | 75 +++++++++++++++++
 .../james/jmap/model/SetFilterResponse.java     | 56 +++++++++++++
 4 files changed, 274 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
new file mode 100644
index 0000000..52195f0
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.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   *
+ *                                                              *
+ *   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.model;
+
+import org.apache.james.jmap.JmapFieldNotSupportedException;
+import org.apache.james.jmap.methods.JmapRequest;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
+@JsonDeserialize(builder = GetFilterRequest.Builder.class)
+public class GetFilterRequest implements JmapRequest {
+    private static final String ISSUER = "GetFilterRequest";
+
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+
+        private Builder() {
+
+        }
+
+        public Builder accountId(String accountId) {
+            throw new JmapFieldNotSupportedException(ISSUER, "accountId");
+        }
+
+        public GetFilterRequest build() {
+            return new GetFilterRequest();
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    private GetFilterRequest() {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
new file mode 100644
index 0000000..6cbe278
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
@@ -0,0 +1,88 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+
+import org.apache.james.jmap.api.filtering.Rule;
+import org.apache.james.jmap.methods.Method;
+
+import com.google.common.collect.ImmutableList;
+
+public class GetFilterResponse implements Method.Response {
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private String accountId;
+        private String state;
+        private ImmutableList.Builder<JmapRuleDTO> rules;
+
+        public Builder() {
+            this.rules = ImmutableList.builder();
+        }
+
+        public Builder accountId(String accountId) {
+            this.accountId = accountId;
+            return this;
+        }
+
+        public Builder state(String state) {
+            this.state = state;
+            return this;
+        }
+
+        public Builder rules(List<Rule> rules) {
+            this.rules.addAll(rules.stream()
+                .map(JmapRuleDTO::from)
+                .collect(ImmutableList.toImmutableList()));
+            return this;
+        }
+
+        public GetFilterResponse build() {
+            return new GetFilterResponse(accountId, state, rules.build());
+        }
+    }
+
+    private final String accountId;
+    private final String state;
+    private final List<JmapRuleDTO> rules;
+
+    private GetFilterResponse(String accountId, String state, List<JmapRuleDTO> rules) {
+        this.accountId = accountId;
+        this.state = state;
+        this.rules = rules;
+    }
+
+    public String getAccountId() {
+        return accountId;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public List<JmapRuleDTO> getSingleton() {
+        return rules;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
new file mode 100644
index 0000000..5371534
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+
+import org.apache.james.jmap.JmapFieldNotSupportedException;
+import org.apache.james.jmap.methods.JmapRequest;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import com.google.common.collect.ImmutableList;
+
+@JsonDeserialize(builder = SetFilterRequest.Builder.class)
+public class SetFilterRequest implements JmapRequest {
+
+    private static final String ISSUER = "SetFilterRequest";
+
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+        private final ImmutableList.Builder<JmapRuleDTO> rules;
+
+        private Builder() {
+            this.rules = ImmutableList.builder();
+        }
+
+        public Builder accountId(String accountId) {
+            throw new JmapFieldNotSupportedException(ISSUER, "accountId");
+        }
+
+        public Builder ifInState(String ifInState) {
+            throw new JmapFieldNotSupportedException(ISSUER, "ifInState");
+        }
+
+        public Builder singleton(List<JmapRuleDTO> rules) {
+            this.rules.addAll(rules);
+            return this;
+        }
+
+        public SetFilterRequest build() {
+            return new SetFilterRequest(rules.build());
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    private final List<JmapRuleDTO> singleton;
+
+    private SetFilterRequest(List<JmapRuleDTO> singleton) {
+        this.singleton = singleton;
+    }
+
+    public List<JmapRuleDTO> getSingleton() {
+        return singleton;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
new file mode 100644
index 0000000..fe56cbf
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.james.jmap.methods.Method;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public class SetFilterResponse implements Method.Response {
+    public static final String SINGLETON = "singleton";
+
+    public static SetFilterResponse updated() {
+        return new SetFilterResponse(ImmutableList.of(SINGLETON), ImmutableMap.of());
+    }
+
+    public static SetFilterResponse notUpdated(SetError error) {
+        return new SetFilterResponse(ImmutableList.of(), ImmutableMap.of(SINGLETON, error));
+    }
+
+    private final List<String> updated;
+    private final Map<String, SetError> notUpdated;
+
+    private SetFilterResponse(List<String> updated, Map<String, SetError> notUpdated) {
+        this.updated = updated;
+        this.notUpdated = notUpdated;
+    }
+
+    public List<String> getUpdated() {
+        return updated;
+    }
+
+    public Map<String, SetError> getNotUpdated() {
+        return notUpdated;
+    }
+}


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