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 2017/02/02 14:26:45 UTC

[1/5] james-project git commit: PROTOCOLS-115 Use ConcurrentTestRunner to handle threads

Repository: james-project
Updated Branches:
  refs/heads/master 1456d3729 -> ac89a62f8


PROTOCOLS-115 Use ConcurrentTestRunner to handle threads


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

Branch: refs/heads/master
Commit: c23ac898b92c092c83224236b7a4c2d865ab8150
Parents: 4eb5e7d
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 2 10:28:40 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Feb 2 15:23:43 2017 +0100

----------------------------------------------------------------------
 protocols/pom.xml                               |  7 ++-
 protocols/smtp/pom.xml                          |  4 ++
 .../protocols/smtp/AbstractSMTPServerTest.java  | 55 ++++++--------------
 3 files changed, 26 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c23ac898/protocols/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/pom.xml b/protocols/pom.xml
index 3eb0ca3..1e44a27 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -65,7 +65,12 @@
     </properties>
 
     <dependencyManagement>
-        <dependencies>
+            <dependencies>
+            <dependency>
+                <groupId>org.apache.james</groupId>
+                <artifactId>james-server-util</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.apache.james.protocols</groupId>
                 <artifactId>protocols-pop3</artifactId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/c23ac898/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index b96cc1d..7f4c049 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -35,6 +35,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.james</groupId>
+            <artifactId>james-server-util</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.apache.james.protocols</groupId>
             <artifactId>protocols-api</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/c23ac898/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
index d5027e8..27b3804 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.protocols.smtp;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -30,6 +31,7 @@ import java.net.SocketException;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.commons.configuration.Configuration;
@@ -52,6 +54,7 @@ import org.apache.james.protocols.smtp.hook.MailHook;
 import org.apache.james.protocols.smtp.hook.MessageHook;
 import org.apache.james.protocols.smtp.hook.RcptHook;
 import org.apache.james.protocols.smtp.utils.TestMessageHook;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.junit.Test;
 
 import com.google.common.base.Charsets;
@@ -99,21 +102,20 @@ public abstract class AbstractSMTPServerTest {
         try {
             server = createServer(createProtocol(hook));
             server.bind();
-            InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
 
-            String mailContent = CharStreams.toString(new InputStreamReader(ClassLoader.getSystemResourceAsStream("a50.eml"), Charsets.US_ASCII));
-            Thread thread1 = new SendThread(server, bindedAddress, mailContent);
-            Thread thread2 = new SendThread(server, bindedAddress, mailContent);
-            Thread thread3 = new SendThread(server, bindedAddress, mailContent);
-            Thread thread4 = new SendThread(server, bindedAddress, mailContent);
-            thread1.start();
-            thread2.start();
-            thread3.start();
-            thread4.start();
-            thread1.join(1000);
-            thread2.join(1000);
-            thread3.join(1000);
-            thread4.join(1000);
+            final ProtocolServer finalServer = server;
+            final InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
+            final String mailContent = CharStreams.toString(new InputStreamReader(ClassLoader.getSystemResourceAsStream("a50.eml"), Charsets.US_ASCII));
+            int threadCount = 4;
+            int updateCount = 1;
+            assertThat(new ConcurrentTestRunner(threadCount, updateCount, new ConcurrentTestRunner.BiConsumer() {
+                @Override
+                public void consume(int threadNumber, int step) throws Exception {
+                    send(finalServer, bindedAddress, mailContent);
+                }
+            }).run()
+                .awaitTermination(1, TimeUnit.MINUTES))
+                .isTrue();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
             assertTrue(queued.hasNext());
@@ -137,31 +139,6 @@ public abstract class AbstractSMTPServerTest {
             }
         }
     }
