Skip to content

Commit

Permalink
JAMES-1954 Ensure we close resources when tests ends in NettyStartTls…
Browse files Browse the repository at this point in the history
…SMTPServer

server field was never used
  • Loading branch information
chibenwa committed Mar 13, 2017
1 parent ba48fae commit 71f89a8
Showing 1 changed file with 71 additions and 71 deletions.
Expand Up @@ -62,15 +62,20 @@ public class NettyStartTlsSMTPServerTest {
private static final String LOCALHOST_IP = "127.0.0.1"; private static final String LOCALHOST_IP = "127.0.0.1";
private static final int RANDOM_PORT = 0; private static final int RANDOM_PORT = 0;


private ProtocolServer server; private SMTPSClient smtpsClient = null;
private ProtocolServer server = null;


@After @After
public void tearDown() { public void tearDown() throws Exception {
if (smtpsClient != null) {
smtpsClient.disconnect();
}
if (server != null) { if (server != null) {
server.unbind(); server.unbind();
} }
} }



private ProtocolServer createServer(Protocol protocol, Encryption enc) { private ProtocolServer createServer(Protocol protocol, Encryption enc) {
NettyServer server = NettyServer.builder() NettyServer server = NettyServer.builder()
.protocol(protocol) .protocol(protocol)
Expand Down Expand Up @@ -98,48 +103,39 @@ private Protocol createProtocol(Optional<ProtocolHandler> handler) throws Wiring


@Test @Test
public void connectShouldReturnTrueWhenConnecting() throws Exception { public void connectShouldReturnTrueWhenConnecting() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue(); assertThat(SMTPReply.isPositiveCompletion(smtpsClient.getReplyCode())).isTrue();

client.quit();
client.disconnect();
} }


@Test @Test
public void ehloShouldReturnTrueWhenSendingTheCommand() throws Exception { public void ehloShouldReturnTrueWhenSendingTheCommand() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());


client.sendCommand("EHLO localhost"); smtpsClient.sendCommand("EHLO localhost");
assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isTrue(); assertThat(SMTPReply.isPositiveCompletion(smtpsClient.getReplyCode())).isTrue();

client.quit();
client.disconnect();
} }


@Test @Test
public void startTlsShouldBeAnnouncedWhenServerSupportsIt() throws Exception { public void startTlsShouldBeAnnouncedWhenServerSupportsIt() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
client.sendCommand("EHLO localhost"); smtpsClient.sendCommand("EHLO localhost");

assertThat(new StartTLSAssert(client)).isStartTLSAnnounced();


client.quit(); assertThat(new StartTLSAssert(smtpsClient)).isStartTLSAnnounced();
client.disconnect();
} }


private static class StartTLSAssert implements AssertDelegateTarget { private static class StartTLSAssert implements AssertDelegateTarget {
Expand All @@ -163,79 +159,83 @@ public boolean isStartTLSAnnounced() {


@Test @Test
public void startTlsShouldReturnTrueWhenServerSupportsIt() throws Exception { public void startTlsShouldReturnTrueWhenServerSupportsIt() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
client.sendCommand("EHLO localhost"); smtpsClient.sendCommand("EHLO localhost");


boolean execTLS = client.execTLS(); boolean execTLS = smtpsClient.execTLS();
assertThat(execTLS).isTrue(); assertThat(execTLS).isTrue();

client.quit();
client.disconnect();
} }


@Test @Test
public void startTlsShouldFailWhenFollowedByInjectedCommand() throws Exception { public void startTlsShouldFailWhenFollowedByInjectedCommand() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
client.sendCommand("EHLO localhost"); smtpsClient.sendCommand("EHLO localhost");


client.sendCommand("STARTTLS\r\nRSET\r\n"); smtpsClient.sendCommand("STARTTLS\r\nRSET\r\n");
assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isFalse(); assertThat(SMTPReply.isPositiveCompletion(smtpsClient.getReplyCode())).isFalse();
} }


@Test @Test
public void startTlsShouldFailWhenFollowedByInjectedCommandAndNotAtBeginningOfLine() throws Exception { public void startTlsShouldFailWhenFollowedByInjectedCommandAndNotAtBeginningOfLine() throws Exception {
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> absent()), Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); smtpsClient = createClient();


SMTPSClient client = createClient(); server.bind();
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();
client.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort()); smtpsClient.connect(bindedAddress.getAddress().getHostAddress(), bindedAddress.getPort());
client.sendCommand("EHLO localhost"); smtpsClient.sendCommand("EHLO localhost");


