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 2016/12/06 12:25:19 UTC
[01/12] james-project git commit: JAMES-1862 Fix Eclipse warnings
Repository: james-project
Updated Branches:
refs/heads/master b38510b9a -> a816b1269
JAMES-1862 Fix Eclipse warnings
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/76f9d610
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/76f9d610
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/76f9d610
Branch: refs/heads/master
Commit: 76f9d610193ba219cb4e9bf03df6875bd44fe61a
Parents: 8687657
Author: Antoine Duprat <ad...@apache.org>
Authored: Thu Dec 1 14:17:00 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:00 2016 +0100
----------------------------------------------------------------------
.../org/apache/james/transport/mailets/jsieve/FileIntoAction.java | 2 --
.../java/org/apache/james/transport/mailets/jsieve/Poster.java | 1 -
.../java/org/apache/james/imapserver/netty/IMAPServerFactory.java | 1 -
.../java/org/apache/james/imapserver/netty/OioIMAPServer.java | 1 -
.../main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java | 3 +--
5 files changed, 1 insertion(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/76f9d610/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
index 1c91bba..6a56482 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
@@ -19,7 +19,6 @@
package org.apache.james.transport.mailets.jsieve;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.commons.logging.Log;
import org.apache.jsieve.mail.Action;
@@ -68,7 +67,6 @@ public class FileIntoAction implements MailAction {
* @param context not null
* @throws MessagingException
*/
- @SuppressWarnings("deprecation")
public void execute(ActionFileInto anAction, Mail aMail, final ActionContext context) throws MessagingException
{
String destinationMailbox = anAction.getDestination();
http://git-wip-us.apache.org/repos/asf/james-project/blob/76f9d610/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
index c86d352..ae94779 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
@@ -20,7 +20,6 @@
package org.apache.james.transport.mailets.jsieve;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.mailet.Mail;
http://git-wip-us.apache.org/repos/asf/james-project/blob/76f9d610/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
index cb92875..351dac3 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
@@ -28,7 +28,6 @@ import org.apache.james.filesystem.api.FileSystem;
import org.apache.james.imap.api.process.ImapProcessor;
import org.apache.james.imap.decode.ImapDecoder;
import org.apache.james.imap.encode.ImapEncoder;
-import org.apache.james.metrics.api.Metric;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
import org.apache.james.protocols.lib.netty.AbstractServerFactory;
http://git-wip-us.apache.org/repos/asf/james-project/blob/76f9d610/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/OioIMAPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/OioIMAPServer.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/OioIMAPServer.java
index c3ce882..90e4d4a 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/OioIMAPServer.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/OioIMAPServer.java
@@ -21,7 +21,6 @@ package org.apache.james.imapserver.netty;
import org.apache.james.imap.api.process.ImapProcessor;
import org.apache.james.imap.decode.ImapDecoder;
import org.apache.james.imap.encode.ImapEncoder;
-import org.apache.james.metrics.api.Metric;
import org.jboss.netty.channel.socket.ServerSocketChannelFactory;
import org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory;
import org.jboss.netty.handler.execution.ExecutionHandler;
http://git-wip-us.apache.org/repos/asf/james-project/blob/76f9d610/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
index eea2319..36770d6 100644
--- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
+++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
@@ -21,11 +21,10 @@ package org.apache.james.queue.jms;
import javax.inject.Inject;
import javax.jms.ConnectionFactory;
-import org.apache.james.metrics.api.Metric;
import org.apache.james.metrics.api.MetricFactory;
-import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
import org.apache.james.queue.api.MailQueue;
import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
import org.apache.james.queue.library.AbstractMailQueueFactory;
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/12] james-project git commit: JAMES-1862 Add FrameHandler when
building the server protocols
Posted by ad...@apache.org.
JAMES-1862 Add FrameHandler when building the server protocols
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b61399a6
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b61399a6
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b61399a6
Branch: refs/heads/master
Commit: b61399a6c3dc6f5c717f2ce118e4c3f84c2a4677
Parents: 50cf7b4
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 14:27:15 2016 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Dec 6 11:29:31 2016 +0100
----------------------------------------------------------------------
.../lmtp/netty/NettyLMTPSServerTest.java | 5 +-
.../lmtp/netty/NettyLMTPServerTest.java | 4 +-
protocols/netty/pom.xml | 14 ++++
.../netty/AbstractChannelPipelineFactory.java | 14 ++--
.../AbstractSSLAwareChannelPipelineFactory.java | 11 +--
.../netty/BasicChannelUpstreamHandler.java | 6 +-
.../james/protocols/netty/NettyServer.java | 64 +++++++++++++++---
.../james/protocols/netty/NettyServerTest.java | 71 ++++++++++++++++++++
.../pop3/netty/NettyPOP3SServerTest.java | 5 +-
.../pop3/netty/NettyPOP3ServerTest.java | 4 +-
.../pop3/netty/NettyStartTlsPOP3ServerTest.java | 5 +-
.../smtp/netty/NettySMTPSServerTest.java | 5 +-
.../smtp/netty/NettySMTPServerTest.java | 4 +-
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 32 +++++++--
.../james/imapserver/netty/IMAPServer.java | 8 ++-
.../netty/AbstractConfigurableAsyncServer.java | 12 +++-
...ractExecutorAwareChannelPipelineFactory.java | 9 +--
.../james/lmtpserver/netty/LMTPServer.java | 9 +++
.../netty/ManageSieveServer.java | 16 +++--
.../james/pop3server/netty/POP3Server.java | 9 +++
.../james/smtpserver/netty/SMTPServer.java | 9 +++
21 files changed, 265 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
index f7c46de..6915fcc 100644
--- a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
+++ b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
@@ -13,7 +13,10 @@ public class NettyLMTPSServerTest extends AbstractLMTPSServerTest{
@Override
protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address) {
- NettyServer server = new NettyServer(protocol, Encryption.createTls(BogusSslContextFactory.getServerContext()));
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .secure(Encryption.createTls(BogusSslContextFactory.getServerContext()))
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
index ae72cc1..6e1a571 100644
--- a/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
+++ b/protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
@@ -29,7 +29,9 @@ public class NettyLMTPServerTest extends AbstractLMTPServerTest {
@Override
protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address) {
- NettyServer server = new NettyServer(protocol);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/netty/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/netty/pom.xml b/protocols/netty/pom.xml
index 5eb8849..330904f 100644
--- a/protocols/netty/pom.xml
+++ b/protocols/netty/pom.xml
@@ -39,9 +39,23 @@
<artifactId>protocols-api</artifactId>
</dependency>
<dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 90af526..39a5b5f 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,6 +20,7 @@ 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;
@@ -45,21 +46,22 @@ public abstract class AbstractChannelPipelineFactory implements ChannelPipelineF
private final ChannelGroupHandler groupHandler;
private final int timeout;
private final ExecutionHandler eHandler;
+ private final ChannelHandler frameHandler;
public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels) {
- this(timeout, maxConnections, maxConnectsPerIp, channels, null);
+ this(timeout, maxConnections, maxConnectsPerIp, channels, null, new DelimiterBasedFrameDecoder(MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()));
}
- public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels, ExecutionHandler eHandler) {
+ public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels, ExecutionHandler eHandler,
+ ChannelHandler frameHandler) {
this.connectionLimitHandler = new ConnectionLimitUpstreamHandler(maxConnections);
this.connectionPerIpLimitHandler = new ConnectionPerIpLimitUpstreamHandler(maxConnectsPerIp);
this.groupHandler = new ChannelGroupHandler(channels);
this.timeout = timeout;
this.eHandler = eHandler;
+ this.frameHandler = frameHandler;
}
-
-
/**
* @see org.jboss.netty.channel.ChannelPipelineFactory#getPipeline()
*/
@@ -74,7 +76,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, new DelimiterBasedFrameDecoder(MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()));
+ pipeline.addLast(HandlerConstants.FRAMER, frameHandler);
// Add the ChunkedWriteHandler to be able to write ChunkInput
pipeline.addLast(HandlerConstants.CHUNK_HANDLER, new ChunkedWriteHandler());
@@ -90,8 +92,6 @@ public abstract class AbstractChannelPipelineFactory implements ChannelPipelineF
return pipeline;
}
-
-
/**
* Create the core {@link ChannelUpstreamHandler} to use
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 1ec33a3..e78695c 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,6 +21,7 @@ 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;
@@ -37,13 +38,15 @@ public abstract class AbstractSSLAwareChannelPipelineFactory extends AbstractCha
private String[] enabledCipherSuites = null;
public AbstractSSLAwareChannelPipelineFactory(int timeout,
- int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler) {
- super(timeout, maxConnections, maxConnectsPerIp, group, eHandler);
+ int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler,
+ ChannelHandler frameHandler) {
+ super(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandler);
}
public AbstractSSLAwareChannelPipelineFactory(int timeout,
- int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler) {
- this(timeout, maxConnections, maxConnectsPerIp, group, eHandler);
+ int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler,
+ ChannelHandler frameHandler) {
+ this(timeout, maxConnections, maxConnectsPerIp, group, eHandler, frameHandler);
// 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/b61399a6/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
----------------------------------------------------------------------
diff --git a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
index c3450d6..1464b2b 100644
--- a/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
+++ b/protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelUpstreamHandler.java
@@ -23,19 +23,18 @@ import java.util.List;
import javax.net.ssl.SSLEngine;
-import org.apache.james.protocols.api.ProtocolSessionImpl;
+import org.apache.james.protocols.api.Encryption;
import org.apache.james.protocols.api.Protocol;
import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.ProtocolSessionImpl;
import org.apache.james.protocols.api.ProtocolTransport;
import org.apache.james.protocols.api.Response;
-import org.apache.james.protocols.api.Encryption;
import org.apache.james.protocols.api.future.FutureResponse;
import org.apache.james.protocols.api.handler.ConnectHandler;
import org.apache.james.protocols.api.handler.DisconnectHandler;
import org.apache.james.protocols.api.handler.LineHandler;
import org.apache.james.protocols.api.handler.ProtocolHandlerChain;
import org.apache.james.protocols.api.handler.ProtocolHandlerResultHandler;
-import org.apache.james.protocols.netty.NettyProtocolTransport;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandler.Sharable;
@@ -139,7 +138,6 @@ public class BasicChannelUpstreamHandler extends SimpleChannelUpstreamHandler {
if (lineHandlers.size() > 0) {
ChannelBuffer buf = (ChannelBuffer) e.getMessage();
-
LineHandler lHandler= (LineHandler) lineHandlers.getLast();
long start = System.currentTimeMillis();
Response response = lHandler.onLine(pSession,buf.toByteBuffer());
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 4817182..d2a9285 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
@@ -21,42 +21,81 @@ package org.apache.james.protocols.netty;
import javax.net.ssl.SSLContext;
-import org.apache.james.protocols.api.Protocol;
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;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
/**
* Generic NettyServer
*/
public class NettyServer extends AbstractAsyncServer {
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private Protocol protocol;
+ private Optional<Encryption> secure;
+ private Optional<ChannelHandler> frameHandler;
+
+ private Builder() {
+ secure = Optional.absent();
+ frameHandler = Optional.absent();
+ }
+
+ public Builder protocol(Protocol protocol) {
+ Preconditions.checkNotNull(protocol, "'protocol' is mandatory");
+ this.protocol = protocol;
+ return this;
+ }
+
+ public Builder secure(Encryption secure) {
+ this.secure = Optional.fromNullable(secure);
+ return this;
+ }
+
+ public Builder frameHandler(ChannelHandler frameHandler) {
+ this.frameHandler = Optional.fromNullable(frameHandler);
+ return this;
+ }
+
+ public NettyServer build() {
+ Preconditions.checkState(protocol != null, "'protocol' is mandatory");
+ return new NettyServer(protocol,
+ secure.orNull(),
+ frameHandler.or(new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter())));
+ }
+ }
+
protected final Protocol protocol;
+ protected final Encryption secure;
+ private final ChannelHandler frameHandler;
private ExecutionHandler eHandler;
private ChannelUpstreamHandler coreHandler;
- protected final Encryption secure;
-
private int maxCurConnections;
private int maxCurConnectionsPerIP;
- public NettyServer(Protocol protocol) {
- this(protocol, null);
- }
-
-
- public NettyServer(Protocol protocol, Encryption secure) {
- super();
+ private NettyServer(Protocol protocol, Encryption secure, ChannelHandler frameHandler) {
this.protocol = protocol;
this.secure = secure;
+ this.frameHandler = frameHandler;
}
protected ExecutionHandler createExecutionHandler(int size) {
@@ -102,11 +141,14 @@ public class NettyServer extends AbstractAsyncServer {
super.bind();
}
+ private ChannelHandler getFrameHandler() {
+ return frameHandler;
+ }
@Override
protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group) {
- return new AbstractSSLAwareChannelPipelineFactory(getTimeout(), maxCurConnections, maxCurConnectionsPerIP, group, eHandler) {
+ return new AbstractSSLAwareChannelPipelineFactory(getTimeout(), maxCurConnections, maxCurConnectionsPerIP, group, eHandler, getFrameHandler()) {
@Override
protected ChannelUpstreamHandler createHandler() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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
new file mode 100644
index 0000000..1d327db
--- /dev/null
+++ b/protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
@@ -0,0 +1,71 @@
+/****************************************************************
+ * 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 static org.mockito.Mockito.mock;
+
+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;
+
+public class NettyServerTest {
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void protocolShouldThrowWhenProtocolIsNull() {
+ expectedException.expect(NullPointerException.class);
+ NettyServer.builder()
+ .protocol(null);
+ }
+
+ @Test
+ public void buildShouldThrowWhenProtocolIsNotGiven() {
+ expectedException.expect(IllegalStateException.class);
+ NettyServer.builder()
+ .build();
+ }
+
+ @Test
+ public void buildShouldWorkWhenProtocolIsGiven() {
+ Protocol protocol = mock(Protocol.class);
+ NettyServer.builder()
+ .protocol(protocol)
+ .build();
+ }
+
+ @Test
+ public void buildShouldWorkWhenEverythingIsGiven() throws Exception {
+ Protocol protocol = mock(Protocol.class);
+ Encryption encryption = Encryption.createStartTls(SSLContext.getDefault());
+ ChannelHandler channelHandler = mock(ChannelHandler.class);
+ NettyServer.builder()
+ .protocol(protocol)
+ .secure(encryption)
+ .frameHandler(channelHandler)
+ .build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
index 4014038..c1ac359 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
@@ -30,7 +30,10 @@ public class NettyPOP3SServerTest extends AbstractPOP3SServerTest {
@Override
protected ProtocolServer createEncryptedServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
- NettyServer server = new NettyServer(protocol, enc);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .secure(enc)
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
index 81e29be..8bf701d 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
@@ -29,7 +29,9 @@ public class NettyPOP3ServerTest extends AbstractPOP3ServerTest{
@Override
protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address) {
- NettyServer server = new NettyServer(protocol);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
index 20b4718..5071353 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
@@ -30,7 +30,10 @@ public class NettyStartTlsPOP3ServerTest extends AbstractStartTlsPOP3ServerTest{
@Override
protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
- NettyServer server = new NettyServer(protocol, enc);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .secure(enc)
+ .build();
server.setListenAddresses(address);
return server;
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
index b6fa768..cdb3d2e 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
@@ -35,7 +35,10 @@ public class NettySMTPSServerTest extends AbstractSMTPSServerTest{
@Override
protected ProtocolServer createEncryptedServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
- NettyServer server = new NettyServer(protocol, enc);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .secure(enc)
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
index af691b0..d796506 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
@@ -35,7 +35,9 @@ public class NettySMTPServerTest extends AbstractSMTPServerTest{
@Override
protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address) {
- NettyServer server = new NettyServer(protocol);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .build();
server.setListenAddresses(address);
return server;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 5a8058c..e8c16af 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
@@ -42,11 +42,15 @@ import org.apache.james.protocols.api.utils.BogusSslContextFactory;
import org.apache.james.protocols.api.utils.BogusTrustManagerFactory;
import org.apache.james.protocols.api.utils.MockLogger;
import org.apache.james.protocols.api.utils.TestUtils;
+import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
import org.apache.james.protocols.netty.NettyServer;
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.DelimiterBasedFrameDecoder;
+import org.jboss.netty.handler.codec.frame.Delimiters;
import org.junit.After;
import org.junit.Test;
@@ -65,7 +69,11 @@ public class NettyStartTlsSMTPServerTest {
}
private ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
- NettyServer server = new NettyServer(protocol, enc);
+ NettyServer server = NettyServer.builder()
+ .protocol(protocol)
+ .secure(enc)
+ .frameHandler(new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()))
+ .build();
server.setListenAddresses(address);
return server;
}
@@ -125,19 +133,29 @@ public class NettyStartTlsSMTPServerTest {
client.connect(address.getAddress().getHostAddress(), address.getPort());
client.sendCommand("EHLO localhost");
- assertThat(isStartTLSAnnounced(client)).isTrue();
+ assertThat(new StartTLSAssert(client)).isStartTLSAnnounced();
client.quit();
client.disconnect();
}
- private boolean isStartTLSAnnounced(SMTPSClient client) {
- for (String reply: client.getReplyStrings()) {
- if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
- return true;
+ private static class StartTLSAssert implements AssertDelegateTarget {
+
+ private final SMTPSClient client;
+
+ public StartTLSAssert(SMTPSClient client) {
+ this.client = client;
+
+ }
+
+ public boolean isStartTLSAnnounced() {
+ for (String reply: client.getReplyStrings()) {
+ if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
+ return true;
+ }
}
+ return false;
}
- return false;
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 0d592c4..371c50a 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
@@ -35,6 +35,7 @@ import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
import org.apache.james.protocols.netty.ChannelGroupHandler;
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;
@@ -139,7 +140,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, new SwitchableDelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter()));
+ pipeline.addLast(FRAMER, createFrameHandler());
Encryption secure = getEncryption();
if (secure != null && !secure.isStartTLS()) {
@@ -192,4 +193,9 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
return null;
}
+ @Override
+ protected ChannelHandler createFrameHandler() {
+ return new SwitchableDelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 4575172..3fbf7e5 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
@@ -47,6 +47,7 @@ import org.apache.james.protocols.lib.jmx.ServerMBean;
import org.apache.james.protocols.netty.AbstractAsyncServer;
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;
@@ -110,11 +111,13 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
private final ConnectionCountHandler countHandler = new ConnectionCountHandler();
private ExecutionHandler executionHandler = null;
+ private ChannelHandler frameHandler;
private int maxExecutorThreads;
private MBeanServer mbeanServer;
+
@Inject
public final void setFileSystem(FileSystem filesystem) {
this.fileSystem = filesystem;
@@ -268,6 +271,7 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
buildSSLContext();
preInit();
executionHandler = createExecutionHander();
+ frameHandler = createFrameHandler();
bind();
mbeanServer = ManagementFactory.getPlatformMBeanServer();
@@ -564,6 +568,8 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
return new ExecutionHandler(new JMXEnabledOrderedMemoryAwareThreadPoolExecutor(maxExecutorThreads, 0, 0, getThreadPoolJMXPath(), getDefaultJMXName() + "-executor"));
}
+ protected abstract ChannelHandler createFrameHandler();
+
/**
* Return the {@link ExecutionHandler} or null if non should be used. Be sure you call {@link #createExecutionHander()} before
*
@@ -573,11 +579,15 @@ public abstract class AbstractConfigurableAsyncServer extends AbstractAsyncServe
return executionHandler;
}
+ protected ChannelHandler getFrameHandler() {
+ return frameHandler;
+ }
+
protected abstract ChannelUpstreamHandler createCoreHandler();
@Override
protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group) {
- return new AbstractExecutorAwareChannelPipelineFactory(getTimeout(), connectionLimit, connPerIP, group, enabledCipherSuites, getExecutionHandler()) {
+ return new AbstractExecutorAwareChannelPipelineFactory(getTimeout(), connectionLimit, connPerIP, group, enabledCipherSuites, getExecutionHandler(), getFrameHandler()) {
@Override
protected SSLContext getSSLContext() {
if (encryption == null) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 1a88d9e..6b71a51 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
@@ -20,6 +20,7 @@ package org.apache.james.protocols.lib.netty;
import org.apache.james.protocols.netty.AbstractSSLAwareChannelPipelineFactory;
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;
@@ -31,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) {
- super(timeout, maxConnections, maxConnectsPerIp, group, eHandler);
+ 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, String[] enabledCipherSuites, ExecutionHandler eHandler) {
- super(timeout, maxConnections, maxConnectsPerIp, group, enabledCipherSuites, eHandler);
+ public AbstractExecutorAwareChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler, ChannelHandler frameHandler) {
+ super(timeout, maxConnections, maxConnectsPerIp, group, enabledCipherSuites, eHandler, frameHandler);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 860a05f..f6c4fee 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
@@ -27,9 +27,13 @@ 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.lmtp.LMTPConfiguration;
+import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
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 {
@@ -155,4 +159,9 @@ public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServe
return JMXHandlersLoader.class;
}
+ @Override
+ protected ChannelHandler createFrameHandler() {
+ return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 2308714..82c8ed3 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
@@ -19,12 +19,17 @@
package org.apache.james.managesieveserver.netty;
+import static org.jboss.netty.channel.Channels.pipeline;
+
+import javax.net.ssl.SSLEngine;
+
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.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;
@@ -40,10 +45,6 @@ import org.jboss.netty.util.CharsetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.net.ssl.SSLEngine;
-
-import static org.jboss.netty.channel.Channels.pipeline;
-
public class ManageSieveServer extends AbstractConfigurableAsyncServer implements ManageSieveServerMBean {
private static final Logger LOGGER = LoggerFactory.getLogger(ManageSieveServer.class);
@@ -114,7 +115,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, new DelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter()));
+ pipeline.addLast(FRAMER, createFrameHandler());
pipeline.addLast(CONNECTION_COUNT_HANDLER, getConnectionCountHandler());
pipeline.addLast(CHUNK_WRITE_HANDLER, new ChunkedWriteHandler());
@@ -136,4 +137,9 @@ public class ManageSieveServer extends AbstractConfigurableAsyncServer implement
public String getServiceType() {
return "Manage Sieve Service";
}
+
+ @Override
+ protected ChannelHandler createFrameHandler() {
+ return new DelimiterBasedFrameDecoder(maxLineLength, false, Delimiters.lineDelimiter());
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 62ae9fa..5b14d46 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
@@ -24,9 +24,13 @@ import org.apache.james.protocols.api.ProtocolConfiguration;
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.netty.BasicChannelUpstreamHandler;
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
@@ -100,4 +104,9 @@ public class POP3Server extends AbstractProtocolAsyncServer implements POP3Serve
return JMXHandlersLoader.class;
}
+ @Override
+ protected ChannelHandler createFrameHandler() {
+ return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b61399a6/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 bacc31a..c7d291c 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
@@ -29,12 +29,16 @@ import org.apache.james.protocols.api.ProtocolTransport;
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.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.DelimiterBasedFrameDecoder;
+import org.jboss.netty.handler.codec.frame.Delimiters;
/**
* NIO SMTPServer which use Netty
@@ -359,4 +363,9 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
return JMXHandlersLoader.class;
}
+ @Override
+ protected ChannelHandler createFrameHandler() {
+ return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/12] james-project git commit: JAMES-1862 Upgrade testcontainers
Posted by ad...@apache.org.
JAMES-1862 Upgrade testcontainers
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cc01139f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cc01139f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cc01139f
Branch: refs/heads/master
Commit: cc01139ff9b74f83c5cd331339adf2cd9e96f183
Parents: b4f1ed6
Author: Antoine Duprat <ad...@apache.org>
Authored: Thu Dec 1 12:15:20 2016 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Dec 6 11:31:26 2016 +0100
----------------------------------------------------------------------
.../src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java | 3 ++-
mpt/pom.xml | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/cc01139f/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
index 46214b2..e27c9e0 100644
--- a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
+++ b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
@@ -52,7 +52,7 @@ public class ForwardSmtpTest extends AbstractSimpleScriptedTestProtocol {
public static final String PASSWORD = "secret";
private final TemporaryFolder folder = new TemporaryFolder();
- private final GenericContainer fakeSmtp = new SwarmGenericContainer("weave/rest-smtp-sink:latest")
+ private final GenericContainer<?> fakeSmtp = new SwarmGenericContainer("weave/rest-smtp-sink:latest")
.withAffinityToContainer();
@Rule
@@ -66,6 +66,7 @@ public class ForwardSmtpTest extends AbstractSimpleScriptedTestProtocol {
}
@Before
+ @SuppressWarnings("deprecation")
public void setUp() throws Exception {
super.setUp();
InetAddress containerIp = InetAddresses.forString(fakeSmtp.getContainerInfo().getNetworkSettings().getIpAddress());
http://git-wip-us.apache.org/repos/asf/james-project/blob/cc01139f/mpt/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/pom.xml b/mpt/pom.xml
index 99375bb..a8feadb 100644
--- a/mpt/pom.xml
+++ b/mpt/pom.xml
@@ -472,7 +472,7 @@
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
- <version>1.0.2</version>
+ <version>1.1.7</version>
</dependency>
</dependencies>
</dependencyManagement>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/12] james-project git commit: JAMES-1862 Remove abstract level in
StartTls tests
Posted by ad...@apache.org.
JAMES-1862 Remove abstract level in StartTls tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5ca0f7b0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5ca0f7b0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5ca0f7b0
Branch: refs/heads/master
Commit: 5ca0f7b0366b49a5c7b32d25d8ccb8525bb9582c
Parents: 8633537
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 10:27:35 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:03 2016 +0100
----------------------------------------------------------------------
.../smtp/AbstractStartTlsSMTPServerTest.java | 165 ---------------
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 211 +++++++++++++++----
2 files changed, 172 insertions(+), 204 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5ca0f7b0/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
deleted file mode 100644
index 02f87ec..0000000
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
+++ /dev/null
@@ -1,165 +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.protocols.smtp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Properties;
-
-import javax.mail.Address;
-import javax.mail.Message;
-import javax.mail.Session;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.net.smtp.SMTPReply;
-import org.apache.commons.net.smtp.SMTPSClient;
-import org.apache.james.protocols.api.Encryption;
-import org.apache.james.protocols.api.Protocol;
-import org.apache.james.protocols.api.ProtocolServer;
-import org.apache.james.protocols.api.handler.ProtocolHandler;
-import org.apache.james.protocols.api.handler.WiringException;
-import org.apache.james.protocols.api.utils.BogusSSLSocketFactory;
-import org.apache.james.protocols.api.utils.BogusSslContextFactory;
-import org.apache.james.protocols.api.utils.BogusTrustManagerFactory;
-import org.apache.james.protocols.api.utils.MockLogger;
-import org.apache.james.protocols.api.utils.TestUtils;
-import org.apache.james.protocols.smtp.utils.TestMessageHook;
-import org.junit.Test;
-
-import com.sun.mail.smtp.SMTPTransport;
-
-public abstract class AbstractStartTlsSMTPServerTest {
-
- protected SMTPSClient createClient() {
- SMTPSClient client = new SMTPSClient(false, BogusSslContextFactory.getClientContext());
- client.setTrustManager(BogusTrustManagerFactory.getTrustManagers()[0]);
- return client;
- }
-
- protected abstract ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc);
-
-
- protected Protocol createProtocol(ProtocolHandler... handlers) throws WiringException {
- SMTPProtocolHandlerChain chain = new SMTPProtocolHandlerChain();
- chain.addAll(0, Arrays.asList(handlers));
- chain.wireExtensibleHandlers();
- return new SMTPProtocol(chain, new SMTPConfigurationImpl(), new MockLogger());
- }
-
-
- @Test
- public void testStartTLS() throws Exception {
- InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
-
-
- ProtocolServer server = null;
- try {
- server = createServer(createProtocol(new ProtocolHandler[0]), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
- server.bind();
-
- SMTPSClient client = createClient();
- client.connect(address.getAddress().getHostAddress(), address.getPort());
- assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
-
- client.sendCommand("EHLO localhost");
- assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
-
- boolean startTLSAnnounced = false;
- for (String reply: client.getReplyStrings()) {
- if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
- startTLSAnnounced = true;
- break;
- }
- }
- assertTrue(startTLSAnnounced);
-
- assertTrue(client.execTLS());
-
- client.quit();
- assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
-
- client.disconnect();
-
-
- } finally {
- if (server != null) {
- server.unbind();
- }
- }
-
- }
-
- @Test
- public void testStartTLSWithJavamail() throws Exception {
- InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
-
-
- ProtocolServer server = null;
- try {
- TestMessageHook hook = new TestMessageHook();
- server = createServer(createProtocol(hook) , address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
- server.bind();
-
-
- Properties mailProps = new Properties();
- mailProps.put("mail.smtp.from", "test@localhost");
- mailProps.put("mail.smtp.host", address.getHostName());
- mailProps.put("mail.smtp.port", address.getPort());
- mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName());
- mailProps.put("mail.smtp.socketFactory.fallback", "false");
- mailProps.put("mail.smtp.starttls.enable", "true");
-
- Session mailSession = Session.getDefaultInstance(mailProps);
-
- MimeMessage message = new MimeMessage(mailSession);
- message.setFrom(new InternetAddress("test@localhost"));
- String[] emails = { "valid@localhost" };
- Address rcpts[] = new Address[emails.length];
- for (int i = 0; i < emails.length; i++) {
- rcpts[i] = new InternetAddress(emails[i].trim().toLowerCase());
- }
- message.setRecipients(Message.RecipientType.TO, rcpts);
- message.setSubject("Testmail", "UTF-8");
- message.setText("Test.....");
-
- SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtps");
-
- transport.connect(new Socket(address.getHostName(), address.getPort()));
- transport.sendMessage(message, rcpts);
-
-
- assertEquals(1, hook.getQueued().size());
-
-
-
- } finally {
- if (server != null) {
- server.unbind();
- }
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5ca0f7b0/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 d643611..41f3b9c 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
@@ -1,39 +1,172 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-package org.apache.james.protocols.smtp.netty;
-
-import java.net.InetSocketAddress;
-
-import org.apache.james.protocols.api.Encryption;
-import org.apache.james.protocols.api.Protocol;
-import org.apache.james.protocols.api.ProtocolServer;
-import org.apache.james.protocols.netty.NettyServer;
-import org.apache.james.protocols.smtp.AbstractStartTlsSMTPServerTest;
-
-public class NettyStartTlsSMTPServerTest extends AbstractStartTlsSMTPServerTest{
-
- @Override
- protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
- NettyServer server = new NettyServer(protocol, enc);
- server.setListenAddresses(address);
-
- return server;
- }
-
-}
+/****************************************************************
+ * 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.netty;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.Properties;
+
+import javax.mail.Address;
+import javax.mail.Message;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.commons.net.smtp.SMTPReply;
+import org.apache.commons.net.smtp.SMTPSClient;
+import org.apache.james.protocols.api.Encryption;
+import org.apache.james.protocols.api.Protocol;
+import org.apache.james.protocols.api.ProtocolServer;
+import org.apache.james.protocols.api.handler.ProtocolHandler;
+import org.apache.james.protocols.api.handler.WiringException;
+import org.apache.james.protocols.api.utils.BogusSSLSocketFactory;
+import org.apache.james.protocols.api.utils.BogusSslContextFactory;
+import org.apache.james.protocols.api.utils.BogusTrustManagerFactory;
+import org.apache.james.protocols.api.utils.MockLogger;
+import org.apache.james.protocols.api.utils.TestUtils;
+import org.apache.james.protocols.netty.NettyServer;
+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.junit.Test;
+
+import com.sun.mail.smtp.SMTPTransport;
+
+public class NettyStartTlsSMTPServerTest {
+
+ private ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
+ NettyServer server = new NettyServer(protocol, enc);
+ server.setListenAddresses(address);
+
+ return server;
+ }
+
+ private SMTPSClient createClient() {
+ SMTPSClient client = new SMTPSClient(false, BogusSslContextFactory.getClientContext());
+ client.setTrustManager(BogusTrustManagerFactory.getTrustManagers()[0]);
+ return client;
+ }
+
+ private Protocol createProtocol(ProtocolHandler... handlers) throws WiringException {
+ SMTPProtocolHandlerChain chain = new SMTPProtocolHandlerChain();
+ chain.addAll(0, Arrays.asList(handlers));
+ chain.wireExtensibleHandlers();
+ return new SMTPProtocol(chain, new SMTPConfigurationImpl(), new MockLogger());
+ }
+
+ @Test
+ public void testStartTLS() throws Exception {
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+
+
+ ProtocolServer server = null;
+ try {
+ server = createServer(createProtocol(new ProtocolHandler[0]), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+ client.sendCommand("EHLO localhost");
+ assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+ boolean startTLSAnnounced = false;
+ for (String reply: client.getReplyStrings()) {
+ if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
+ startTLSAnnounced = true;
+ break;
+ }
+ }
+ assertTrue(startTLSAnnounced);
+
+ assertTrue(client.execTLS());
+
+ client.quit();
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+ client.disconnect();
+
+
+ } finally {
+ if (server != null) {
+ server.unbind();
+ }
+ }
+
+ }
+
+ @Test
+ public void testStartTLSWithJavamail() throws Exception {
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+
+
+ ProtocolServer server = null;
+ try {
+ TestMessageHook hook = new TestMessageHook();
+ server = createServer(createProtocol(hook) , address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+
+ Properties mailProps = new Properties();
+ mailProps.put("mail.smtp.from", "test@localhost");
+ mailProps.put("mail.smtp.host", address.getHostName());
+ mailProps.put("mail.smtp.port", address.getPort());
+ mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName());
+ mailProps.put("mail.smtp.socketFactory.fallback", "false");
+ mailProps.put("mail.smtp.starttls.enable", "true");
+
+ Session mailSession = Session.getDefaultInstance(mailProps);
+
+ MimeMessage message = new MimeMessage(mailSession);
+ message.setFrom(new InternetAddress("test@localhost"));
+ String[] emails = { "valid@localhost" };
+ Address rcpts[] = new Address[emails.length];
+ for (int i = 0; i < emails.length; i++) {
+ rcpts[i] = new InternetAddress(emails[i].trim().toLowerCase());
+ }
+ message.setRecipients(Message.RecipientType.TO, rcpts);
+ message.setSubject("Testmail", "UTF-8");
+ message.setText("Test.....");
+
+ SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtps");
+
+ transport.connect(new Socket(address.getHostName(), address.getPort()));
+ transport.sendMessage(message, rcpts);
+
+
+ assertEquals(1, hook.getQueued().size());
+
+
+
+ } finally {
+ if (server != null) {
+ server.unbind();
+ }
+ }
+
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/12] james-project git commit: Merge remote-tracking branch
'mine/JAMES-1862-2'
Posted by ad...@apache.org.
Merge remote-tracking branch 'mine/JAMES-1862-2'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a816b126
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a816b126
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a816b126
Branch: refs/heads/master
Commit: a816b1269a2bcd8896dafeffef9169825bebd89b
Parents: b38510b e0315c4
Author: Antoine Duprat <ad...@apache.org>
Authored: Tue Dec 6 13:25:00 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Tue Dec 6 13:25:00 2016 +0100
----------------------------------------------------------------------
.../apache/james/mpt/smtp/SmtpTestModule.java | 2 +-
.../apache/james/mpt/smtp/StarttlsSmtpTest.java | 33 ++
.../james/mpt/smtp/StarttlsSmtpTestModule.java | 32 ++
.../smtp/host/CassandraJamesSmtpHostSystem.java | 4 +-
.../cassandra/src/test/resources/smtpserver.xml | 4 +-
.../apache/james/mpt/smtp/ForwardSmtpTest.java | 3 +-
.../james/mpt/smtp/SmtpStarttlsCommandTest.java | 65 +++
.../org/apache/james/smtp/scripts/starttls.test | 11 +
.../smtp/scripts/starttls_with_injection.test | 11 +
mpt/pom.xml | 2 +-
.../lmtp/netty/NettyLMTPSServerTest.java | 5 +-
.../lmtp/netty/NettyLMTPServerTest.java | 4 +-
protocols/netty/pom.xml | 14 +
.../netty/AbstractChannelPipelineFactory.java | 14 +-
.../AbstractSSLAwareChannelPipelineFactory.java | 11 +-
.../netty/BasicChannelUpstreamHandler.java | 6 +-
.../james/protocols/netty/NettyServer.java | 64 ++-
.../james/protocols/netty/NettyServerTest.java | 71 +++
.../pop3/netty/NettyPOP3SServerTest.java | 5 +-
.../pop3/netty/NettyPOP3ServerTest.java | 4 +-
.../pop3/netty/NettyStartTlsPOP3ServerTest.java | 5 +-
protocols/smtp/pom.xml | 33 +-
.../AllButStartTlsDelimiterChannelHandler.java | 53 ++
.../smtp/CommandInjectionDetectedException.java | 23 +
.../smtp/AbstractStartTlsSMTPServerTest.java | 168 -------
.../smtp/netty/NettySMTPSServerTest.java | 5 +-
.../smtp/netty/NettySMTPServerTest.java | 4 +-
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 262 ++++++++--
.../mailets/jsieve/FileIntoAction.java | 2 -
.../james/transport/mailets/jsieve/Poster.java | 1 -
.../james/imapserver/netty/IMAPServer.java | 8 +-
.../imapserver/netty/IMAPServerFactory.java | 1 -
.../james/imapserver/netty/OioIMAPServer.java | 1 -
.../netty/AbstractConfigurableAsyncServer.java | 12 +-
...ractExecutorAwareChannelPipelineFactory.java | 9 +-
.../james/lmtpserver/netty/LMTPServer.java | 9 +
.../netty/ManageSieveServer.java | 16 +-
.../james/pop3server/netty/POP3Server.java | 9 +
server/protocols/protocols-smtp/pom.xml | 6 +
.../james/smtpserver/netty/SMTPServer.java | 9 +
.../apache/james/smtpserver/SMTPServerTest.java | 504 ++++++++++++++-----
.../james/queue/jms/JMSMailQueueFactory.java | 3 +-
42 files changed, 1108 insertions(+), 400 deletions(-)
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/12] james-project git commit: JAMES-1862 Use assertj in StartTls
tests
Posted by ad...@apache.org.
JAMES-1862 Use assertj in StartTls tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/eece4acb
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/eece4acb
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/eece4acb
Branch: refs/heads/master
Commit: eece4acb83ee3a48f3844f321aefd8686c5b611a
Parents: 5ca0f7b
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 10:33:00 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:03 2016 +0100
----------------------------------------------------------------------
protocols/smtp/pom.xml | 27 ++++++++++++--------
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 24 +++++++----------
2 files changed, 25 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/eece4acb/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index c028f35..7adc77b 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -39,17 +39,6 @@
<artifactId>protocols-api</artifactId>
</dependency>
<dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.apache.james.protocols</groupId>
<artifactId>protocols-api</artifactId>
<scope>test</scope>
@@ -61,6 +50,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>commons-net</groupId>
+ <artifactId>commons-net</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
@@ -70,6 +69,12 @@
<artifactId>mail</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <version>${assertj-1.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/eece4acb/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 41f3b9c..c9dda94 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
@@ -18,8 +18,7 @@
****************************************************************/
package org.apache.james.protocols.smtp.netty;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
import java.net.InetSocketAddress;
import java.net.Socket;
@@ -88,10 +87,10 @@ public class NettyStartTlsSMTPServerTest {
SMTPSClient client = createClient();
client.connect(address.getAddress().getHostAddress(), address.getPort());
- assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
client.sendCommand("EHLO localhost");
- assertTrue(SMTPReply.isPositiveCompletion(client.getReplyCode()));
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
boolean startTLSAnnounced = false;
for (String reply: client.getReplyStrings()) {
@@ -100,16 +99,15 @@ public class NettyStartTlsSMTPServerTest {
break;
}
}
- assertTrue(startTLSAnnounced);
-
- assertTrue(client.execTLS());
+ assertThat(startTLSAnnounced).isTrue();
+ assertThat(client.execTLS()).isTrue();
client.quit();
- assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode()))
+ .as("Reply="+ client.getReplyString())
+ .isTrue();
client.disconnect();
-
-
} finally {
if (server != null) {
server.unbind();
@@ -156,11 +154,7 @@ public class NettyStartTlsSMTPServerTest {
transport.connect(new Socket(address.getHostName(), address.getPort()));
transport.sendMessage(message, rcpts);
-
- assertEquals(1, hook.getQueued().size());
-
-
-
+ assertThat(hook.getQueued()).hasSize(1);
} finally {
if (server != null) {
server.unbind();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/12] james-project git commit: JAMES-1862 Add port in
SmtpHostSystem
Posted by ad...@apache.org.
JAMES-1862 Add port in SmtpHostSystem
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dedad3f4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dedad3f4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dedad3f4
Branch: refs/heads/master
Commit: dedad3f471a6c18a50228a4a5f44be8f94f7a502
Parents: cc01139
Author: Antoine Duprat <ad...@apache.org>
Authored: Thu Dec 1 12:44:14 2016 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Dec 6 11:31:26 2016 +0100
----------------------------------------------------------------------
.../src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java | 2 +-
.../apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dedad3f4/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
index 7e1d3fd..923c854 100644
--- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
+++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/SmtpTestModule.java
@@ -26,7 +26,7 @@ public class SmtpTestModule extends AbstractModule {
@Override
protected void configure() {
- bind(SmtpHostSystem.class).to(CassandraJamesSmtpHostSystem.class);
+ bind(SmtpHostSystem.class).toInstance(new CassandraJamesSmtpHostSystem(1025));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/dedad3f4/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
index bc8f678..f90bca9 100644
--- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
+++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/host/CassandraJamesSmtpHostSystem.java
@@ -46,8 +46,8 @@ public class CassandraJamesSmtpHostSystem extends ExternalSessionFactory impleme
private InMemoryDNSService inMemoryDNSService;
- public CassandraJamesSmtpHostSystem() {
- super("localhost", 1025, new SystemLoggingMonitor(), "220 mydomain.tld smtp");
+ public CassandraJamesSmtpHostSystem(int smtpPort) {
+ super("localhost", smtpPort, new SystemLoggingMonitor(), "220 mydomain.tld smtp");
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/12] james-project git commit: JAMES-1862 Add starttls SMTP
command integration tests
Posted by ad...@apache.org.
JAMES-1862 Add starttls SMTP command integration tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e0315c4f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e0315c4f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e0315c4f
Branch: refs/heads/master
Commit: e0315c4f6491e9e5730b4359ef8445bf8f0681d0
Parents: dedad3f
Author: Antoine Duprat <ad...@apache.org>
Authored: Thu Dec 1 13:34:36 2016 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Dec 6 11:31:26 2016 +0100
----------------------------------------------------------------------
.../apache/james/mpt/smtp/StarttlsSmtpTest.java | 33 ++++++++++
.../james/mpt/smtp/StarttlsSmtpTestModule.java | 32 ++++++++++
.../cassandra/src/test/resources/smtpserver.xml | 4 +-
.../james/mpt/smtp/SmtpStarttlsCommandTest.java | 65 ++++++++++++++++++++
.../org/apache/james/smtp/scripts/starttls.test | 11 ++++
.../smtp/scripts/starttls_with_injection.test | 11 ++++
6 files changed, 154 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTest.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTest.java
new file mode 100644
index 0000000..376579f
--- /dev/null
+++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTest.java
@@ -0,0 +1,33 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mpt.smtp;
+
+import org.apache.james.mpt.onami.test.OnamiSuite;
+import org.apache.james.mpt.onami.test.annotation.GuiceModules;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(OnamiSuite.class)
+@Suite.SuiteClasses({
+ SmtpStarttlsCommandTest.class
+})
+@GuiceModules({ StarttlsSmtpTestModule.class })
+public class StarttlsSmtpTest {
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTestModule.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTestModule.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTestModule.java
new file mode 100644
index 0000000..88b44d5
--- /dev/null
+++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/StarttlsSmtpTestModule.java
@@ -0,0 +1,32 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mpt.smtp;
+
+import org.apache.james.mpt.smtp.host.CassandraJamesSmtpHostSystem;
+
+import com.google.inject.AbstractModule;
+
+public class StarttlsSmtpTestModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(SmtpHostSystem.class).toInstance(new CassandraJamesSmtpHostSystem(1587));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml b/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
index 0eaeb3d..c2b31b5 100644
--- a/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
+++ b/mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
@@ -77,8 +77,8 @@
<jmxName>smtpserver-authenticated</jmxName>
<bind>0.0.0.0:1587</bind>
<connectionBacklog>200</connectionBacklog>
- <tls socketTLS="false" startTLS="false">
- <keystore>file://conf/keystore</keystore>
+ <tls socketTLS="false" startTLS="true">
+ <keystore>keystore</keystore>
<secret>james72laBalle</secret>
<provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
<algorithm>SunX509</algorithm>
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java
new file mode 100644
index 0000000..2dd7246
--- /dev/null
+++ b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java
@@ -0,0 +1,65 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mpt.smtp;
+
+import java.util.Locale;
+
+import javax.inject.Inject;
+
+import org.apache.james.mpt.script.AbstractSimpleScriptedTestProtocol;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+
+public class SmtpStarttlsCommandTest extends AbstractSimpleScriptedTestProtocol {
+
+ public static final String USER = "bob";
+ public static final String DOMAIN = "mydomain.tld";
+ public static final String USER_AT_DOMAIN = USER + "@" + DOMAIN;
+ public static final String PASSWORD = "secret";
+
+ private final TemporaryFolder folder = new TemporaryFolder();
+
+ @Rule
+ public final RuleChain chain = RuleChain.outerRule(folder);
+
+ @Inject
+ private static SmtpHostSystem hostSystem;
+
+ public SmtpStarttlsCommandTest() throws Exception {
+ super(hostSystem, USER_AT_DOMAIN, PASSWORD, "/org/apache/james/smtp/scripts/");
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Test
+ public void starttlsShouldWork() throws Exception {
+ scriptTest("starttls", Locale.US);
+ }
+
+ @Test
+ public void starttlsShouldBeRejectedWhenFollowedByCommand() throws Exception {
+ scriptTest("starttls_with_injection", Locale.US);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test b/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
new file mode 100644
index 0000000..abcb5c9
--- /dev/null
+++ b/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
@@ -0,0 +1,11 @@
+S: 220 mydomain.tld smtp
+
+C: ehlo yopmail.com
+S: 250.*
+S: 250-PIPELINING
+S: 250-ENHANCEDSTATUSCODES
+S: 250-8BITMIME
+S: 250 STARTTLS
+
+C: starttls
+S: 220 2.0.0 Ready to start TLS
http://git-wip-us.apache.org/repos/asf/james-project/blob/e0315c4f/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test b/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
new file mode 100644
index 0000000..5c09717
--- /dev/null
+++ b/mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
@@ -0,0 +1,11 @@
+S: 220 mydomain.tld smtp
+
+C: ehlo yopmail.com
+S: 250.*
+S: 250-PIPELINING
+S: 250-ENHANCEDSTATUSCODES
+S: 250-8BITMIME
+S: 250 STARTTLS
+
+C: starttls\r\nmail from:<ma...@yopmail.com>\r\n
+S: 451 Unable to process request
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/12] james-project git commit: JAMES-1862 Refactor
NettyStartTlsSMTPServerTest
Posted by ad...@apache.org.
JAMES-1862 Refactor NettyStartTlsSMTPServerTest
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/99521482
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/99521482
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/99521482
Branch: refs/heads/master
Commit: 99521482330c8a33b3c51f963a450ebec5fd5d0b
Parents: eece4ac
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 10:56:22 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:03 2016 +0100
----------------------------------------------------------------------
protocols/smtp/pom.xml | 4 +
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 191 +++++++++++--------
2 files changed, 112 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/99521482/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index 7adc77b..aaf2b49 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -50,6 +50,10 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<optional>true</optional>
http://git-wip-us.apache.org/repos/asf/james-project/blob/99521482/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 c9dda94..5a8058c 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
@@ -22,11 +22,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.net.InetSocketAddress;
import java.net.Socket;
-import java.util.Arrays;
import java.util.Locale;
import java.util.Properties;
-import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
@@ -49,16 +47,26 @@ 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.junit.After;
import org.junit.Test;
+import com.google.common.base.Optional;
import com.sun.mail.smtp.SMTPTransport;
public class NettyStartTlsSMTPServerTest {
+ private ProtocolServer server;
+
+ @After
+ public void tearDown() {
+ if (server != null) {
+ server.unbind();
+ }
+ }
+
private ProtocolServer createServer(Protocol protocol, InetSocketAddress address, Encryption enc) {
NettyServer server = new NettyServer(protocol, enc);
server.setListenAddresses(address);
-
return server;
}
@@ -68,99 +76,116 @@ public class NettyStartTlsSMTPServerTest {
return client;
}
- private Protocol createProtocol(ProtocolHandler... handlers) throws WiringException {
+ private Protocol createProtocol(Optional<ProtocolHandler> handler) throws WiringException {
SMTPProtocolHandlerChain chain = new SMTPProtocolHandlerChain();
- chain.addAll(0, Arrays.asList(handlers));
+ if (handler.isPresent()) {
+ chain.add(handler.get());
+ }
chain.wireExtensibleHandlers();
return new SMTPProtocol(chain, new SMTPConfigurationImpl(), new MockLogger());
}
@Test
- public void testStartTLS() throws Exception {
+ public void connectShouldReturnTrueWhenConnecting() throws Exception {
InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
-
-
- ProtocolServer server = null;
- try {
- server = createServer(createProtocol(new ProtocolHandler[0]), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
- server.bind();
-
- SMTPSClient client = createClient();
- client.connect(address.getAddress().getHostAddress(), address.getPort());
- assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
-
- client.sendCommand("EHLO localhost");
- assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
-
- boolean startTLSAnnounced = false;
- for (String reply: client.getReplyStrings()) {
- if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
- startTLSAnnounced = true;
- break;
- }
- }
- assertThat(startTLSAnnounced).isTrue();
- assertThat(client.execTLS()).isTrue();
-
- client.quit();
- assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode()))
- .as("Reply="+ client.getReplyString())
- .isTrue();
-
- client.disconnect();
- } finally {
- if (server != null) {
- server.unbind();
- }
- }
-
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
+
+ client.quit();
+ client.disconnect();
}
-
+
@Test
- public void testStartTLSWithJavamail() throws Exception {
+ public void ehloShouldReturnTrueWhenSendingTheCommand() throws Exception {
InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+
+ client.sendCommand("EHLO localhost");
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue();
-
- ProtocolServer server = null;
- try {
- TestMessageHook hook = new TestMessageHook();
- server = createServer(createProtocol(hook) , address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
- server.bind();
-
-
- Properties mailProps = new Properties();
- mailProps.put("mail.smtp.from", "test@localhost");
- mailProps.put("mail.smtp.host", address.getHostName());
- mailProps.put("mail.smtp.port", address.getPort());
- mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName());
- mailProps.put("mail.smtp.socketFactory.fallback", "false");
- mailProps.put("mail.smtp.starttls.enable", "true");
-
- Session mailSession = Session.getDefaultInstance(mailProps);
-
- MimeMessage message = new MimeMessage(mailSession);
- message.setFrom(new InternetAddress("test@localhost"));
- String[] emails = { "valid@localhost" };
- Address rcpts[] = new Address[emails.length];
- for (int i = 0; i < emails.length; i++) {
- rcpts[i] = new InternetAddress(emails[i].trim().toLowerCase());
- }
- message.setRecipients(Message.RecipientType.TO, rcpts);
- message.setSubject("Testmail", "UTF-8");
- message.setText("Test.....");
-
- SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtps");
-
- transport.connect(new Socket(address.getHostName(), address.getPort()));
- transport.sendMessage(message, rcpts);
-
- assertThat(hook.getQueued()).hasSize(1);
- } finally {
- if (server != null) {
- server.unbind();
+ client.quit();
+ client.disconnect();
+ }
+
+ @Test
+ public void startTlsShouldBeAnnouncedWhenServerSupportsIt() throws Exception {
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ client.sendCommand("EHLO localhost");
+
+ assertThat(isStartTLSAnnounced(client)).isTrue();
+
+ client.quit();
+ client.disconnect();
+ }
+
+ private boolean isStartTLSAnnounced(SMTPSClient client) {
+ for (String reply: client.getReplyStrings()) {
+ if (reply.toUpperCase(Locale.UK).endsWith("STARTTLS")) {
+ return true;
}
}
-
+ return false;
+ }
+
+ @Test
+ public void startTlsShouldReturnTrueWhenServerSupportsIt() throws Exception {
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ client.sendCommand("EHLO localhost");
+
+ boolean execTLS = client.execTLS();
+ assertThat(execTLS).isTrue();
+
+ client.quit();
+ client.disconnect();
}
+ @Test
+ public void startTlsShouldWorkWhenUsingJavamail() throws Exception {
+ TestMessageHook hook = new TestMessageHook();
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> of(hook)) , address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ Properties mailProps = new Properties();
+ mailProps.put("mail.smtp.from", "test@localhost");
+ mailProps.put("mail.smtp.host", address.getHostName());
+ mailProps.put("mail.smtp.port", address.getPort());
+ mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName());
+ mailProps.put("mail.smtp.socketFactory.fallback", "false");
+ mailProps.put("mail.smtp.starttls.enable", "true");
+
+ Session mailSession = Session.getDefaultInstance(mailProps);
+
+ InternetAddress[] rcpts = new InternetAddress[] { new InternetAddress("valid@localhost") };
+ MimeMessage message = new MimeMessage(mailSession);
+ message.setFrom(new InternetAddress("test@localhost"));
+ message.setRecipients(Message.RecipientType.TO, rcpts);
+ message.setSubject("Testmail", "UTF-8");
+ message.setText("Test.....");
+
+ SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtps");
+
+ transport.connect(new Socket(address.getHostName(), address.getPort()));
+ transport.sendMessage(message, rcpts);
+
+ assertThat(hook.getQueued()).hasSize(1);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/12] james-project git commit: JAMES-1862 Use assertj in
SMTPServer tests
Posted by ad...@apache.org.
JAMES-1862 Use assertj in SMTPServer tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/50cf7b48
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/50cf7b48
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/50cf7b48
Branch: refs/heads/master
Commit: 50cf7b48d010b09a64437193abdd23f8b931d804
Parents: 9952148
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 16:01:37 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:03 2016 +0100
----------------------------------------------------------------------
server/protocols/protocols-smtp/pom.xml | 6 +
.../apache/james/smtpserver/SMTPServerTest.java | 464 ++++++++++++++-----
2 files changed, 345 insertions(+), 125 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/50cf7b48/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index a4e4a3c..a466eea 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -216,6 +216,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <version>${assertj-1.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/50cf7b48/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 780e919..578b824 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -18,11 +18,7 @@
****************************************************************/
package org.apache.james.smtpserver;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -344,10 +340,14 @@ public class SMTPServerTest {
}
smtpProtocol.sendCommand("EHLO " + sb.toString());
System.out.println(smtpProtocol.getReplyString());
- assertEquals("Line length exceed", 500, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("Line length exceed")
+ .isEqualTo(500);
smtpProtocol.sendCommand("EHLO test");
- assertEquals("Line length ok", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("Line length ok")
+ .isEqualTo(250);
smtpProtocol.quit();
smtpProtocol.disconnect();
@@ -390,25 +390,33 @@ public class SMTPServerTest {
public void verifyLastMail(String sender, String recipient, MimeMessage msg) throws IOException, MessagingException {
Mail mailData = queue.getLastMail();
- assertNotNull("mail received by mail server", mailData);
+ assertThat(mailData)
+ .as("mail received by mail server")
+ .isNotNull();
if (sender == null && recipient == null && msg == null) {
fail("no verification can be done with all arguments null");
}
if (sender != null) {
- assertEquals("sender verfication", sender, mailData.getSender().toString());
+ assertThat(mailData.getSender().toString())
+ .as("sender verfication")
+ .isEqualTo(sender);
}
if (recipient != null) {
- assertTrue("recipient verfication", mailData.getRecipients().contains(new MailAddress(recipient)));
+ assertThat(mailData.getRecipients())
+ .as("recipient verfication")
+ .containsOnly(new MailAddress(recipient));
}
if (msg != null) {
ByteArrayOutputStream bo1 = new ByteArrayOutputStream();
msg.writeTo(bo1);
ByteArrayOutputStream bo2 = new ByteArrayOutputStream();
mailData.getMessage().writeTo(bo2);
- assertEquals(bo1.toString(), bo2.toString());
- assertEquals("message verification", msg, mailData.getMessage());
+ assertThat(bo2.toString()).isEqualTo(bo1.toString());
+ assertThat(mailData.getMessage())
+ .as("message verification")
+ .isEqualTo(msg);
}
}
@@ -420,7 +428,9 @@ public class SMTPServerTest {
smtpProtocol.connect("127.0.0.1", smtpListenerPort);
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
smtpProtocol.sendCommand("EHLO " + InetAddress.getLocalHost());
String[] capabilityRes = smtpProtocol.getReplyStrings();
@@ -430,10 +440,18 @@ public class SMTPServerTest {
capabilitieslist.add(capabilityRes[i].substring(4));
}
- assertEquals("capabilities", 3, capabilitieslist.size());
- assertTrue("capabilities present PIPELINING", capabilitieslist.contains("PIPELINING"));
- assertTrue("capabilities present ENHANCEDSTATUSCODES", capabilitieslist.contains("ENHANCEDSTATUSCODES"));
- assertTrue("capabilities present 8BITMIME", capabilitieslist.contains("8BITMIME"));
+ assertThat(capabilitieslist)
+ .as("capabilities")
+ .hasSize(3);
+ assertThat(capabilitieslist.contains("PIPELINING"))
+ .as("capabilities present PIPELINING")
+ .isTrue();
+ assertThat(capabilitieslist.contains("ENHANCEDSTATUSCODES"))
+ .as("capabilities present ENHANCEDSTATUSCODES")
+ .isTrue();
+ assertThat(capabilitieslist.contains("8BITMIME"))
+ .as("capabilities present 8BITMIME")
+ .isTrue();
smtpProtocol.setSender("mail@localhost");
smtpProtocol.addRecipient("mail@localhost");
@@ -443,7 +461,9 @@ public class SMTPServerTest {
smtpProtocol.disconnect();
// mail was propagated by SMTPServer
- assertNotNull("mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("mail received by mail server")
+ .isNotNull();
}
@Test
@@ -455,7 +475,9 @@ public class SMTPServerTest {
smtpProtocol.connect("127.0.0.1", smtpListenerPort);
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
smtpProtocol.sendCommand("EHLO " + InetAddress.getLocalHost());
String[] capabilityRes = smtpProtocol.getReplyStrings();
@@ -465,11 +487,12 @@ public class SMTPServerTest {
capabilitieslist.add(capabilityRes[i].substring(4));
}
- assertEquals("capabilities", 4, capabilitieslist.size());
- assertTrue("capabilities present PIPELINING", capabilitieslist.contains("PIPELINING"));
- assertTrue("capabilities present ENHANCEDSTATUSCODES", capabilitieslist.contains("ENHANCEDSTATUSCODES"));
- assertTrue("capabilities present 8BITMIME", capabilitieslist.contains("8BITMIME"));
- assertTrue("capabilities present STARTTLS", capabilitieslist.contains("STARTTLS"));
+ assertThat(capabilitieslist)
+ .as("capabilities")
+ .hasSize(4);
+ assertThat(capabilitieslist)
+ .as("capabilities present PIPELINING ENHANCEDSTATUSCODES 8BITMIME STARTTLS")
+ .containsOnly("PIPELINING", "ENHANCEDSTATUSCODES", "8BITMIME", "STARTTLS");
smtpProtocol.quit();
smtpProtocol.disconnect();
@@ -503,7 +526,9 @@ public class SMTPServerTest {
SMTPClient smtp = newSMTPClient();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
smtp.helo(InetAddress.getLocalHost().toString());
smtp.setSender("mail@localhost");
@@ -513,8 +538,9 @@ public class SMTPServerTest {
smtp.quit();
smtp.disconnect();
- assertNotNull("spooled mail has Received header",
- queue.getLastMail().getMessage().getHeader("Received"));
+ assertThat(queue.getLastMail().getMessage().getHeader("Received"))
+ .as("spooled mail has Received header")
+ .isNotNull();
}
// FIXME
@@ -526,7 +552,9 @@ public class SMTPServerTest {
SMTPClient smtp = newSMTPClient();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
smtp.helo(InetAddress.getLocalHost().toString());
smtp.setSender("mail@localhost");
@@ -536,8 +564,9 @@ public class SMTPServerTest {
smtp.quit();
smtp.disconnect();
- assertNotNull("spooled mail has Received header",
- queue.getLastMail().getMessage().getHeader("Received"));
+ assertThat(queue.getLastMail().getMessage().getHeader("Received"))
+ .as("spooled mail has Received header")
+ .isNotNull();
// TODO: test body size
}
@@ -549,7 +578,9 @@ public class SMTPServerTest {
smtpProtocol.connect("127.0.0.1", smtpListenerPort);
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol.helo(InetAddress.getLocalHost().toString());
@@ -563,7 +594,9 @@ public class SMTPServerTest {
smtpProtocol.disconnect();
// mail was propagated by SMTPServer
- assertNotNull("mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("mail received by mail server")
+ .isNotNull();
}
@Test
@@ -575,11 +608,17 @@ public class SMTPServerTest {
SMTPClient smtpProtocol2 = new SMTPClient();
smtpProtocol2.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
- assertTrue("second connection taken", smtpProtocol2.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
+ assertThat(smtpProtocol2.isConnected())
+ .as("second connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
smtpProtocol2.helo(InetAddress.getLocalHost().toString());
@@ -614,10 +653,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
@@ -654,10 +697,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol = new SMTPClient();
smtpProtocol.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol.isConnected());
+ assertThat(smtpProtocol.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
String fictionalDomain = "abgsfe3rsf.de";
String existingDomain = "james.apache.org";
@@ -669,7 +716,9 @@ public class SMTPServerTest {
smtpProtocol.addRecipient(rcpt);
// this should give a 501 code cause the helo/ehlo could not resolved
- assertEquals("expected error: " + heloCommand + " could not resolved", 501, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error: " + heloCommand + " could not resolved")
+ .isEqualTo(501);
smtpProtocol.sendCommand(heloCommand, existingDomain);
smtpProtocol.setSender(mail);
@@ -679,7 +728,9 @@ public class SMTPServerTest {
fail(existingDomain + " domain currently cannot be resolved (check your DNS/internet connection/proxy settings to make test pass)");
}
// helo/ehlo is resolvable. so this should give a 250 code
- assertEquals(heloCommand + " accepted", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as(heloCommand + " accepted")
+ .isEqualTo(250);
smtpProtocol.quit();
}
@@ -693,7 +744,9 @@ public class SMTPServerTest {
smtpProtocol1.helo("abgsfe3rsf.de");
// helo should not be checked. so this should give a 250 code
- assertEquals("Helo accepted", 250, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("Helo accepted")
+ .isEqualTo(250);
smtpProtocol1.quit();
}
@@ -714,10 +767,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
String helo1 = "abgsfe3rsf.de";
String helo2 = "james.apache.org";
@@ -730,14 +787,18 @@ public class SMTPServerTest {
// this should give a 501 code cause the helo not equal reverse of
// ip
- assertEquals("expected error: helo not equals reverse of ip", 501, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected error: helo not equals reverse of ip")
+ .isEqualTo(501);
smtpProtocol1.sendCommand("helo", helo2);
smtpProtocol1.setSender(mail);
smtpProtocol1.addRecipient(rcpt);
// helo is resolvable. so this should give a 250 code
- assertEquals("Helo accepted", 250, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("Helo accepted")
+ .isEqualTo(250);
smtpProtocol1.quit();
} finally {
@@ -754,20 +815,28 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
String sender1 = "mail_sender1@xfwrqqfgfe.de";
smtpProtocol1.setSender(sender1);
- assertEquals("expected 501 error", 501, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected 501 error")
+ .isEqualTo(501);
smtpProtocol1.addRecipient("test@localhost");
- assertEquals("Recipient not accepted cause no valid sender", 503, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("Recipient not accepted cause no valid sender")
+ .isEqualTo(503);
smtpProtocol1.quit();
}
@@ -796,10 +865,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
@@ -821,10 +894,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
@@ -832,7 +909,9 @@ public class SMTPServerTest {
String sender2 = "mail_sender2@james.apache.org";
smtpProtocol1.setSender(sender1);
- assertEquals("expected 501 error", 501, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected 501 error")
+ .isEqualTo(501);
smtpProtocol1.setSender(sender2);
@@ -848,10 +927,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
@@ -863,7 +946,9 @@ public class SMTPServerTest {
smtpProtocol1.addRecipient(rcpt1);
smtpProtocol1.addRecipient(rcpt2);
- assertEquals("expected 452 error", 452, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected 452 error")
+ .isEqualTo(452);
smtpProtocol1.sendShortMessageData("Subject: test\r\n\r\nTest body testMaxRcpt1\r\n");
@@ -919,7 +1004,9 @@ public class SMTPServerTest {
smtpProtocol1.sendCommand("ehlo", "abgsfe3rsf.de");
// ehlo should not be checked. so this should give a 250 code
- assertEquals("ehlo accepted", 250, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("ehlo accepted")
+ .isEqualTo(250);
smtpProtocol1.quit();
}
@@ -951,10 +1038,13 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
-
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
String ehlo1 = "abgsfe3rsf.de";
String ehlo2 = "james.apache.org";
@@ -967,14 +1057,18 @@ public class SMTPServerTest {
// this should give a 501 code cause the ehlo not equals reverse of
// ip
- assertEquals("expected error: ehlo not equals reverse of ip", 501, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected error: ehlo not equals reverse of ip")
+ .isEqualTo(501);
smtpProtocol1.sendCommand("ehlo", ehlo2);
smtpProtocol1.setSender(mail);
smtpProtocol1.addRecipient(rcpt);
// ehlo is resolvable. so this should give a 250 code
- assertEquals("ehlo accepted", 250, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("ehlo accepted")
+ .isEqualTo(250);
smtpProtocol1.quit();
} finally {
@@ -989,14 +1083,20 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
String sender1 = "mail_sender1@localhost";
smtpProtocol1.setSender(sender1);
- assertEquals("expected 503 error", 503, smtpProtocol1.getReplyCode());
+ assertThat(smtpProtocol1.getReplyCode())
+ .as("expected 503 error")
+ .isEqualTo(503);
smtpProtocol1.helo(InetAddress.getLocalHost().toString());
@@ -1013,10 +1113,14 @@ public class SMTPServerTest {
SMTPClient smtpProtocol1 = new SMTPClient();
smtpProtocol1.connect("127.0.0.1", smtpListenerPort);
- assertTrue("first connection taken", smtpProtocol1.isConnected());
+ assertThat(smtpProtocol1.isConnected())
+ .as("first connection taken")
+ .isTrue();
// no message there, yet
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
String sender1 = "mail_sender1@localhost";
@@ -1038,11 +1142,15 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("AUTH PLAIN");
- assertEquals("start auth.", 334, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("start auth.")
+ .isEqualTo(334);
smtpProtocol.sendCommand("*");
- assertEquals("cancel auth.", 501, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("cancel auth.")
+ .isEqualTo(501);
smtpProtocol.quit();
@@ -1066,7 +1174,9 @@ public class SMTPServerTest {
capabilitieslist.add(capabilityRes[i].substring(4));
}
- assertTrue("anouncing auth required", capabilitieslist.contains("AUTH LOGIN PLAIN"));
+ assertThat(capabilitieslist.contains("AUTH LOGIN PLAIN"))
+ .as("anouncing auth required")
+ .isTrue();
// is this required or just for compatibility?
// assertTrue("anouncing auth required",
// capabilitieslist.contains("AUTH=LOGIN PLAIN"));
@@ -1075,32 +1185,46 @@ public class SMTPServerTest {
String noexistUserName = "noexist_test_user_smtp";
String sender = "test_user_smtp@localhost";
smtpProtocol.sendCommand("AUTH FOO", null);
- assertEquals("expected error: unrecognized authentication type", 504, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error: unrecognized authentication type")
+ .isEqualTo(504);
smtpProtocol.setSender(sender);
smtpProtocol.addRecipient("mail@sample.com");
- assertEquals("expected 530 error", 530, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected 530 error")
+ .isEqualTo(530);
- assertFalse("user not existing", usersRepository.contains(noexistUserName));
+ assertThat(usersRepository.contains(noexistUserName))
+ .as("user not existing")
+ .isFalse();
smtpProtocol.sendCommand("AUTH PLAIN");
smtpProtocol.sendCommand(Base64.encodeAsString("\0" + noexistUserName + "\0pwd\0"));
// smtpProtocol.sendCommand(noexistUserName+"pwd".toCharArray());
- assertEquals("expected error", 535, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error")
+ .isEqualTo(535);
usersRepository.addUser(userName, "pwd");
smtpProtocol.sendCommand("AUTH PLAIN");
smtpProtocol.sendCommand(Base64.encodeAsString("\0" + userName + "\0wrongpwd\0"));
- assertEquals("expected error", 535, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error")
+ .isEqualTo(535);
smtpProtocol.sendCommand("AUTH PLAIN");
smtpProtocol.sendCommand(Base64.encodeAsString("\0" + userName + "\0pwd\0"));
- assertEquals("authenticated", 235, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("authenticated")
+ .isEqualTo(235);
smtpProtocol.sendCommand("AUTH PLAIN");
- assertEquals("expected error: User has previously authenticated.", 503, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error: User has previously authenticated.")
+ .isEqualTo(503);
smtpProtocol.addRecipient("mail@sample.com");
smtpProtocol.sendShortMessageData("Subject: test\r\n\r\nTest body testAuth\r\n");
@@ -1108,7 +1232,9 @@ public class SMTPServerTest {
smtpProtocol.quit();
// mail was propagated by SMTPServer
- assertNotNull("mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("mail received by mail server")
+ .isNotNull();
}
@Test
@@ -1129,10 +1255,14 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("AUTH PLAIN");
smtpProtocol.sendCommand(Base64.encodeAsString("\0" + userName + "\0pwd\0"));
- assertEquals("authenticated", 235, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("authenticated")
+ .isEqualTo(235);
smtpProtocol.addRecipient("mail@sample.com");
- assertEquals("expected error", 503, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error")
+ .isEqualTo(503);
smtpProtocol.quit();
}
@@ -1151,12 +1281,16 @@ public class SMTPServerTest {
// left out for test smtpProtocol.rcpt(new Address("mail@localhost"));
smtpProtocol.sendShortMessageData("Subject: test\r\n\r\nTest body testNoRecepientSpecified\r\n");
- assertTrue("sending succeeded without recepient", SMTPReply.isNegativePermanent(smtpProtocol.getReplyCode()));
+ assertThat(SMTPReply.isNegativePermanent(smtpProtocol.getReplyCode()))
+ .as("sending succeeded without recepient")
+ .isTrue();
smtpProtocol.quit();
// mail was propagated by SMTPServer
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
}
@Test
@@ -1177,7 +1311,9 @@ public class SMTPServerTest {
smtpProtocol.quit();
// mail was propagated by SMTPServer
- assertNull("no mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();
}
@Test
@@ -1193,7 +1329,9 @@ public class SMTPServerTest {
smtpProtocol.setSender("mail@sample.com");
smtpProtocol.addRecipient("maila@sample.com");
- assertEquals("expected 550 error", 550, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected 550 error")
+ .isEqualTo(550);
}
@Test
@@ -1207,10 +1345,14 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("ehlo " + InetAddress.getLocalHost());
smtpProtocol.sendCommand("MAIL FROM:<ma...@localhost> SIZE=1025", null);
- assertEquals("expected error: max msg size exceeded", 552, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error: max msg size exceeded")
+ .isEqualTo(552);
smtpProtocol.addRecipient("mail@localhost");
- assertEquals("expected error", 503, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected error")
+ .isEqualTo(503);
}
public void testHandleMessageSizeLimitExceeded() throws Exception {
@@ -1242,9 +1384,12 @@ public class SMTPServerTest {
wr.write("123456781012345678201\r\n"); // 521 + CRLF = 523 + 502 => 1025
wr.close();
- assertFalse(smtpProtocol.completePendingCommand());
+ assertThat(smtpProtocol.completePendingCommand())
+ .isFalse();
- assertEquals("expected 552 error", 552, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected 552 error")
+ .isEqualTo(552);
}
@@ -1276,9 +1421,12 @@ public class SMTPServerTest {
wr.write("1234567810123456782012\r\n"); // 1022 + CRLF = 1024
wr.close();
- assertTrue(smtpProtocol.completePendingCommand());
+ assertThat(smtpProtocol.completePendingCommand())
+ .isTrue();
- assertEquals("expected 250 ok", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("expected 250 ok")
+ .isEqualTo(250);
}
// Check if auth users get not rejected cause rbl. See JAMES-566
@@ -1303,7 +1451,9 @@ public class SMTPServerTest {
capabilitieslist.add(capabilityRes[i].substring(4));
}
- assertTrue("anouncing auth required", capabilitieslist.contains("AUTH LOGIN PLAIN"));
+ assertThat(capabilitieslist.contains("AUTH LOGIN PLAIN"))
+ .as("anouncing auth required")
+ .isTrue();
// is this required or just for compatibility? assertTrue("anouncing
// auth required", capabilitieslist.contains("AUTH=LOGIN PLAIN"));
@@ -1316,17 +1466,23 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("AUTH PLAIN");
smtpProtocol.sendCommand(Base64.encodeAsString("\0" + userName + "\0pwd\0"));
- assertEquals("authenticated", 235, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("authenticated")
+ .isEqualTo(235);
smtpProtocol.addRecipient("mail@sample.com");
- assertEquals("authenticated.. not reject", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("authenticated.. not reject")
+ .isEqualTo(250);
smtpProtocol.sendShortMessageData("Subject: test\r\n\r\nTest body testDNSRBLNotRejectAuthUser\r\n");
smtpProtocol.quit();
// mail was propagated by SMTPServer
- assertNotNull("mail received by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("mail received by mail server")
+ .isNotNull();
}
@Test
@@ -1347,14 +1503,18 @@ public class SMTPServerTest {
smtpProtocol.setSender(sender);
smtpProtocol.addRecipient("mail@sample.com");
- assertEquals("reject", 554, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("reject")
+ .isEqualTo(554);
smtpProtocol.sendShortMessageData("Subject: test\r\n\r\nTest body testDNSRBLRejectWorks\r\n");
smtpProtocol.quit();
// mail was rejected by SMTPServer
- assertNull("mail reject by mail server", queue.getLastMail());
+ assertThat(queue.getLastMail())
+ .as("mail reject by mail server")
+ .isNull();
}
@Test
@@ -1367,10 +1527,14 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
smtpProtocol.sendCommand("mail from:", "test@localhost");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.sendCommand("rcpt to:", "mail@sample.com");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.quit();
@@ -1379,10 +1543,14 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
smtpProtocol.sendCommand("mail from:", "<te...@localhost>");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.sendCommand("rcpt to:", "<ma...@sample.com>");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.quit();
}
@@ -1396,14 +1564,22 @@ public class SMTPServerTest {
smtpProtocol.sendCommand("ehlo", InetAddress.getLocalHost().toString());
smtpProtocol.sendCommand("mail from:", "test@localhost");
- assertEquals("reject", 501, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("reject")
+ .isEqualTo(501);
smtpProtocol.sendCommand("mail from:", "<te...@localhost>");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.sendCommand("rcpt to:", "mail@sample.com");
- assertEquals("reject", 501, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("reject")
+ .isEqualTo(501);
smtpProtocol.sendCommand("rcpt to:", "<ma...@sample.com>");
- assertEquals("accept", 250, smtpProtocol.getReplyCode());
+ assertThat(smtpProtocol.getReplyCode())
+ .as("accept")
+ .isEqualTo(250);
smtpProtocol.quit();
}
@@ -1441,12 +1617,24 @@ public class SMTPServerTest {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
- assertEquals("Connection made", 220, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("HELO accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("MAIL FROM accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("RCPT TO accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("DATA accepted", 354, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("Message accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("Connection made")
+ .isEqualTo(220);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("HELO accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("MAIL FROM accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("RCPT TO accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("DATA accepted")
+ .isEqualTo(354);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("Message accepted")
+ .isEqualTo(250);
in.close();
out.close();
client.close();
@@ -1488,12 +1676,24 @@ public class SMTPServerTest {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
- assertEquals("Connection made", 220, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("HELO accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("MAIL FROM accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("RCPT TO rejected", 550, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("RCPT TO rejected", 550, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("DATA not accepted", 503, Integer.parseInt(in.readLine().split(" ")[0]));
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("Connection made")
+ .isEqualTo(220);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("HELO accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("MAIL FROM accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("RCPT TO rejected")
+ .isEqualTo(550);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("RCPT TO rejected")
+ .isEqualTo(550);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("DATA not accepted")
+ .isEqualTo(503);
in.close();
out.close();
client.close();
@@ -1534,13 +1734,27 @@ public class SMTPServerTest {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
- assertEquals("Connection made", 220, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("HELO accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("MAIL FROM accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("RCPT TO rejected", 550, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("RCPT accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("DATA accepted", 354, Integer.parseInt(in.readLine().split(" ")[0]));
- assertEquals("Message accepted", 250, Integer.parseInt(in.readLine().split(" ")[0]));
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("Connection made")
+ .isEqualTo(220);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("HELO accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("MAIL FROM accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("RCPT TO rejected")
+ .isEqualTo(550);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("RCPT accepted")
+ .isEqualTo(250);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("DATA accepted")
+ .isEqualTo(354);
+ assertThat(Integer.parseInt(in.readLine().split(" ")[0]))
+ .as("Message accepted")
+ .isEqualTo(250);
in.close();
out.close();
client.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/12] james-project git commit: JAMES-1862 Remove TODO note on
commons-net fix
Posted by ad...@apache.org.
JAMES-1862 Remove TODO note on commons-net fix
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8633537d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8633537d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8633537d
Branch: refs/heads/master
Commit: 8633537d9c82f15c155c9ec36201e7144b3bb223
Parents: 76f9d61
Author: Antoine Duprat <ad...@apache.org>
Authored: Wed Nov 30 10:04:30 2016 +0100
Committer: Antoine Duprat <ad...@apache.org>
Committed: Thu Dec 1 14:17:02 2016 +0100
----------------------------------------------------------------------
.../james/protocols/smtp/AbstractStartTlsSMTPServerTest.java | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8633537d/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
index 626cb17..02f87ec 100644
--- a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
+++ b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractStartTlsSMTPServerTest.java
@@ -97,11 +97,8 @@ public abstract class AbstractStartTlsSMTPServerTest {
assertTrue(client.execTLS());
- // TODO: Add back once commons-net 3.1.0 was released.
- // See: NET-421
- //
- //client.quit();
- //assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+ client.quit();
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
client.disconnect();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/12] james-project git commit: JAMES-1862 Dont frame SMTP commands
when STARTTLS is present
Posted by ad...@apache.org.
JAMES-1862 Dont frame SMTP commands when STARTTLS is present
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b4f1ed6a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b4f1ed6a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b4f1ed6a
Branch: refs/heads/master
Commit: b4f1ed6ab5ad08feb1d4ad3ac5ef7aa2a2b7a893
Parents: b61399a
Author: Antoine Duprat <ad...@apache.org>
Authored: Thu Dec 1 13:38:42 2016 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Dec 6 11:31:26 2016 +0100
----------------------------------------------------------------------
protocols/smtp/pom.xml | 4 ++
.../AllButStartTlsDelimiterChannelHandler.java | 53 ++++++++++++++++++++
.../smtp/CommandInjectionDetectedException.java | 23 +++++++++
.../smtp/netty/NettyStartTlsSMTPServerTest.java | 18 ++++++-
.../james/smtpserver/netty/SMTPServer.java | 4 +-
.../apache/james/smtpserver/SMTPServerTest.java | 40 +++++++++++++++
6 files changed, 138 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/protocols/smtp/pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/pom.xml b/protocols/smtp/pom.xml
index aaf2b49..a9f913f 100644
--- a/protocols/smtp/pom.xml
+++ b/protocols/smtp/pom.xml
@@ -64,6 +64,10 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty</artifactId>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsDelimiterChannelHandler.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsDelimiterChannelHandler.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsDelimiterChannelHandler.java
new file mode 100644
index 0000000..ad0db9c
--- /dev/null
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/AllButStartTlsDelimiterChannelHandler.java
@@ -0,0 +1,53 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.protocols.smtp;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.handler.codec.frame.DelimiterBasedFrameDecoder;
+
+import com.google.common.base.Charsets;
+
+public class AllButStartTlsDelimiterChannelHandler extends DelimiterBasedFrameDecoder {
+
+ private static final String STARTTLS = "starttls";
+
+ public AllButStartTlsDelimiterChannelHandler(int maxFrameLength, boolean stripDelimiter, ChannelBuffer[] delimiters) {
+ super(maxFrameLength, stripDelimiter, delimiters);
+ }
+
+ @Override
+ protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
+ String trimedLowerCasedInput = readAll(buffer).trim().toLowerCase();
+ if (hasCommandInjection(trimedLowerCasedInput)) {
+ throw new CommandInjectionDetectedException();
+ }
+ return super.decode(ctx, channel, buffer);
+ }
+
+ private String readAll(ChannelBuffer buffer) {
+ return buffer.toString(Charsets.US_ASCII);
+ }
+
+ private boolean hasCommandInjection(String trimedLowerCasedInput) {
+ return trimedLowerCasedInput.contains(STARTTLS)
+ && !trimedLowerCasedInput.endsWith(STARTTLS);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/CommandInjectionDetectedException.java
----------------------------------------------------------------------
diff --git a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/CommandInjectionDetectedException.java b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/CommandInjectionDetectedException.java
new file mode 100644
index 0000000..1c15346
--- /dev/null
+++ b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/CommandInjectionDetectedException.java
@@ -0,0 +1,23 @@
+/****************************************************************
+ * 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;
+
+public class CommandInjectionDetectedException extends RuntimeException {
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/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 e8c16af..161985c 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,12 +44,12 @@ import org.apache.james.protocols.api.utils.MockLogger;
import org.apache.james.protocols.api.utils.TestUtils;
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.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.DelimiterBasedFrameDecoder;
import org.jboss.netty.handler.codec.frame.Delimiters;
import org.junit.After;
import org.junit.Test;
@@ -72,7 +72,7 @@ public class NettyStartTlsSMTPServerTest {
NettyServer server = NettyServer.builder()
.protocol(protocol)
.secure(enc)
- .frameHandler(new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()))
+ .frameHandler(new AllButStartTlsDelimiterChannelHandler(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter()))
.build();
server.setListenAddresses(address);
return server;
@@ -176,6 +176,20 @@ public class NettyStartTlsSMTPServerTest {
}
@Test
+ public void startTlsShouldFailWhenFollowedByInjectedCommand() throws Exception {
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+ ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
+ server.bind();
+
+ SMTPSClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ client.sendCommand("EHLO localhost");
+
+ client.sendCommand("STARTTLS\r\nRSET\r\n");
+ assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isFalse();
+ }
+
+ @Test
public void startTlsShouldWorkWhenUsingJavamail() throws Exception {
TestMessageHook hook = new TestMessageHook();
InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/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 c7d291c..cad8941 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,6 +30,7 @@ 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.smtp.SMTPConfiguration;
import org.apache.james.protocols.smtp.SMTPProtocol;
import org.apache.james.smtpserver.CoreCmdHandlerLoader;
@@ -37,7 +38,6 @@ 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.DelimiterBasedFrameDecoder;
import org.jboss.netty.handler.codec.frame.Delimiters;
/**
@@ -365,7 +365,7 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
@Override
protected ChannelHandler createFrameHandler() {
- return new DelimiterBasedFrameDecoder(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
+ return new AllButStartTlsDelimiterChannelHandler(AbstractChannelPipelineFactory.MAX_LINE_LENGTH, false, Delimiters.lineDelimiter());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/b4f1ed6a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 578b824..0efae7d 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -499,6 +499,46 @@ public class SMTPServerTest {
}
+ @Test
+ public void startTlsCommandShouldWorkWhenAlone() throws Exception {
+ smtpConfiguration.setStartTLS();
+ init(smtpConfiguration);
+
+ SMTPClient smtpProtocol = new SMTPClient();
+ smtpProtocol.connect("127.0.0.1", smtpListenerPort);
+
+ // no message there, yet
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
+
+ smtpProtocol.sendCommand("EHLO " + InetAddress.getLocalHost());
+ smtpProtocol.sendCommand("STARTTLS");
+ assertThat(smtpProtocol.getReplyCode()).isEqualTo(220);
+
+ smtpProtocol.disconnect();
+ }
+
+ @Test
+ public void startTlsCommandShouldFailWhenFollowedByInjectedCommand() throws Exception {
+ smtpConfiguration.setStartTLS();
+ init(smtpConfiguration);
+
+ SMTPClient smtpProtocol = new SMTPClient();
+ smtpProtocol.connect("127.0.0.1", smtpListenerPort);
+
+ // no message there, yet
+ assertThat(queue.getLastMail())
+ .as("no mail received by mail server")
+ .isNull();;
+
+ smtpProtocol.sendCommand("EHLO " + InetAddress.getLocalHost());
+ smtpProtocol.sendCommand("STARTTLS\r\nAUTH PLAIN");
+ assertThat(smtpProtocol.getReplyCode()).isEqualTo(451);
+
+ smtpProtocol.disconnect();
+ }
+
protected SMTPClient newSMTPClient() throws IOException {
SMTPClient smtp = new SMTPClient();
smtp.connect("127.0.0.1", smtpListenerPort);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org