-    
-    public class SendThread extends Thread {
-        private ProtocolServer server;
-        private InetSocketAddress bindedAddress;
-        private String msg;
-
-        public SendThread(ProtocolServer server, InetSocketAddress bindedAddress, String msg) {
-            this.server = server;
-            this.bindedAddress = bindedAddress;
-            this.msg = msg;
-        }
-        
-        @Override
-        public void run() {
-            try {
-                send(server, bindedAddress, msg);
-            } catch (SocketException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (IOException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-        }
-    }
 
     private void send(ProtocolServer server, InetSocketAddress bindedAddress, String msg) throws SocketException, IOException {
         SMTPClient client = createClient();


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


[5/5] james-project git commit: PROTOCOLS-115 Migrate AbstractSMTPServerTest to Assertj

Posted by ad...@apache.org.
PROTOCOLS-115 Migrate AbstractSMTPServerTest to Assertj


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

Branch: refs/heads/master
Commit: ac89a62f871cf57153e1c88ac75a474358b69526
Parents: c23ac89
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 2 11:47:26 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Feb 2 15:23:44 2017 +0100

----------------------------------------------------------------------
 protocols/lmtp/pom.xml                          |   6 +
 .../protocols/smtp/AbstractSMTPServerTest.java  | 229 +++++++++----------
 2 files changed, 119 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ac89a62f/protocols/lmtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/lmtp/pom.xml b/protocols/lmtp/pom.xml
index b970fdc..65e7260 100644
--- a/protocols/lmtp/pom.xml
+++ b/protocols/lmtp/pom.xml
@@ -69,6 +69,12 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>${assertj-1.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/ac89a62f/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
index 27b3804..f6f7d16 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
@@ -19,9 +19,6 @@
 package org.apache.james.protocols.smtp;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -81,11 +78,11 @@ public abstract class AbstractSMTPServerTest {
             send(server, bindedAddress, MSG1);
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertTrue(queued.hasNext());
+            assertThat(queued.hasNext()).isTrue();
             
             MailEnvelope env = queued.next();
             checkEnvelope(env, SENDER, Arrays.asList(RCPT1, RCPT2), MSG1);
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -118,20 +115,20 @@ public abstract class AbstractSMTPServerTest {
                 .isTrue();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertTrue(queued.hasNext());
+            assertThat(queued.hasNext()).isTrue();
 
             MailEnvelope env = queued.next();
             checkEnvelope(env, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
-            assertTrue(queued.hasNext());
+            assertThat(queued.hasNext()).isTrue();
             MailEnvelope env2 = queued.next();
             checkEnvelope(env2, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
-            assertTrue(queued.hasNext());
+            assertThat(queued.hasNext()).isTrue();
             MailEnvelope env3 = queued.next();
             checkEnvelope(env3, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
-            assertTrue(queued.hasNext());
+            assertThat(queued.hasNext()).isTrue();
             MailEnvelope env4 = queued.next();
             checkEnvelope(env4, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -143,25 +140,25 @@ public abstract class AbstractSMTPServerTest {
     private void send(ProtocolServer server, InetSocketAddress bindedAddress, String msg) throws SocketException, IOException {
         SMTPClient client = createClient();
         client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-        assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
         
         client.helo("localhost");
-        assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
 
         client.setSender(SENDER);
-        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
         client.addRecipient(RCPT1);
-        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
         client.addRecipient(RCPT2);
-        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
-        assertTrue(client.sendShortMessageData(msg));
-        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(client.sendShortMessageData(msg)).isTrue();
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
         
         client.quit();
-        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
         client.disconnect();
     }
     
@@ -177,17 +174,17 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.sendCommand("STARTTLS");
-            assertTrue(SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -209,17 +206,17 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.sendCommand("UNKNOWN");
-            assertTrue(SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -241,17 +238,17 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.noop();
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -274,25 +271,25 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.helo("localhost");
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
 
             client.mail("invalid");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
            
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -316,17 +313,17 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.helo("");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -349,25 +346,25 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
             
             client.helo("localhost");
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.rcpt(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
            
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -392,25 +389,25 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.mail(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
            
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -433,19 +430,19 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -469,19 +466,19 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
         } finally {
             if (server != null) {
@@ -519,15 +516,15 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -566,15 +563,15 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativeTransient(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativeTransient(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -612,18 +609,18 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -661,18 +658,18 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativeTransient(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativeTransient(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -716,25 +713,25 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.addRecipient(RCPT2);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -779,25 +776,25 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativeTransient(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativeTransient(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
          
             client.addRecipient(RCPT2);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -818,21 +815,21 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender("");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
          
             client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
         } finally {
@@ -874,27 +871,27 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
          
             client.addRecipient(RCPT2);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
-            assertFalse(client.sendShortMessageData(MSG1));
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(client.sendShortMessageData(MSG1)).isFalse();
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = testHook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
 
         } finally {
@@ -937,27 +934,27 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
            
             client.helo("localhost");
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
             client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
          
             client.addRecipient(RCPT2);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
 
-            assertFalse(client.sendShortMessageData(MSG1));
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativeTransient(client.getReplyCode()));
+            assertThat(client.sendShortMessageData(MSG1)).isFalse();
+            assertThat(SMTPReply.isNegativeTransient(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             client.disconnect();
 
             Iterator<MailEnvelope> queued = testHook.getQueued().iterator();
-            assertFalse(queued.hasNext());
+            assertThat(queued.hasNext()).isFalse();
 
 
         } finally {
@@ -998,7 +995,7 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativePermanent(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativePermanent(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.disconnect();
 
@@ -1039,7 +1036,7 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isNegativeTransient(client.getReplyCode()));
+            assertThat(SMTPReply.isNegativeTransient(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.disconnect();
 
@@ -1081,12 +1078,12 @@ public abstract class AbstractSMTPServerTest {
             SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
             client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).as("Reply="+ client.getReplyString()).isTrue();
             
             client.disconnect();
             
             Thread.sleep(1000);
-            assertTrue(called.get());
+            assertThat(called.get()).isTrue();
 
 
         } finally {
@@ -1112,13 +1109,13 @@ public abstract class AbstractSMTPServerTest {
     }
     
     protected static void checkEnvelope(MailEnvelope env, String sender, List<String> recipients, String msg) throws IOException {
-        assertEquals(sender, env.getSender().toString());
+        assertThat(env.getSender().toString()).isEqualTo(sender);
 
         List<MailAddress> envRecipients = env.getRecipients();
-        assertEquals(recipients.size(), envRecipients.size());
+        assertThat(envRecipients.size()).isEqualTo(recipients.size());
         for (int i = 0; i < recipients.size(); i++) {
             MailAddress address = envRecipients.get(i);
-            assertEquals(recipients.get(i), address.toString());
+            assertThat(address.toString()).isEqualTo(recipients.get(i));
         }
 
         BufferedReader reader = null;
@@ -1140,9 +1137,9 @@ public abstract class AbstractSMTPServerTest {
             }
             String msgQueued = sb.subSequence(0, sb.length()).toString();
 
-            assertEquals(msg.length(), msgQueued.length());
+            assertThat(msgQueued.length()).isEqualTo(msg.length());
             for (int i = 0; i < msg.length(); i++) {
-                assertEquals(msg.charAt(i), msgQueued.charAt(i));
+                assertThat(msgQueued.charAt(i)).isEqualTo(msg.charAt(i));
             }
         } finally {
             if (reader != null) {


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


[2/5] james-project git commit: PROTOCOL-115 Move ConcurrentTestRunner to james-util

Posted by ad...@apache.org.
PROTOCOL-115 Move ConcurrentTestRunner to james-util


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

Branch: refs/heads/master
Commit: 4eb5e7dfd86a17e0e936c1a2e68e7b477acb8a34
Parents: d4f18a9
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 2 10:12:19 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Feb 2 15:23:43 2017 +0100

----------------------------------------------------------------------
 mailbox/pom.xml                                 |   5 +
 mailbox/store/pom.xml                           |   5 +
 .../store/mail/model/MessageIdMapperTest.java   |   2 +-
 .../store/mail/model/MessageMapperTest.java     |   2 +-
 .../model/concurrency/ConcurrentTestRunner.java |  90 -------------
 .../concurrency/ConcurrentTestRunnerTest.java   | 135 -------------------
 .../util/concurrency/ConcurrentTestRunner.java  |  90 +++++++++++++
 .../concurrency/ConcurrentTestRunnerTest.java   | 135 +++++++++++++++++++
 8 files changed, 237 insertions(+), 227 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/pom.xml b/mailbox/pom.xml
index c4699f6..e838610 100644
--- a/mailbox/pom.xml
+++ b/mailbox/pom.xml
@@ -215,6 +215,11 @@
                 <artifactId>apache-james-mailbox-tool</artifactId>
                 <version>${project.version}</version>
             </dependency>
+           <dependency>
+                <groupId>org.apache.james</groupId>
+                <artifactId>james-server-util</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <!--
                 END Modules
             -->

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/store/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/store/pom.xml b/mailbox/store/pom.xml
index f6f10b0..52d16de 100644
--- a/mailbox/store/pom.xml
+++ b/mailbox/store/pom.xml
@@ -38,6 +38,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>james-server-util</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>apache-mime4j-core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index 5ede73c..0770ec1 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -43,10 +43,10 @@ import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageIdMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
-import org.apache.james.mailbox.store.mail.model.concurrency.ConcurrentTestRunner;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.assertj.core.data.MapEntry;
 import org.junit.After;
 import org.junit.Assume;

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index ccbb0f2..6fdb35a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -46,10 +46,10 @@ import org.apache.james.mailbox.store.FlagsUpdateCalculator;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
-import org.apache.james.mailbox.store.mail.model.concurrency.ConcurrentTestRunner;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.junit.After;
 import org.junit.Assume;
 import org.junit.Rule;

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunner.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunner.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunner.java
deleted file mode 100644
index 35be61e..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunner.java
+++ /dev/null
@@ -1,90 +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.mailbox.store.mail.model.concurrency;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-
-public class ConcurrentTestRunner {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ConcurrentTestRunner.class);
-
-    public interface BiConsumer {
-        void consume(int threadNumber, int step) throws Exception;
-    }
-
-    private class ConcurrentRunnableTask implements Runnable {
-        private final int threadNumber;
-        private final BiConsumer biConsumer;
-
-        public ConcurrentRunnableTask(int threadNumber, BiConsumer biConsumer) {
-            this.threadNumber = threadNumber;
-            this.biConsumer = biConsumer;
-        }
-
-        @Override
-        public void run() {
-            countDownLatch.countDown();
-            for (int i = 0; i < operationCount; i++) {
-                try {
-                    biConsumer.consume(threadNumber, i);
-                } catch (Exception e) {
-                    LOGGER.error("Error caught during concurrent testing", e);
-                }
-            }
-        }
-    }
-
-    private final int threadCount;
-    private final int operationCount;
-    private final CountDownLatch countDownLatch;
-    private final BiConsumer biConsumer;
-    private final ExecutorService executorService;
-
-    public ConcurrentTestRunner(int threadCount, int operationCount, BiConsumer biConsumer) {
-        Preconditions.checkArgument(threadCount > 0, "Thread count should be strictly positive");
-        Preconditions.checkArgument(operationCount > 0, "Operation count should be strictly positive");
-        Preconditions.checkNotNull(biConsumer);
-        this.threadCount = threadCount;
-        this.operationCount = operationCount;
-        this.countDownLatch = new CountDownLatch(threadCount);
-        this.biConsumer = biConsumer;
-        this.executorService = Executors.newFixedThreadPool(threadCount);
-    }
-
-    public ConcurrentTestRunner run() {
-        for (int i = 0; i < threadCount; i++) {
-            executorService.submit(new ConcurrentRunnableTask(i, biConsumer));
-        }
-        return this;
-    }
-
-    public boolean awaitTermination(long time, TimeUnit unit) throws InterruptedException {
-        executorService.shutdown();
-        return executorService.awaitTermination(time, unit);
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
deleted file mode 100644
index 302ed9e..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
+++ /dev/null
@@ -1,135 +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.mailbox.store.mail.model.concurrency;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-public class ConcurrentTestRunnerTest {
-
-    public static final ConcurrentTestRunner.BiConsumer EMPTY_BI_CONSUMER = new ConcurrentTestRunner.BiConsumer() {
-        @Override
-        public void consume(int threadNumber, int step) throws Exception {
-
-        }
-    };
-    public static final int DEFAULT_AWAIT_TIME = 100;
-    @Rule
-    public ExpectedException expectedException = ExpectedException.none();
-
-    @Test
-    public void constructorShouldThrowOnNegativeThreadCount() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        int operationCount = 1;
-        int threadCount = -1;
-        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
-    }
-
-    @Test
-    public void constructorShouldThrowOnNegativeOperationCount() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        int operationCount = -1;
-        int threadCount = 1;
-        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
-    }
-
-    @Test
-    public void constructorShouldThrowOnZeroThreadCount() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        int operationCount = 1;
-        int threadCount = 0;
-        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
-    }
-
-    @Test
-    public void constructorShouldThrowOnZeroOperationCount() {
-        expectedException.expect(IllegalArgumentException.class);
-
-        int operationCount = 0;
-        int threadCount = 1;
-        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
-    }
-
-    @Test
-    public void constructorShouldThrowOnNullBiConsumer() {
-        expectedException.expect(NullPointerException.class);
-
-        int operationCount = 1;
-        int threadCount = 1;
-        new ConcurrentTestRunner(threadCount, operationCount, null);
-    }
-
-    @Test
-    public void awaitTerminationShouldReturnTrueWhenFinished() throws Exception {
-        int operationCount = 1;
-        int threadCount = 1;
-
-        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER)
-            .run();
-
-        assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, TimeUnit.MILLISECONDS)).isTrue();
-    }
-
-    @Test
-    public void awaitTerminationShouldReturnFalseWhenNotFinished() throws Exception {
-        int operationCount = 1;
-        int threadCount = 1;
-        final int sleepDelay = 50;
-
-        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount,
-            new ConcurrentTestRunner.BiConsumer() {
-            @Override
-            public void consume(int threadNumber, int step) throws Exception {
-                Thread.sleep(sleepDelay);
-            }
-        })
-            .run();
-
-        assertThat(concurrentTestRunner.awaitTermination(sleepDelay / 2, TimeUnit.MILLISECONDS)).isFalse();
-    }
-
-    @Test
-    public void runShouldPerformAllOperations() throws Exception {
-        int operationCount = 2;
-        int threadCount = 2;
-        final ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
-
-        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount,
-            new ConcurrentTestRunner.BiConsumer() {
-                @Override
-                public void consume(int threadNumber, int step) throws Exception {
-                    queue.add(threadNumber + ":" + step);
-                }
-            })
-            .run();
-
-        assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, TimeUnit.MILLISECONDS)).isTrue();
-        assertThat(queue).containsOnly("0:0", "0:1", "1:0", "1:1");
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
new file mode 100644
index 0000000..0a4fa40
--- /dev/null
+++ b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
@@ -0,0 +1,90 @@
+/****************************************************************
+ * 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.util.concurrency;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Preconditions;
+
+public class ConcurrentTestRunner {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ConcurrentTestRunner.class);
+
+    public interface BiConsumer {
+        void consume(int threadNumber, int step) throws Exception;
+    }
+
+    private class ConcurrentRunnableTask implements Runnable {
+        private final int threadNumber;
+        private final BiConsumer biConsumer;
+
+        public ConcurrentRunnableTask(int threadNumber, BiConsumer biConsumer) {
+            this.threadNumber = threadNumber;
+            this.biConsumer = biConsumer;
+        }
+
+        @Override
+        public void run() {
+            countDownLatch.countDown();
+            for (int i = 0; i < operationCount; i++) {
+                try {
+                    biConsumer.consume(threadNumber, i);
+                } catch (Exception e) {
+                    LOGGER.error("Error caught during concurrent testing", e);
+                }
+            }
+        }
+    }
+
+    private final int threadCount;
+    private final int operationCount;
+    private final CountDownLatch countDownLatch;
+    private final BiConsumer biConsumer;
+    private final ExecutorService executorService;
+
+    public ConcurrentTestRunner(int threadCount, int operationCount, BiConsumer biConsumer) {
+        Preconditions.checkArgument(threadCount > 0, "Thread count should be strictly positive");
+        Preconditions.checkArgument(operationCount > 0, "Operation count should be strictly positive");
+        Preconditions.checkNotNull(biConsumer);
+        this.threadCount = threadCount;
+        this.operationCount = operationCount;
+        this.countDownLatch = new CountDownLatch(threadCount);
+        this.biConsumer = biConsumer;
+        this.executorService = Executors.newFixedThreadPool(threadCount);
+    }
+
+    public ConcurrentTestRunner run() {
+        for (int i = 0; i < threadCount; i++) {
+            executorService.submit(new ConcurrentRunnableTask(i, biConsumer));
+        }
+        return this;
+    }
+
+    public boolean awaitTermination(long time, TimeUnit unit) throws InterruptedException {
+        executorService.shutdown();
+        return executorService.awaitTermination(time, unit);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/4eb5e7df/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java b/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java
new file mode 100644
index 0000000..98bde34
--- /dev/null
+++ b/server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java
@@ -0,0 +1,135 @@
+/****************************************************************
+ * 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.util.concurrency;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class ConcurrentTestRunnerTest {
+
+    public static final ConcurrentTestRunner.BiConsumer EMPTY_BI_CONSUMER = new ConcurrentTestRunner.BiConsumer() {
+        @Override
+        public void consume(int threadNumber, int step) throws Exception {
+
+        }
+    };
+    public static final int DEFAULT_AWAIT_TIME = 100;
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
+    @Test
+    public void constructorShouldThrowOnNegativeThreadCount() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        int operationCount = 1;
+        int threadCount = -1;
+        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
+    }
+
+    @Test
+    public void constructorShouldThrowOnNegativeOperationCount() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        int operationCount = -1;
+        int threadCount = 1;
+        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
+    }
+
+    @Test
+    public void constructorShouldThrowOnZeroThreadCount() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        int operationCount = 1;
+        int threadCount = 0;
+        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
+    }
+
+    @Test
+    public void constructorShouldThrowOnZeroOperationCount() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        int operationCount = 0;
+        int threadCount = 1;
+        new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER);
+    }
+
+    @Test
+    public void constructorShouldThrowOnNullBiConsumer() {
+        expectedException.expect(NullPointerException.class);
+
+        int operationCount = 1;
+        int threadCount = 1;
+        new ConcurrentTestRunner(threadCount, operationCount, null);
+    }
+
+    @Test
+    public void awaitTerminationShouldReturnTrueWhenFinished() throws Exception {
+        int operationCount = 1;
+        int threadCount = 1;
+
+        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount, EMPTY_BI_CONSUMER)
+            .run();
+
+        assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, TimeUnit.MILLISECONDS)).isTrue();
+    }
+
+    @Test
+    public void awaitTerminationShouldReturnFalseWhenNotFinished() throws Exception {
+        int operationCount = 1;
+        int threadCount = 1;
+        final int sleepDelay = 50;
+
+        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount,
+            new ConcurrentTestRunner.BiConsumer() {
+            @Override
+            public void consume(int threadNumber, int step) throws Exception {
+                Thread.sleep(sleepDelay);
+            }
+        })
+            .run();
+
+        assertThat(concurrentTestRunner.awaitTermination(sleepDelay / 2, TimeUnit.MILLISECONDS)).isFalse();
+    }
+
+    @Test
+    public void runShouldPerformAllOperations() throws Exception {
+        int operationCount = 2;
+        int threadCount = 2;
+        final ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
+
+        ConcurrentTestRunner concurrentTestRunner = new ConcurrentTestRunner(threadCount, operationCount,
+            new ConcurrentTestRunner.BiConsumer() {
+                @Override
+                public void consume(int threadNumber, int step) throws Exception {
+                    queue.add(threadNumber + ":" + step);
+                }
+            })
+            .run();
+
+        assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, TimeUnit.MILLISECONDS)).isTrue();
+        assertThat(queue).containsOnly("0:0", "0:1", "1:0", "1:1");
+    }
+}


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


[4/5] james-project git commit: PROTOCOLS-115 A new FrameHandler should be user for each pipeline

Posted by ad...@apache.org.
PROTOCOLS-115 A new FrameHandler should be user for each pipeline


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

Branch: refs/heads/master
Commit: d4f18a98d27db2a1e3410c85f5183d3457c79867
Parents: 6595c21
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Tue Jan 31 09:47:54 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Feb 2 15:23:43 2017 +0100

----------------------------------------------------------------------
 .../protocols/lmtp/AbstractLMTPServerTest.java  |  15 ++-
 .../netty/AbstractChannelPipelineFactory.java   |  15 +--
 .../AbstractSSLAwareChannelPipelineFactory.java |   9 +-
 .../protocols/netty/ChannelHandlerFactory.java  |  26 ++++
 ...LineDelimiterBasedChannelHandlerFactory.java |  37 ++++++
 .../james/protocols/netty/NettyServer.java      |  25 ++--
 .../james/protocols/netty/NettyServerTest.java  |   5 +-
 protocols/smtp/pom.xml                          |   1 -
 ...rtTlsLineDelimiterChannelHandlerFactory.java |  37 ++++++
 .../protocols/smtp/AbstractSMTPServerTest.java  | 124 +++++++++++++++----
 .../smtp/netty/NettyStartTlsSMTPServerTest.java |   5 +-
 protocols/smtp/src/test/resources/a50.eml       |  50 ++++++++
 .../james/imapserver/netty/IMAPServer.java      |   9 +-
 ...leLineDelimiterBasedFrameDecoderFactory.java |  37 ++++++
 .../netty/AbstractConfigurableAsyncServer.java  |  14 +--
 ...ractExecutorAwareChannelPipelineFactory.java |  10 +-
 .../james/lmtpserver/netty/LMTPServer.java      |   9 +-
 .../netty/ManageSieveServer.java                |  11 +-
 .../james/pop3server/netty/POP3Server.java      |   9 +-
 .../james/smtpserver/netty/SMTPServer.java      |   9 +-
 20 files changed, 357 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
index 3b4d1dd..333a961 100644
--- a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
+++ b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
@@ -50,6 +50,7 @@ import org.apache.james.protocols.smtp.hook.HookResult;
 import org.apache.james.protocols.smtp.hook.HookReturnCode;
 import org.apache.james.protocols.smtp.hook.MessageHook;
 import org.apache.james.protocols.smtp.utils.TestMessageHook;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public abstract class AbstractLMTPServerTest extends AbstractSMTPServerTest{
@@ -70,23 +71,27 @@ public abstract class AbstractLMTPServerTest extends AbstractSMTPServerTest{
         return new SMTPProtocol(chain, new LMTPConfigurationImpl(), new MockLogger());
     }
     
-    
+
+    @Ignore("LMTP can't handle the queue")
+    @Override
+    public void testDeliveryWith4SimultaneousThreads() {
+    }
+
+    @Ignore("Disable")
     @Override
     public void testInvalidNoBracketsEnformance() throws Exception {
-        // Disable
     }
 
 
+    @Ignore("Disable")
     @Override
     public void testHeloEnforcement() throws Exception {
-        // Disable
     }
 
 
+    @Ignore("Disable")
     @Override
     public void testHeloEnforcementDisabled() throws Exception {
-        // Disable
-
     }
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
index 39a5b5f..04a91ac 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
@@ -20,13 +20,10 @@ package org.apache.james.protocols.netty;
 
 import static org.jboss.netty.channel.Channels.pipeline;
 
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
-import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 import org.jboss.netty.handler.execution.ExecutionHandler;
 import org.jboss.netty.handler.stream.ChunkedWriteHandler;
 import org.jboss.netty.util.ExternalResourceReleasable;
@@ -38,27 +35,27 @@ import org.jboss.netty.util.HashedWheelTimer;
  *
  */
 public abstract class AbstractChannelPipelineFactory implements ChannelPipelineFactory, ExternalResourceReleasable{
-
     public final static int MAX_LINE_LENGTH = 8192;
+
     protected final ConnectionLimitUpstreamHandler connectionLimitHandler;
     protected final ConnectionPerIpLimitUpstreamHandler connectionPerIpLimitHandler;
     private final HashedWheelTimer timer = new HashedWheelTimer();
     private final ChannelGroupHandler groupHandler;
 	private final int timeout;
     private final ExecutionHandler eHandler;
-    private final ChannelHandler frameHandler;
+    private final ChannelHandlerFactory frameHandlerFactory;
     public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels) {
-        this(timeout, maxConnections, maxConnectsPerIp, channels, null, new DelimiterBasedFrameDecoder(MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()));
+        this(timeout, maxConnections, maxConnectsPerIp, channels, null, new LineDelimiterBasedChannelHandlerFactory(MAX_LINE_LENGTH));
     }
     
     public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels, ExecutionHandler eHandler,
-            ChannelHandler frameHandler) {
+            ChannelHandlerFactory frameHandlerFactory) {
         this.connectionLimitHandler = new ConnectionLimitUpstreamHandler(maxConnections);
         this.connectionPerIpLimitHandler = new ConnectionPerIpLimitUpstreamHandler(maxConnectsPerIp);
         this.groupHandler = new ChannelGroupHandler(channels);
         this.timeout = timeout;
         this.eHandler = eHandler;
-        this.frameHandler = frameHandler;
+        this.frameHandlerFactory = frameHandlerFactory;
     }
     
     
@@ -76,7 +73,7 @@ public abstract class AbstractChannelPipelineFactory implements ChannelPipelineF
 
         
         // Add the text line decoder which limit the max line length, don't strip the delimiter and use CRLF as delimiter
-        pipeline.addLast(HandlerConstants.FRAMER, frameHandler);
+        pipeline.addLast(HandlerConstants.FRAMER, frameHandlerFactory.create());
        
         // Add the ChunkedWriteHandler to be able to write ChunkInput
         pipeline.addLast(HandlerConstants.CHUNK_HANDLER, new ChunkedWriteHandler());

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
index e78695c..e40f0a1 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
@@ -21,7 +21,6 @@ package org.apache.james.protocols.netty;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
 
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.group.ChannelGroup;
 import org.jboss.netty.handler.execution.ExecutionHandler;
@@ -39,14 +38,14 @@ public abstract class AbstractSSLAwareChannelPipelineFactory extends AbstractCha
 
     public AbstractSSLAwareChannelPipelineFactory(int timeout,
             int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler,
-            ChannelHandler frameHandler) {
-        super(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandler);
+            ChannelHandlerFactory frameHandlerFactory) {
+        super(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandlerFactory);
     }
 
     public AbstractSSLAwareChannelPipelineFactory(int timeout,
             int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler,
-            ChannelHandler frameHandler) {
-        this(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandler);
+            ChannelHandlerFactory frameHandlerFactory) {
+        this(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandlerFactory);
         
         // We need to copy the String array becuase of possible security issues.
         // See https://issues.apache.org/jira/browse/PROTOCOLS-18

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java
new file mode 100644
index 0000000..eba8210
--- /dev/null
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java
@@ -0,0 +1,26 @@
+/****************************************************************
+ * 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.protocols.netty;
+
+import org.jboss.netty.channel.ChannelHandler;
+
+public interface ChannelHandlerFactory {
+    ChannelHandler create();
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java
new file mode 100644
index 0000000..dcd9b7c
--- /dev/null
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.protocols.netty;
+
+import org.jboss.netty.channel.ChannelHandler;
+import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
+import org.jboss.netty.handler.codec.frame.Delimiters;
+
+public class LineDelimiterBasedChannelHandlerFactory implements ChannelHandlerFactory {
+    private final int maxLineLength;
+
+    public LineDelimiterBasedChannelHandlerFactory(int maxLineLength) {
+        this.maxLineLength = maxLineLength;
+    }
+
+    @Override
+    public ChannelHandler create() {
+        return new DelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
index d2a9285..eb983f9 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
@@ -24,12 +24,9 @@ import javax.net.ssl.SSLContext;
 import org.apache.james.protocols.api.Encryption;
 import org.apache.james.protocols.api.Protocol;
 import org.apache.james.protocols.api.handler.ProtocolHandler;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
-import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 import org.jboss.netty.handler.execution.ExecutionHandler;
 import org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor;
 
@@ -49,11 +46,11 @@ public class NettyServer extends AbstractAsyncServer {
     public static class Builder {
         private Protocol protocol;
         private Optional<Encryption> secure;
-        private Optional<ChannelHandler> frameHandler;
+        private Optional<ChannelHandlerFactory> frameHandlerFactory;
 
         private Builder() {
             secure = Optional.absent();
-            frameHandler = Optional.absent();
+            frameHandlerFactory = Optional.absent();
         }
 
         public Builder protocol(Protocol protocol) {
@@ -67,8 +64,8 @@ public class NettyServer extends AbstractAsyncServer {
             return this;
         }
 
-        public Builder frameHandler(ChannelHandler frameHandler) {
-            this.frameHandler = Optional.fromNullable(frameHandler);
+        public Builder frameHandlerFactory(ChannelHandlerFactory frameHandlerFactory) {
+            this.frameHandlerFactory = Optional.fromNullable(frameHandlerFactory);
             return this;
         }
 
@@ -76,13 +73,13 @@ public class NettyServer extends AbstractAsyncServer {
             Preconditions.checkState(protocol != null, "'protocol' is mandatory");
             return new NettyServer(protocol, 
                     secure.orNull(),
-                    frameHandler.or(new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter())));
+                    frameHandlerFactory.or(new LineDelimiterBasedChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH)));
         }
     }
 
     protected final Protocol protocol;
     protected final Encryption secure;
-    private final ChannelHandler frameHandler;
+    private final ChannelHandlerFactory frameHandlerFactory;
     
     private ExecutionHandler eHandler;
     
@@ -92,10 +89,10 @@ public class NettyServer extends AbstractAsyncServer {
 
     private int maxCurConnectionsPerIP;
    
-    private NettyServer(Protocol protocol, Encryption secure, ChannelHandler frameHandler) {
+    private NettyServer(Protocol protocol, Encryption secure, ChannelHandlerFactory frameHandlerFactory) {
         this.protocol = protocol;
         this.secure = secure;
-        this.frameHandler = frameHandler;
+        this.frameHandlerFactory = frameHandlerFactory;
     }
     
     protected ExecutionHandler createExecutionHandler(int size) {
@@ -141,14 +138,14 @@ public class NettyServer extends AbstractAsyncServer {
         super.bind();
     }
 
-    private ChannelHandler getFrameHandler() {
-        return frameHandler;
+    private ChannelHandlerFactory getFrameHandlerFactory() {
+        return frameHandlerFactory;
     }
 
     @Override
     protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group) {
 
-        return new AbstractSSLAwareChannelPipelineFactory(getTimeout(), maxCurConnections, maxCurConnectionsPerIP, group, eHandler, getFrameHandler()) {
+        return new AbstractSSLAwareChannelPipelineFactory(getTimeout(), maxCurConnections, maxCurConnectionsPerIP, group, eHandler, getFrameHandlerFactory()) {
 
             @Override
             protected ChannelUpstreamHandler createHandler() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java b/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
index 1d327db..facb52f 100644
--- a/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
+++ b/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
@@ -25,7 +25,6 @@ import javax.net.ssl.SSLContext;
 
 import org.apache.james.protocols.api.Encryption;
 import org.apache.james.protocols.api.Protocol;
-import org.jboss.netty.channel.ChannelHandler;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -61,11 +60,11 @@ public class NettyServerTest {
     public void buildShouldWorkWhenEverythingIsGiven() throws Exception {
         Protocol protocol = mock(Protocol.class);
         Encryption encryption = Encryption.createStartTls(SSLContext.getDefault());
-        ChannelHandler channelHandler = mock(ChannelHandler.class);
+        ChannelHandlerFactory channelHandlerFactory = mock(ChannelHandlerFactory.class);
         NettyServer.builder()
             .protocol(protocol)
             .secure(encryption)
-            .frameHandler(channelHandler)
+            .frameHandlerFactory(channelHandlerFactory)
             .build();
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index a9f913f..b96cc1d 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -47,7 +47,6 @@
         <dependency>
             <groupId>org.apache.james.protocols</groupId>
             <artifactId>protocols-netty</artifactId>
-            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsLineDelimiterChannelHandlerFactory.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsLineDelimiterChannelHandlerFactory.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsLineDelimiterChannelHandlerFactory.java
new file mode 100644
index 0000000..de33ac6
--- /dev/null
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsLineDelimiterChannelHandlerFactory.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.protocols.smtp;
+
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
+import org.jboss.netty.channel.ChannelHandler;
+import org.jboss.netty.handler.codec.frame.Delimiters;
+
+public class AllButStartTlsLineDelimiterChannelHandlerFactory implements ChannelHandlerFactory {
+
+    private int maxFrameLength;
+
+    public AllButStartTlsLineDelimiterChannelHandlerFactory(int maxFrameLength) {
+        this.maxFrameLength = maxFrameLength;
+    }
+
+    @Override
+    public ChannelHandler create() {
+        return new AllButStartTlsDelimiterChannelHandler(maxFrameLength, false, Delimiters.lineDelimiter());
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
index 801cf3b..d5027e8 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
@@ -26,6 +26,7 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.InetSocketAddress;
+import java.net.SocketException;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
@@ -53,9 +54,12 @@ import org.apache.james.protocols.smtp.hook.RcptHook;
 import org.apache.james.protocols.smtp.utils.TestMessageHook;
 import org.junit.Test;
 
+import com.google.common.base.Charsets;
+import com.google.common.io.CharStreams;
+
 public abstract class AbstractSMTPServerTest {
     
-    protected final static String MSG1 = "Subject: Testmessage\r\n\r\nThis is a message";
+    protected final static String MSG1 = "Subject: Testmessage\r\n\r\nThis is a message\r\n";
     protected final static String SENDER = "me@sender";
     protected final static String RCPT1 ="rpct1@domain";
     protected final static String RCPT2 ="rpct2@domain";
@@ -69,35 +73,62 @@ public abstract class AbstractSMTPServerTest {
             server = createServer(createProtocol(hook));
             server.bind();
             
-            SMTPClient client = createClient();
             InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
-            client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
-            
-            client.helo("localhost");
-            assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
 
-            client.setSender(SENDER);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            send(server, bindedAddress, MSG1);
 
-            client.addRecipient(RCPT1);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+            Iterator<MailEnvelope> queued = hook.getQueued().iterator();
+            assertTrue(queued.hasNext());
+            
+            MailEnvelope env = queued.next();
+            checkEnvelope(env, SENDER, Arrays.asList(RCPT1, RCPT2), MSG1);
+            assertFalse(queued.hasNext());
 
-            client.addRecipient(RCPT2);
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testDeliveryWith4SimultaneousThreads() throws Exception {
+        TestMessageHook hook = new TestMessageHook();
+        ProtocolServer server = null;
+        try {
+            server = createServer(createProtocol(hook));
+            server.bind();
+            InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
 
-            assertTrue(client.sendShortMessageData(MSG1));
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
-            
-            client.quit();
-            assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
-            client.disconnect();
+            String mailContent = CharStreams.toString(new InputStreamReader(ClassLoader.getSystemResourceAsStream("a50.eml"), Charsets.US_ASCII));
+            Thread thread1 = new SendThread(server, bindedAddress, mailContent);
+            Thread thread2 = new SendThread(server, bindedAddress, mailContent);
+            Thread thread3 = new SendThread(server, bindedAddress, mailContent);
+            Thread thread4 = new SendThread(server, bindedAddress, mailContent);
+            thread1.start();
+            thread2.start();
+            thread3.start();
+            thread4.start();
+            thread1.join(1000);
+            thread2.join(1000);
+            thread3.join(1000);
+            thread4.join(1000);
 
             Iterator<MailEnvelope> queued = hook.getQueued().iterator();
             assertTrue(queued.hasNext());
-            
+
             MailEnvelope env = queued.next();
-            checkEnvelope(env, SENDER, Arrays.asList(RCPT1, RCPT2), MSG1);
+            checkEnvelope(env, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
+            assertTrue(queued.hasNext());
+            MailEnvelope env2 = queued.next();
+            checkEnvelope(env2, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
+            assertTrue(queued.hasNext());
+            MailEnvelope env3 = queued.next();
+            checkEnvelope(env3, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
+            assertTrue(queued.hasNext());
+            MailEnvelope env4 = queued.next();
+            checkEnvelope(env4, SENDER, Arrays.asList(RCPT1, RCPT2), mailContent);
             assertFalse(queued.hasNext());
 
         } finally {
@@ -105,7 +136,56 @@ public abstract class AbstractSMTPServerTest {
                 server.unbind();
             }
         }
+    }
+    
+    public class SendThread extends Thread {
+        private ProtocolServer server;
+        private InetSocketAddress bindedAddress;
+        private String msg;
+
+        public SendThread(ProtocolServer server, InetSocketAddress bindedAddress, String msg) {
+            this.server = server;
+            this.bindedAddress = bindedAddress;
+            this.msg = msg;
+        }
+        
+        @Override
+        public void run() {
+            try {
+                send(server, bindedAddress, msg);
+            } catch (SocketException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void send(ProtocolServer server, InetSocketAddress bindedAddress, String msg) throws SocketException, IOException {
+        SMTPClient client = createClient();
+        client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
+        assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        
+        client.helo("localhost");
+        assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+        client.setSender(SENDER);
+        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+        client.addRecipient(RCPT1);
+        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+        client.addRecipient(RCPT2);
+        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+        assertTrue(client.sendShortMessageData(msg));
+        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
         
+        client.quit();
+        assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+        client.disconnect();
     }
     
     @Test
@@ -1081,7 +1161,7 @@ public abstract class AbstractSMTPServerTest {
                     sb.append("\r\n");
                 }
             }
-            String msgQueued = sb.subSequence(0, sb.length() - 2).toString();
+            String msgQueued = sb.subSequence(0, sb.length()).toString();
 
             assertEquals(msg.length(), msgQueued.length());
             for (int i = 0; i < msg.length(); i++) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
index e0ae441..3c4edd7 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
@@ -44,13 +44,12 @@ import org.apache.james.protocols.api.utils.MockLogger;
 import org.apache.james.protocols.api.utils.ProtocolServerUtils;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
 import org.apache.james.protocols.netty.NettyServer;
-import org.apache.james.protocols.smtp.AllButStartTlsDelimiterChannelHandler;
+import org.apache.james.protocols.smtp.AllButStartTlsLineDelimiterChannelHandlerFactory;
 import org.apache.james.protocols.smtp.SMTPConfigurationImpl;
 import org.apache.james.protocols.smtp.SMTPProtocol;
 import org.apache.james.protocols.smtp.SMTPProtocolHandlerChain;
 import org.apache.james.protocols.smtp.utils.TestMessageHook;
 import org.assertj.core.api.AssertDelegateTarget;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 import org.junit.After;
 import org.junit.Test;
 
@@ -75,7 +74,7 @@ public class NettyStartTlsSMTPServerTest {
         NettyServer server = NettyServer.builder()
                 .protocol(protocol)
                 .secure(enc)
-                .frameHandler(new AllButStartTlsDelimiterChannelHandler(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()))
+                .frameHandlerFactory(new AllButStartTlsLineDelimiterChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH))
                 .build();
         server.setListenAddresses(new InetSocketAddress(LOCALHOST_IP, RANDOM_PORT));
         return server;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/protocols/smtp/src/test/resources/a50.eml
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/resources/a50.eml b/protocols/smtp/src/test/resources/a50.eml
new file mode 100644
index 0000000..2dc5903
--- /dev/null
+++ b/protocols/smtp/src/test/resources/a50.eml
@@ -0,0 +1,50 @@
+Subject: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Message-ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+X-Sender: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
index 371c50a..cc9c300 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
@@ -33,14 +33,13 @@ import org.apache.james.imap.encode.ImapEncoder;
 import org.apache.james.protocols.api.Encryption;
 import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
 import org.apache.james.protocols.netty.ChannelGroupHandler;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
 import org.apache.james.protocols.netty.ConnectionLimitUpstreamHandler;
 import org.apache.james.protocols.netty.ConnectionPerIpLimitUpstreamHandler;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
 import org.jboss.netty.handler.execution.ExecutionHandler;
 import org.jboss.netty.handler.ssl.SslHandler;
@@ -140,7 +139,7 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
                 // Add the text line decoder which limit the max line length,
                 // don't strip the delimiter and use CRLF as delimiter
                 // Use a SwitchableDelimiterBasedFrameDecoder, see JAMES-1436
-                pipeline.addLast(FRAMER, createFrameHandler());
+                pipeline.addLast(FRAMER, getFrameHandlerFactory().create());
                
                 Encryption secure = getEncryption();
                 if (secure != null && !secure.isStartTLS()) {
@@ -194,8 +193,8 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
     }
 
     @Override
-    protected ChannelHandler createFrameHandler() {
-        return new SwitchableDelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+    protected ChannelHandlerFactory createFrameHandlerFactory() {
+        return new SwitchableLineDelimiterBasedFrameDecoderFactory(maxLineLength);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineDelimiterBasedFrameDecoderFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineDelimiterBasedFrameDecoderFactory.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineDelimiterBasedFrameDecoderFactory.java
new file mode 100644
index 0000000..1335ae3
--- /dev/null
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineDelimiterBasedFrameDecoderFactory.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.imapserver.netty;
+
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
+import org.jboss.netty.channel.ChannelHandler;
+import org.jboss.netty.handler.codec.frame.Delimiters;
+
+public class SwitchableLineDelimiterBasedFrameDecoderFactory implements ChannelHandlerFactory {
+
+    private int maxLineLength;
+
+    public SwitchableLineDelimiterBasedFrameDecoderFactory(int maxLineLength) {
+        this.maxLineLength = maxLineLength;
+    }
+
+    @Override
+    public ChannelHandler create() {
+        return new SwitchableDelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/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 3fbf7e5..211dd74 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
@@ -45,9 +45,9 @@ import org.apache.james.lifecycle.api.LogEnabled;
 import org.apache.james.protocols.api.Encryption;
 import org.apache.james.protocols.lib.jmx.ServerMBean;
 import org.apache.james.protocols.netty.AbstractAsyncServer;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
 import org.apache.james.util.concurrent.JMXEnabledThreadPoolExecutor;
 import org.jboss.netty.bootstrap.ServerBootstrap;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
@@ -111,7 +111,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
     private final ConnectionCountHandler countHandler = new ConnectionCountHandler();
 
     private ExecutionHandler executionHandler = null;
-    private ChannelHandler frameHandler;
+    private ChannelHandlerFactory frameHandlerFactory;
 
     private int maxExecutorThreads;
 
@@ -271,7 +271,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
             buildSSLContext();
             preInit();
             executionHandler = createExecutionHander();
-            frameHandler = createFrameHandler();
+            frameHandlerFactory = createFrameHandlerFactory();
             bind();
 
             mbeanServer = ManagementFactory.getPlatformMBeanServer();
@@ -568,7 +568,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
         return new ExecutionHandler(new JMXEnabledOrderedMemoryAwareThreadPoolExecutor(maxExecutorThreads, 0, 0, getThreadPoolJMXPath(), getDefaultJMXName() + "-executor"));
     }
 
-    protected abstract ChannelHandler createFrameHandler();
+    protected abstract ChannelHandlerFactory createFrameHandlerFactory();
 
     /**
      * Return the {@link ExecutionHandler} or null if non should be used. Be sure you call {@link #createExecutionHander()} before
@@ -579,15 +579,15 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
         return executionHandler;
     }
     
-    protected ChannelHandler getFrameHandler() {
-        return frameHandler;
+    protected ChannelHandlerFactory getFrameHandlerFactory() {
+        return frameHandlerFactory;
     }
 
     protected abstract ChannelUpstreamHandler createCoreHandler();
     
     @Override
     protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group) {
-        return new AbstractExecutorAwareChannelPipelineFactory(getTimeout(), connectionLimit, connPerIP, group, enabledCipherSuites, getExecutionHandler(), getFrameHandler()) {
+        return new AbstractExecutorAwareChannelPipelineFactory(getTimeout(), connectionLimit, connPerIP, group, enabledCipherSuites, getExecutionHandler(), getFrameHandlerFactory()) {
             @Override
             protected SSLContext getSSLContext() {
                 if (encryption == null) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractExecutorAwareChannelPipelineFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractExecutorAwareChannelPipelineFactory.java b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractExecutorAwareChannelPipelineFactory.java
index 6b71a51..da06bda 100644
--- a/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractExecutorAwareChannelPipelineFactory.java
+++ b/server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractExecutorAwareChannelPipelineFactory.java
@@ -19,8 +19,8 @@
 package org.apache.james.protocols.lib.netty;
 
 import org.apache.james.protocols.netty.AbstractSSLAwareChannelPipelineFactory;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
 import org.apache.james.protocols.netty.HandlerConstants;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.group.ChannelGroup;
 import org.jboss.netty.handler.execution.ExecutionHandler;
@@ -32,12 +32,12 @@ import org.jboss.netty.handler.execution.ExecutionHandler;
  */
 public abstract class AbstractExecutorAwareChannelPipelineFactory extends AbstractSSLAwareChannelPipelineFactory{
 
-    public AbstractExecutorAwareChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler, ChannelHandler frameHandler) {
-        super(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandler);
+    public AbstractExecutorAwareChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler, ChannelHandlerFactory frameHandlerFactory) {
+        super(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandlerFactory);
     }
 
-    public AbstractExecutorAwareChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler, ChannelHandler frameHandler) {
-        super(timeout, maxConnections, maxConnectsPerIp, group, enabledCipherSuites, eHandler, frameHandler);
+    public AbstractExecutorAwareChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler, ChannelHandlerFactory frameHandlerFactory) {
+        super(timeout, maxConnections, maxConnectsPerIp, group, enabledCipherSuites, eHandler, frameHandlerFactory);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
index f6c4fee..422e8ef 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
@@ -28,12 +28,11 @@ import org.apache.james.protocols.lib.handler.HandlersPackage;
 import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.apache.james.protocols.lmtp.LMTPConfiguration;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
+import org.apache.james.protocols.netty.LineDelimiterBasedChannelHandlerFactory;
 import org.apache.james.protocols.smtp.SMTPProtocol;
 import org.apache.james.smtpserver.netty.SMTPChannelUpstreamHandler;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
-import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 
 public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServerMBean {
 
@@ -160,8 +159,8 @@ public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServe
     }
 
     @Override
-    protected ChannelHandler createFrameHandler() {
-        return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+    protected ChannelHandlerFactory createFrameHandlerFactory() {
+        return new LineDelimiterBasedChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
index 82c8ed3..827fa40 100644
--- a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
+++ b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
@@ -27,15 +27,14 @@ import org.apache.james.managesieve.transcode.ManageSieveProcessor;
 import org.apache.james.protocols.api.Encryption;
 import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
 import org.apache.james.protocols.netty.ChannelGroupHandler;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
 import org.apache.james.protocols.netty.ConnectionLimitUpstreamHandler;
 import org.apache.james.protocols.netty.ConnectionPerIpLimitUpstreamHandler;
-import org.jboss.netty.channel.ChannelHandler;
+import org.apache.james.protocols.netty.LineDelimiterBasedChannelHandlerFactory;
 import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
-import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 import org.jboss.netty.handler.codec.string.StringDecoder;
 import org.jboss.netty.handler.codec.string.StringEncoder;
 import org.jboss.netty.handler.execution.ExecutionHandler;
@@ -115,7 +114,7 @@ public class ManageSieveServer extends AbstractConfigurableAsyncServer implement
                 // Add the text line decoder which limit the max line length,
                 // don't strip the delimiter and use CRLF as delimiter
                 // Use a SwitchableDelimiterBasedFrameDecoder, see JAMES-1436
-                pipeline.addLast(FRAMER, createFrameHandler());
+                pipeline.addLast(FRAMER, getFrameHandlerFactory().create());
                 pipeline.addLast(CONNECTION_COUNT_HANDLER, getConnectionCountHandler());
                 pipeline.addLast(CHUNK_WRITE_HANDLER, new ChunkedWriteHandler());
 
@@ -139,7 +138,7 @@ public class ManageSieveServer extends AbstractConfigurableAsyncServer implement
     }
 
     @Override
-    protected ChannelHandler createFrameHandler() {
-        return new DelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+    protected ChannelHandlerFactory createFrameHandlerFactory() {
+        return new LineDelimiterBasedChannelHandlerFactory(maxLineLength);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
index 5b14d46..5a4acb5 100644
--- a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
+++ b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
@@ -26,11 +26,10 @@ import org.apache.james.protocols.lib.handler.HandlersPackage;
 import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
 import org.apache.james.protocols.netty.BasicChannelUpstreamHandler;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
+import org.apache.james.protocols.netty.LineDelimiterBasedChannelHandlerFactory;
 import org.apache.james.protocols.pop3.POP3Protocol;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
-import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 
 /**
  * NIO POP3 Server which use Netty
@@ -105,8 +104,8 @@ public class POP3Server extends AbstractProtocolAsyncServer implements POP3Serve
     }
 
     @Override
-    protected ChannelHandler createFrameHandler() {
-        return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+    protected ChannelHandlerFactory createFrameHandlerFactory() {
+        return new LineDelimiterBasedChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d4f18a98/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 cad8941..1de34d1 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
@@ -30,15 +30,14 @@ import org.apache.james.protocols.api.logger.ProtocolLoggerAdapter;
 import org.apache.james.protocols.lib.handler.HandlersPackage;
 import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
-import org.apache.james.protocols.smtp.AllButStartTlsDelimiterChannelHandler;
+import org.apache.james.protocols.netty.ChannelHandlerFactory;
+import org.apache.james.protocols.smtp.AllButStartTlsLineDelimiterChannelHandlerFactory;
 import org.apache.james.protocols.smtp.SMTPConfiguration;
 import org.apache.james.protocols.smtp.SMTPProtocol;
 import org.apache.james.smtpserver.CoreCmdHandlerLoader;
 import org.apache.james.smtpserver.ExtendedSMTPSession;
 import org.apache.james.smtpserver.jmx.JMXHandlersLoader;
-import org.jboss.netty.channel.ChannelHandler;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
-import org.jboss.netty.handler.codec.frame.Delimiters;
 
 /**
  * NIO SMTPServer which use Netty
@@ -364,8 +363,8 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
     }
 
     @Override
-    protected ChannelHandler createFrameHandler() {
-        return new AllButStartTlsDelimiterChannelHandler(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+    protected ChannelHandlerFactory createFrameHandlerFactory() {
+        return new AllButStartTlsLineDelimiterChannelHandlerFactory(AbstractChannelPipelineFactory.MAX_LINE_LENGTH);
     }
 
 }


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


[3/5] james-project git commit: PROTOCOLS-115 Upgrade Netty version

Posted by ad...@apache.org.
PROTOCOLS-115 Upgrade Netty version


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

Branch: refs/heads/master
Commit: 6595c21b9373ec345c261132b82197c1e205d95a
Parents: 1456d37
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Feb 1 18:06:27 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Feb 2 15:23:43 2017 +0100

----------------------------------------------------------------------
 protocols/pom.xml | 2 +-
 server/pom.xml    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/6595c21b/protocols/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/pom.xml b/protocols/pom.xml
index a30de8b..3eb0ca3 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -47,7 +47,7 @@
     <properties>
         <target.jdk>1.6</target.jdk>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <netty.version>3.10.5.Final</netty.version>
+        <netty.version>3.10.6.Final</netty.version>
         <apache-mime4j.version>0.8.0</apache-mime4j.version>
         <commons-net.version>3.2</commons-net.version>
         <commons-lang.version>2.6</commons-lang.version>

http://git-wip-us.apache.org/repos/asf/james-project/blob/6595c21b/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index 613fd85..ab2eca5 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -165,7 +165,7 @@
         <log4j.version>1.2.17</log4j.version>
         <jcr.version>2.0</jcr.version>
         <xbean-spring.version>3.12</xbean-spring.version>
-        <netty.version>3.10.5.Final</netty.version>
+        <netty.version>3.10.6.Final</netty.version>
         <geronimo-annotation-spec.version>1.0.1</geronimo-annotation-spec.version>
         <spring-osgi-extender.version>1.2.1</spring-osgi-extender.version>
         <org.osgi.core.version>5.0.0</org.osgi.core.version>


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