client.sendCommand("RSET\r\nSTARTTLS\r\nRSET\r\n"); smtpsClient.sendCommand("RSET\r\nSTARTTLS\r\nRSET\r\n");
assertThat(SMTPReply.isPositiveCompletion(client.getReplyCode())).isFalse(); assertThat(SMTPReply.isPositiveCompletion(smtpsClient.getReplyCode())).isFalse();
} }


@Test @Test
public void startTlsShouldWorkWhenUsingJavamail() throws Exception { public void startTlsShouldWorkWhenUsingJavamail() throws Exception {
TestMessageHook hook = new TestMessageHook(); TestMessageHook hook = new TestMessageHook();
ProtocolServer server = createServer(createProtocol(Optional.<ProtocolHandler> of(hook)) , Encryption.createStartTls(BogusSslContextFactory.getServerContext())); server = createServer(createProtocol(Optional.<ProtocolHandler> of(hook)) , Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
server.bind(); server.bind();
SMTPTransport transport = null;


InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress(); try {
InetSocketAddress bindedAddress = new ProtocolServerUtils(server).retrieveBindedAddress();


Properties mailProps = new Properties(); Properties mailProps = new Properties();
mailProps.put("mail.smtp.from", "test@localhost"); mailProps.put("mail.smtp.from", "test@localhost");
mailProps.put("mail.smtp.host", bindedAddress.getHostName()); mailProps.put("mail.smtp.host", bindedAddress.getHostName());
mailProps.put("mail.smtp.port", bindedAddress.getPort()); mailProps.put("mail.smtp.port", bindedAddress.getPort());
mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName()); mailProps.put("mail.smtp.socketFactory.class", BogusSSLSocketFactory.class.getName());
mailProps.put("mail.smtp.socketFactory.fallback", "false"); mailProps.put("mail.smtp.socketFactory.fallback", "false");
mailProps.put("mail.smtp.starttls.enable", "true"); mailProps.put("mail.smtp.starttls.enable", "true");


Session mailSession = Session.getDefaultInstance(mailProps); Session mailSession = Session.getDefaultInstance(mailProps);


InternetAddress[] rcpts = new InternetAddress[] { new InternetAddress("valid@localhost") }; InternetAddress[] rcpts = new InternetAddress[]{new InternetAddress("valid@localhost")};
MimeMessage message = new MimeMessage(mailSession); MimeMessage message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress("test@localhost")); message.setFrom(new InternetAddress("test@localhost"));
message.setRecipients(Message.RecipientType.TO, rcpts); message.setRecipients(Message.RecipientType.TO, rcpts);
message.setSubject("Testmail", "UTF-8"); message.setSubject("Testmail", "UTF-8");
message.setText("Test....."); message.setText("Test.....");


SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtps"); transport = (SMTPTransport) mailSession.getTransport("smtps");


transport.connect(new Socket(bindedAddress.getHostName(), bindedAddress.getPort())); transport.connect(new Socket(bindedAddress.getHostName(), bindedAddress.getPort()));
transport.sendMessage(message, rcpts); transport.sendMessage(message, rcpts);


assertThat(hook.getQueued()).hasSize(1); assertThat(hook.getQueued()).hasSize(1);
} finally {
if (transport != null) {
transport.close();
}
}
} }
} }

0 comments on commit 71f89a8

Please sign in to comment.