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 bt...@apache.org on 2017/12/25 04:26:45 UTC
[01/13] james-project git commit: JAMES-2262 Add unit testing for
SpamAssassin
Repository: james-project
Updated Branches:
refs/heads/master e0ad36d00 -> dfd3f420b
JAMES-2262 Add unit testing for SpamAssassin
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4d9d568c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4d9d568c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4d9d568c
Branch: refs/heads/master
Commit: 4d9d568c2ea640740ee2c0f88c87156e4aa5d5ff
Parents: e0ad36d
Author: quynhn <qn...@linagora.com>
Authored: Thu Dec 14 16:53:53 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:08 2017 +0700
----------------------------------------------------------------------
.../transport/mailets/SpamAssassinTest.java | 167 ++++++++++++++
server/mailet/mailets/pom.xml | 13 ++
.../james/transport/mailets/SpamAssassin.java | 47 ++--
.../transport/mailets/SpamAssassinTest.java | 215 +++++++++++++++++++
4 files changed, 425 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d9d568c/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
new file mode 100644
index 0000000..34c9a36
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -0,0 +1,167 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Optional;
+
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.jmap.mailet.VacationMailet;
+import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.mailets.configuration.CommonProcessors;
+import org.apache.james.mailets.configuration.MailetConfiguration;
+import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.ProcessorConfiguration;
+import org.apache.james.transport.mailets.amqp.AmqpRule;
+import org.apache.james.transport.matchers.All;
+import org.apache.james.transport.matchers.RecipientIsLocal;
+import org.apache.james.transport.matchers.SMTPAuthSuccessful;
+import org.apache.james.util.streams.ContainerNames;
+import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.SMTPMessageSender;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.MimeMessageBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+
+import com.jayway.awaitility.Awaitility;
+import com.jayway.awaitility.Duration;
+
+public class ContactExtractorTest {
+
+ public static final String JAMES_ORG = "james.org";
+ public static final String SENDER = "sender@" + JAMES_ORG;
+ public static final String TO = "to@" + JAMES_ORG;
+ public static final String TO2 = "to2@" + JAMES_ORG;
+ public static final String CC = "cc@" + JAMES_ORG;
+ public static final String CC2 = "cc2@" + JAMES_ORG;
+ public static final String BCC = "bcc@" + JAMES_ORG;
+ public static final String BCC2 = "bcc2@" + JAMES_ORG;
+ public static final String PASSWORD = "secret";
+ public static final String EXCHANGE = "collector:email";
+ public static final String ROUTING_KEY = "";
+
+ public SwarmGenericContainer rabbit = new SwarmGenericContainer(ContainerNames.RABBITMQ);
+ public AmqpRule amqpRule = new AmqpRule(rabbit, EXCHANGE, ROUTING_KEY);
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ @Rule
+ public RuleChain chain = RuleChain.outerRule(rabbit).around(amqpRule).around(folder);
+
+ private TemporaryJamesServer jamesServer;
+
+ @Before
+ public void setup() throws Exception {
+ String attribute = "ExtractedContacts";
+ MailetContainer mailets = MailetContainer
+ .builder()
+ .threads(5)
+ .postmaster(SENDER)
+ .addProcessor(CommonProcessors.root())
+ .addProcessor(CommonProcessors.error())
+ .addProcessor(
+ ProcessorConfiguration.builder()
+ .state("transport")
+ .addMailet(MailetConfiguration.builder()
+ .matcher(SMTPAuthSuccessful.class)
+ .mailet(ContactExtractor.class)
+ .addProperty(ContactExtractor.Configuration.ATTRIBUTE, attribute)
+ .build())
+ .addMailet(MailetConfiguration.builder()
+ .matcher(All.class)
+ .mailet(AmqpForwardAttribute.class)
+ .addProperty(AmqpForwardAttribute.URI_PARAMETER_NAME, amqpRule.getAmqpUri())
+ .addProperty(AmqpForwardAttribute.EXCHANGE_PARAMETER_NAME, EXCHANGE)
+ .addProperty(AmqpForwardAttribute.ATTRIBUTE_PARAMETER_NAME, attribute)
+ .build())
+ .addMailet(MailetConfiguration.builder()
+ .matcher(All.class)
+ .mailet(RemoveMimeHeader.class)
+ .addProperty("name", "bcc")
+ .build())
+ .addMailet(MailetConfiguration.builder()
+ .matcher(RecipientIsLocal.class)
+ .mailet(VacationMailet.class)
+ .build())
+ .addMailet(MailetConfiguration.builder()
+ .matcher(RecipientIsLocal.class)
+ .mailet(LocalDelivery.class)
+ .build())
+ .build())
+ .build();
+ jamesServer = TemporaryJamesServer.builder().build(folder, mailets);
+ DataProbeImpl probe = jamesServer.getProbe(DataProbeImpl.class);
+ probe.addDomain(JAMES_ORG);
+ probe.addUser(SENDER, PASSWORD);
+ probe.addUser(TO, PASSWORD);
+ probe.addUser(TO2, PASSWORD);
+ probe.addUser(CC, PASSWORD);
+ probe.addUser(CC2, PASSWORD);
+ probe.addUser(BCC, PASSWORD);
+ probe.addUser(BCC2, PASSWORD);
+ }
+
+ @After
+ public void tearDown() {
+ jamesServer.shutdown();
+ }
+
+ @Test
+ public void recipientsShouldBePublishedToAmqpWhenSendingEmail() throws Exception {
+ MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+ .setSender(SENDER)
+ .addToRecipient(TO, "John To2 <" + TO2 + ">")
+ .addCcRecipient(CC, "John Cc2 <" + CC2 + ">")
+ .addBccRecipient(BCC, "John Bcc2 <" + BCC2 + ">")
+ .setSubject("Contact collection Rocks")
+ .setText("This is my email")
+ .build();
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(message)
+ .sender(new MailAddress(SENDER))
+ .recipients(new MailAddress(TO), new MailAddress(TO2), new MailAddress(CC), new MailAddress(CC2), new MailAddress(BCC), new MailAddress(BCC2))
+ .build();
+ try (SMTPMessageSender messageSender = SMTPMessageSender.authentication("localhost", 1025, JAMES_ORG, SENDER, PASSWORD);
+ IMAPMessageReader imap = new IMAPMessageReader("localhost", 1143)) {
+
+ messageSender.sendMessage(mail);
+ Awaitility.await().pollDelay(Duration.FIVE_HUNDRED_MILLISECONDS)
+ .atMost(Duration.ONE_MINUTE)
+ .until(() -> imap.userReceivedMessage(TO, PASSWORD));
+
+ Optional<String> actual = amqpRule.readContent();
+ assertThat(actual).isNotEmpty();
+ assertThatJson(actual.get()).isEqualTo("{"
+ + "\"userEmail\" : \"sender@james.org\", "
+ + "\"emails\" : [ \"to@james.org\", \"John To2 <to...@james.org>\", \"cc@james.org\", \"John Cc2 <cc...@james.org>\", \"bcc@james.org\", \"John Bcc2 <bc...@james.org>\" ]"
+ + "}");
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d9d568c/server/mailet/mailets/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/pom.xml b/server/mailet/mailets/pom.xml
index 9f81107..a8f409c 100644
--- a/server/mailet/mailets/pom.xml
+++ b/server/mailet/mailets/pom.xml
@@ -135,6 +135,19 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-protocols-library</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>james-server-protocols-smtp</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-queue-api</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d9d568c/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
index 970bcf1..1b3de01 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
@@ -19,6 +19,8 @@
package org.apache.james.transport.mailets;
+import java.util.Optional;
+
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@@ -27,9 +29,13 @@ import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Experimental;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
+import org.apache.mailet.base.MailetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+
/**
* Sends the message through daemonized SpamAssassin (spamd), visit <a
* href="http://spamassassin.apache.org/">spamassassin.apache.org/</a> for info
@@ -57,29 +63,26 @@ import org.slf4j.LoggerFactory;
@Experimental
public class SpamAssassin extends GenericMailet {
private static final Logger LOGGER = LoggerFactory.getLogger(ManageSieveMailet.class);
+ public static final String SPAMD_HOST = "spamdHost";
+ public static final String SPAMD_PORT = "spamdPort";
+ public static final String DEFAULT_HOST = "127.0.0.1";
+ public static final int DEFAULT_PORT = 783;
+ public static final int MAX_AVAILABLE_PORT = 65535;
- String spamdHost;
- int spamdPort;
+ private String spamdHost;
+ private int spamdPort;
/**
* @see org.apache.mailet.base.GenericMailet#init()
*/
public void init() throws MessagingException {
- spamdHost = getInitParameter("spamdHost");
- if (spamdHost == null || spamdHost.equals("")) {
- spamdHost = "127.0.0.1";
- }
+ spamdHost = Optional.ofNullable(getInitParameter(SPAMD_HOST))
+ .filter(s -> !Strings.isNullOrEmpty(s))
+ .orElse(DEFAULT_HOST);
- String port = getInitParameter("spamdPort");
- if (port == null || port.equals("")) {
- spamdPort = 783;
- } else {
-
- try {
- spamdPort = Integer.parseInt(getInitParameter("spamdPort"));
- } catch (NumberFormatException e) {
- throw new MessagingException("Please configure a valid port. Not valid: " + spamdPort);
- }
+ spamdPort = MailetUtil.getInitParameterAsStrictlyPositiveInteger(getInitParameter(SPAMD_PORT), DEFAULT_PORT);
+ if (spamdPort > MAX_AVAILABLE_PORT) {
+ throw new MessagingException("Please configure a valid port. Not valid: " + spamdPort);
}
}
@@ -90,7 +93,7 @@ public class SpamAssassin extends GenericMailet {
try {
MimeMessage message = mail.getMessage();
- // Invoke spamassian connection and scan the message
+ // Invoke SpamAssassin connection and scan the message
SpamAssassinInvoker sa = new SpamAssassinInvoker(spamdHost, spamdPort);
sa.scanMail(message);
@@ -112,4 +115,14 @@ public class SpamAssassin extends GenericMailet {
public String getMailetInfo() {
return "Checks message against SpamAssassin";
}
+
+ @VisibleForTesting
+ String getSpamdHost() {
+ return spamdHost;
+ }
+
+ @VisibleForTesting
+ int getSpamdPort() {
+ return spamdPort;
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/4d9d568c/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
new file mode 100644
index 0000000..e49d981
--- /dev/null
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -0,0 +1,215 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.protocols.lib.PortUtil;
+import org.apache.james.smtpserver.mock.util.MockSpamd;
+import org.apache.james.util.scanner.SpamAssassinInvoker;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MimeMessageBuilder;
+import org.junit.Test;
+
+public class SpamAssassinTest {
+ private SpamAssassin mailet = new SpamAssassin();
+
+ @Test
+ public void initShouldSetDefaultSpamdHostWhenNone() throws Exception {
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .build());
+
+ assertThat(mailet.getSpamdHost()).isEqualTo(SpamAssassin.DEFAULT_HOST);
+ }
+
+ @Test
+ public void initShouldSetDefaultSpamdPortWhenNone() throws Exception {
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .build());
+
+ assertThat(mailet.getSpamdPort()).isEqualTo(SpamAssassin.DEFAULT_PORT);
+ }
+
+ @Test
+ public void initShouldSetSpamdHostWhenPresent() throws Exception {
+ String spamdHost = "any.host";
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_HOST, spamdHost)
+ .build());
+
+ assertThat(mailet.getSpamdHost()).isEqualTo(spamdHost);
+ }
+
+ @Test
+ public void getSpamHostShouldReturnDefaultValueWhenEmpty() throws Exception {
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_HOST, "")
+ .build());
+
+ assertThat(mailet.getSpamdHost()).isEqualTo(SpamAssassin.DEFAULT_HOST);
+ }
+
+ @Test
+ public void initShouldSetDefaultSpamdPortWhenDefault() throws Exception {
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .build());
+
+ assertThat(mailet.getSpamdPort()).isEqualTo(SpamAssassin.DEFAULT_PORT);
+ }
+
+ @Test
+ public void initShouldThrowWhenSpamdPortIsNotNumber() throws Exception {
+ assertThatThrownBy(() -> mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_PORT, "noNumber")
+ .build())).isInstanceOf(MessagingException.class);
+ }
+
+ @Test
+ public void initShouldThrowWhenSpamdPortIsNegative() throws Exception {
+ assertThatThrownBy(() -> mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_PORT, "-1")
+ .build())).isInstanceOf(MessagingException.class);
+ }
+
+ @Test
+ public void initShouldThrowWhenSpamdPortIsZero() throws Exception {
+ assertThatThrownBy(() -> mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_PORT, "0")
+ .build())).isInstanceOf(MessagingException.class);
+ }
+
+ @Test
+ public void initShouldThrowWhenSpamdPortTooBig() throws Exception {
+ assertThatThrownBy(() -> mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_PORT,
+ String.valueOf(SpamAssassin.MAX_AVAILABLE_PORT + 1))
+ .build())).isInstanceOf(MessagingException.class);
+ }
+
+ @Test
+ public void initShouldSetSpamPortWhenPresent() throws Exception {
+ int spamPort = 1000;
+ mailet.init(FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(spamPort))
+ .build());
+
+ assertThat(mailet.getSpamdPort()).isEqualTo(spamPort);
+ }
+
+ @Test
+ public void serviceShouldWriteSpamAttributeOnMail() throws Exception {
+ int port = PortUtil.getNonPrivilegedPort();
+ new Thread(new MockSpamd(port)).start();
+
+ FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_HOST, "localhost")
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .build();
+ mailet.init(mailetConfiguration);
+
+ Mail mail = FakeMail.builder()
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .addToRecipient("user1@exemple.com")
+ .addFrom("sender@exemple.com")
+ .setSubject("testing")
+ .setText("Please!")
+ .build())
+ .build();
+
+ mailet.service(mail);
+
+ assertThat(mail.getAttributeNames())
+ .containsOnly(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME, SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME);
+ }
+
+ @Test
+ public void serviceShouldWriteMessageAsNotSpamWhenNotSpam() throws Exception {
+ int port = PortUtil.getNonPrivilegedPort();
+ new Thread(new MockSpamd(port)).start();
+
+ FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_HOST, "localhost")
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .build();
+ mailet.init(mailetConfiguration);
+
+ Mail mail = FakeMail.builder()
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .addToRecipient("user1@exemple.com")
+ .addFrom("sender@exemple.com")
+ .setSubject("testing")
+ .setText("Please!")
+ .build())
+ .build();
+
+ mailet.service(mail);
+
+ assertThat(mail.getAttribute(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("NO");
+ }
+
+ @Test
+ public void serviceShouldWriteMessageAsSpamWhenSpam() throws Exception {
+ int port = PortUtil.getNonPrivilegedPort();
+ new Thread(new MockSpamd(port)).start();
+
+ FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
+ .mailetName("SpamAssassin")
+ .setProperty(SpamAssassin.SPAMD_HOST, "localhost")
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .build();
+ mailet.init(mailetConfiguration);
+
+ Mail mail = FakeMail.builder()
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .addToRecipient("user1@exemple.com")
+ .addFrom("sender@exemple.com")
+ .setSubject(MockSpamd.GTUBE + " testing")
+ .setText("Please!")
+ .build())
+ .build();
+
+ mailet.service(mail);
+
+ assertThat(mail.getAttribute(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME)).isEqualTo("YES");
+ }
+
+ @Test
+ public void getMailetInfoShouldReturnSpamAssasinMailetInformation() throws Exception {
+ assertThat(mailet.getMailetInfo()).isEqualTo("Checks message against SpamAssassin");
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/13] james-project git commit: JAMES-2262 Use a Test rule for Mock
SpamD test rule
Posted by bt...@apache.org.
JAMES-2262 Use a Test rule for Mock SpamD test rule
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d11a7e40
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d11a7e40
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d11a7e40
Branch: refs/heads/master
Commit: d11a7e406642aaaa12436ebd9c46b46c802b63af
Parents: 1ef7daf
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 18 08:40:41 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:28 2017 +0700
----------------------------------------------------------------------
.../transport/mailets/SpamAssassinTest.java | 16 +++----
.../smtpserver/SpamAssassinHandlerTest.java | 14 +++---
.../smtpserver/mock/util/MockSpamdTestRule.java | 46 ++++++++++++++++++++
3 files changed, 57 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d11a7e40/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 82279c0..71831d9 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -24,15 +24,20 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import javax.mail.MessagingException;
-import org.apache.james.smtpserver.mock.util.MockSpamd;
+import org.apache.james.smtpserver.mock.util.MockSpamdTestRule;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailetConfig;
import org.apache.mailet.base.test.MimeMessageBuilder;
+import org.junit.Rule;
import org.junit.Test;
public class SpamAssassinTest {
+
+ @Rule
+ public MockSpamdTestRule spamd = new MockSpamdTestRule();
+
private SpamAssassin mailet = new SpamAssassin();
@Test
@@ -129,9 +134,6 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteSpamAttributeOnMail() throws Exception {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
@@ -156,9 +158,6 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteMessageAsNotSpamWhenNotSpam() throws Exception {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
@@ -182,9 +181,6 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteMessageAsSpamWhenSpam() throws Exception {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
http://git-wip-us.apache.org/repos/asf/james-project/blob/d11a7e40/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
index bc94b6a..cf1b7cc 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
@@ -35,8 +35,10 @@ import org.apache.james.smtpserver.fastfail.SpamAssassinHandler;
import org.apache.james.smtpserver.mock.MockMimeMessage;
import org.apache.james.smtpserver.mock.mailet.MockMail;
import org.apache.james.smtpserver.mock.util.MockSpamd;
+import org.apache.james.smtpserver.mock.util.MockSpamdTestRule;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Mail;
+import org.junit.Rule;
import org.junit.Test;
public class SpamAssassinHandlerTest {
@@ -91,6 +93,9 @@ public class SpamAssassinHandlerTest {
}
+ @Rule
+ public MockSpamdTestRule spamd = new MockSpamdTestRule();
+
private Mail setupMockedMail(MimeMessage message) {
MockMail mail = new MockMail();
mail.setMessage(message);
@@ -107,9 +112,6 @@ public class SpamAssassinHandlerTest {
@Test
public void testNonSpam() throws IOException, MessagingException {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage("test")));
SpamAssassinHandler handler = new SpamAssassinHandler();
@@ -127,9 +129,6 @@ public class SpamAssassinHandlerTest {
@Test
public void testSpam() throws IOException, MessagingException {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage(MockSpamd.GTUBE)));
SpamAssassinHandler handler = new SpamAssassinHandler();
@@ -146,9 +145,6 @@ public class SpamAssassinHandlerTest {
@Test
public void testSpamReject() throws IOException, MessagingException {
- MockSpamd spamd = new MockSpamd();
- new Thread(spamd).start();
-
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage(MockSpamd.GTUBE)));
SpamAssassinHandler handler = new SpamAssassinHandler();
http://git-wip-us.apache.org/repos/asf/james-project/blob/d11a7e40/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
new file mode 100644
index 0000000..4822b8f
--- /dev/null
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
@@ -0,0 +1,46 @@
+/****************************************************************
+ * 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.smtpserver.mock.util;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.junit.rules.ExternalResource;
+
+public class MockSpamdTestRule extends ExternalResource {
+
+ private ExecutorService executor = Executors.newSingleThreadExecutor();
+ private MockSpamd spamd = new MockSpamd();
+
+ @Override
+ protected void before() throws Throwable {
+ spamd.bind();
+ executor.execute(spamd);
+ }
+
+ public int getPort() {
+ return spamd.getPort();
+ }
+
+ @Override
+ protected void after() {
+ executor.shutdownNow();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[13/13] james-project git commit: JAMES-2268 Implicitly call
FakeMailetContext.Builder::build
Posted by bt...@apache.org.
JAMES-2268 Implicitly call FakeMailetContext.Builder::build
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/02f9631d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/02f9631d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/02f9631d
Branch: refs/heads/master
Commit: 02f9631de39df832b7305ea3e12f0906dc759fd3
Parents: 56b1ddc
Author: benwa <bt...@linagora.com>
Authored: Thu Dec 21 13:55:23 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:25:18 2017 +0700
----------------------------------------------------------------------
.../org/apache/mailet/base/test/FakeMailetConfig.java | 4 ++++
.../transport/mailets/delivery/LocalDeliveryTest.java | 13 +++----------
2 files changed, 7 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f9631d/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailetConfig.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailetConfig.java b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailetConfig.java
index f0598e5..d86f793 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailetConfig.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailetConfig.java
@@ -58,6 +58,10 @@ public class FakeMailetConfig implements MailetConfig {
return this;
}
+ public Builder mailetContext(FakeMailContext.Builder mailetContext) {
+ return mailetContext(mailetContext.build());
+ }
+
public Builder setProperty(String key, String value) {
this.properties.setProperty(key, value);
return this;
http://git-wip-us.apache.org/repos/asf/james-project/blob/02f9631d/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
index 8b59316..b9ac01d 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
@@ -38,7 +38,6 @@ import org.apache.james.core.MailAddress;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.metrics.api.Metric;
import org.apache.james.metrics.api.MetricFactory;
@@ -53,8 +52,6 @@ import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
-import com.google.common.base.Throwables;
-
public class LocalDeliveryTest {
public static final String RECEIVER_DOMAIN_COM = "receiver@domain.com";
@@ -65,7 +62,7 @@ public class LocalDeliveryTest {
private LocalDelivery testee;
@Before
- public void setUp() {
+ public void setUp() throws Exception {
usersRepository = mock(UsersRepository.class);
mailboxManager = mock(MailboxManager.class);
@@ -76,16 +73,12 @@ public class LocalDeliveryTest {
user = mock(MailboxSession.User.class);
MailboxSession session = mock(MailboxSession.class);
when(session.getPathDelimiter()).thenReturn('.');
- try {
- when(mailboxManager.createSystemSession(any(String.class))).thenReturn(session);
- } catch (MailboxException e) {
- throw Throwables.propagate(e);
- }
+ when(mailboxManager.createSystemSession(any(String.class))).thenReturn(session);
when(session.getUser()).thenReturn(user);
config = FakeMailetConfig.builder()
.mailetName("Local delivery")
- .mailetContext(FakeMailContext.builder().logger(mock(Logger.class)).build())
+ .mailetContext(FakeMailContext.builder().logger(mock(Logger.class)))
.build();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/13] james-project git commit: JAMES-2262 Improve MockSpamD
location
Posted by bt...@apache.org.
JAMES-2262 Improve MockSpamD location
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/71f6fe24
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/71f6fe24
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/71f6fe24
Branch: refs/heads/master
Commit: 71f6fe24844f2662549b4d20d154d43f848cd5a3
Parents: 9c23977
Author: benwa <bt...@linagora.com>
Authored: Fri Dec 22 09:41:54 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
server/mailet/mailets/pom.xml | 12 +-
.../transport/mailets/SpamAssassinTest.java | 4 +-
server/protocols/protocols-smtp/pom.xml | 5 +
.../smtpserver/SpamAssassinHandlerTest.java | 4 +-
.../james/smtpserver/mock/util/MockSpamd.java | 109 -------------------
.../smtpserver/mock/util/MockSpamdTestRule.java | 46 --------
server/testing/pom.xml | 1 -
.../java/org/apache/james/utils/MockSpamd.java | 109 +++++++++++++++++++
.../apache/james/utils/MockSpamdTestRule.java | 46 ++++++++
9 files changed, 166 insertions(+), 170 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/mailet/mailets/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/pom.xml b/server/mailet/mailets/pom.xml
index a8f409c..f269dfa 100644
--- a/server/mailet/mailets/pom.xml
+++ b/server/mailet/mailets/pom.xml
@@ -135,23 +135,15 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>james-server-protocols-library</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
+ <artifactId>james-server-queue-api</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>james-server-protocols-smtp</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
+ <artifactId>james-server-testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>james-server-queue-api</artifactId>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
<artifactId>james-server-util</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 875a4f9..aba82cd 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -24,10 +24,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import javax.mail.MessagingException;
-import org.apache.james.smtpserver.mock.util.MockSpamd;
-import org.apache.james.smtpserver.mock.util.MockSpamdTestRule;
import org.apache.james.util.Port;
import org.apache.james.util.scanner.SpamAssassinInvoker;
+import org.apache.james.utils.MockSpamd;
+import org.apache.james.utils.MockSpamdTestRule;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailetConfig;
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index 2dd30c7..a18c272 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -123,6 +123,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-testing</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-util</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
index cf1b7cc..3016e44 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
@@ -34,9 +34,9 @@ import org.apache.james.protocols.smtp.utils.BaseFakeSMTPSession;
import org.apache.james.smtpserver.fastfail.SpamAssassinHandler;
import org.apache.james.smtpserver.mock.MockMimeMessage;
import org.apache.james.smtpserver.mock.mailet.MockMail;
-import org.apache.james.smtpserver.mock.util.MockSpamd;
-import org.apache.james.smtpserver.mock.util.MockSpamdTestRule;
import org.apache.james.util.scanner.SpamAssassinInvoker;
+import org.apache.james.utils.MockSpamd;
+import org.apache.james.utils.MockSpamdTestRule;
import org.apache.mailet.Mail;
import org.junit.Rule;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
deleted file mode 100644
index 45f6920..0000000
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
+++ /dev/null
@@ -1,109 +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.smtpserver.mock.util;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-import org.apache.commons.io.IOUtils;
-
-import com.google.common.base.Preconditions;
-
-/**
- * This class can be used to run a mocked SPAMD daemon
- */
-public class MockSpamd implements Runnable {
-
- /**
- * Mailcontent which is 100% spam
- */
- public final static String GTUBE = "-SPAM-";
- public final static String NOT_SPAM = "Spam: False ; 3 / 5";
- public final static String SPAM = "Spam: True ; 1000 / 5";
- private BufferedReader in;
- private OutputStream out;
- private Socket spamd;
- private ServerSocket socket;
- private boolean isBinded;
-
-
- /**
- * Init the mocked SPAMD daemon
- *
- * @throws IOException
- */
- public MockSpamd() {
- isBinded = false;
- }
-
- public int getPort() {
- Preconditions.checkState(isBinded, "SpamD mock server is not binded");
- return socket.getLocalPort();
- }
-
- public void bind() throws IOException {
- socket = new ServerSocket(0);
- isBinded = true;
- }
-
- /**
- * @see java.lang.Runnable#run()
- */
- @Override
- public void run() {
-
- try {
- boolean spam = false;
-
- // Accept connections
- spamd = socket.accept();
-
- in = new BufferedReader(new InputStreamReader(spamd.getInputStream()));
- out = spamd.getOutputStream();
-
- String line;
-
- // Parse the message
- while ((line = in.readLine()) != null) {
- if (line.contains(GTUBE)) {
- spam = true;
- }
- }
- if (spam) {
- out.write(SPAM.getBytes());
- out.flush();
- } else {
- out.write(NOT_SPAM.getBytes());
- out.flush();
- }
- } catch (IOException e) {
- // Should not happen
- e.printStackTrace();
- } finally {
- IOUtils.closeQuietly(in);
- IOUtils.closeQuietly(out);
- IOUtils.closeQuietly(spamd);
- IOUtils.closeQuietly(socket);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
deleted file mode 100644
index 4822b8f..0000000
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamdTestRule.java
+++ /dev/null
@@ -1,46 +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.smtpserver.mock.util;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.junit.rules.ExternalResource;
-
-public class MockSpamdTestRule extends ExternalResource {
-
- private ExecutorService executor = Executors.newSingleThreadExecutor();
- private MockSpamd spamd = new MockSpamd();
-
- @Override
- protected void before() throws Throwable {
- spamd.bind();
- executor.execute(spamd);
- }
-
- public int getPort() {
- return spamd.getPort();
- }
-
- @Override
- protected void after() {
- executor.shutdownNow();
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/testing/pom.xml
----------------------------------------------------------------------
diff --git a/server/testing/pom.xml b/server/testing/pom.xml
index 705438a..3014fc8 100644
--- a/server/testing/pom.xml
+++ b/server/testing/pom.xml
@@ -46,7 +46,6 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java b/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
new file mode 100644
index 0000000..896df3c
--- /dev/null
+++ b/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
@@ -0,0 +1,109 @@
+/****************************************************************
+ * 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.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import org.apache.commons.io.IOUtils;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * This class can be used to run a mocked SPAMD daemon
+ */
+public class MockSpamd implements Runnable {
+
+ /**
+ * Mailcontent which is 100% spam
+ */
+ public final static String GTUBE = "-SPAM-";
+ public final static String NOT_SPAM = "Spam: False ; 3 / 5";
+ public final static String SPAM = "Spam: True ; 1000 / 5";
+ private BufferedReader in;
+ private OutputStream out;
+ private Socket spamd;
+ private ServerSocket socket;
+ private boolean isBinded;
+
+
+ /**
+ * Init the mocked SPAMD daemon
+ *
+ * @throws IOException
+ */
+ public MockSpamd() {
+ isBinded = false;
+ }
+
+ public int getPort() {
+ Preconditions.checkState(isBinded, "SpamD mock server is not binded");
+ return socket.getLocalPort();
+ }
+
+ public void bind() throws IOException {
+ socket = new ServerSocket(0);
+ isBinded = true;
+ }
+
+ /**
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+
+ try {
+ boolean spam = false;
+
+ // Accept connections
+ spamd = socket.accept();
+
+ in = new BufferedReader(new InputStreamReader(spamd.getInputStream()));
+ out = spamd.getOutputStream();
+
+ String line;
+
+ // Parse the message
+ while ((line = in.readLine()) != null) {
+ if (line.contains(GTUBE)) {
+ spam = true;
+ }
+ }
+ if (spam) {
+ out.write(SPAM.getBytes());
+ out.flush();
+ } else {
+ out.write(NOT_SPAM.getBytes());
+ out.flush();
+ }
+ } catch (IOException e) {
+ // Should not happen
+ e.printStackTrace();
+ } finally {
+ IOUtils.closeQuietly(in);
+ IOUtils.closeQuietly(out);
+ IOUtils.closeQuietly(spamd);
+ IOUtils.closeQuietly(socket);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/71f6fe24/server/testing/src/main/java/org/apache/james/utils/MockSpamdTestRule.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/MockSpamdTestRule.java b/server/testing/src/main/java/org/apache/james/utils/MockSpamdTestRule.java
new file mode 100644
index 0000000..ea746df
--- /dev/null
+++ b/server/testing/src/main/java/org/apache/james/utils/MockSpamdTestRule.java
@@ -0,0 +1,46 @@
+/****************************************************************
+ * 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.utils;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.junit.rules.ExternalResource;
+
+public class MockSpamdTestRule extends ExternalResource {
+
+ private ExecutorService executor = Executors.newSingleThreadExecutor();
+ private MockSpamd spamd = new MockSpamd();
+
+ @Override
+ protected void before() throws Throwable {
+ spamd.bind();
+ executor.execute(spamd);
+ }
+
+ public int getPort() {
+ return spamd.getPort();
+ }
+
+ @Override
+ protected void after() {
+ executor.shutdownNow();
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/13] james-project git commit: JAMES-2262 Ensure MockSpamD binds a
random port
Posted by bt...@apache.org.
JAMES-2262 Ensure MockSpamD binds a random port
Without being vulnerable to race conditions.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1ef7dafc
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1ef7dafc
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1ef7dafc
Branch: refs/heads/master
Commit: 1ef7dafcd1e17b6e64c3c8649ccb111e202eb4ef
Parents: 03b2633
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 18 08:30:10 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:28 2017 +0700
----------------------------------------------------------------------
.../transport/mailets/SpamAssassinTest.java | 19 +++++++++---------
.../smtpserver/SpamAssassinHandlerTest.java | 21 ++++++++------------
.../james/smtpserver/mock/util/MockSpamd.java | 20 ++++++++++++++++---
3 files changed, 34 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ef7dafc/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index e49d981..82279c0 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import javax.mail.MessagingException;
-import org.apache.james.protocols.lib.PortUtil;
import org.apache.james.smtpserver.mock.util.MockSpamd;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Mail;
@@ -130,13 +129,13 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteSpamAttributeOnMail() throws Exception {
- int port = PortUtil.getNonPrivilegedPort();
- new Thread(new MockSpamd(port)).start();
+ MockSpamd spamd = new MockSpamd();
+ new Thread(spamd).start();
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
- .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(spamd.getPort()))
.build();
mailet.init(mailetConfiguration);
@@ -157,13 +156,13 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteMessageAsNotSpamWhenNotSpam() throws Exception {
- int port = PortUtil.getNonPrivilegedPort();
- new Thread(new MockSpamd(port)).start();
+ MockSpamd spamd = new MockSpamd();
+ new Thread(spamd).start();
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
- .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(spamd.getPort()))
.build();
mailet.init(mailetConfiguration);
@@ -183,13 +182,13 @@ public class SpamAssassinTest {
@Test
public void serviceShouldWriteMessageAsSpamWhenSpam() throws Exception {
- int port = PortUtil.getNonPrivilegedPort();
- new Thread(new MockSpamd(port)).start();
+ MockSpamd spamd = new MockSpamd();
+ new Thread(spamd).start();
FakeMailetConfig mailetConfiguration = FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_HOST, "localhost")
- .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(port))
+ .setProperty(SpamAssassin.SPAMD_PORT, String.valueOf(spamd.getPort()))
.build();
mailet.init(mailetConfiguration);
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ef7dafc/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
index d9c7dea..bc94b6a 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SpamAssassinHandlerTest.java
@@ -27,7 +27,6 @@ import java.util.HashMap;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.james.protocols.lib.PortUtil;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.protocols.smtp.hook.HookResult;
import org.apache.james.protocols.smtp.hook.HookReturnCode;
@@ -108,9 +107,7 @@ public class SpamAssassinHandlerTest {
@Test
public void testNonSpam() throws IOException, MessagingException {
-
- int port = PortUtil.getNonPrivilegedPort();
- MockSpamd spamd = new MockSpamd(port);
+ MockSpamd spamd = new MockSpamd();
new Thread(spamd).start();
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage("test")));
@@ -118,7 +115,7 @@ public class SpamAssassinHandlerTest {
SpamAssassinHandler handler = new SpamAssassinHandler();
handler.setSpamdHost(SPAMD_HOST);
- handler.setSpamdPort(port);
+ handler.setSpamdPort(spamd.getPort());
handler.setSpamdRejectionHits(200.0);
HookResult response = handler.onMessage(session, mockedMail);
@@ -130,16 +127,15 @@ public class SpamAssassinHandlerTest {
@Test
public void testSpam() throws IOException, MessagingException {
-
- int port = PortUtil.getNonPrivilegedPort();
- new Thread(new MockSpamd(port)).start();
+ MockSpamd spamd = new MockSpamd();
+ new Thread(spamd).start();
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage(MockSpamd.GTUBE)));
SpamAssassinHandler handler = new SpamAssassinHandler();
handler.setSpamdHost(SPAMD_HOST);
- handler.setSpamdPort(port);
+ handler.setSpamdPort(spamd.getPort());
handler.setSpamdRejectionHits(2000.0);
HookResult response = handler.onMessage(session, mockedMail);
@@ -150,16 +146,15 @@ public class SpamAssassinHandlerTest {
@Test
public void testSpamReject() throws IOException, MessagingException {
-
- int port = PortUtil.getNonPrivilegedPort();
- new Thread(new MockSpamd(port)).start();
+ MockSpamd spamd = new MockSpamd();
+ new Thread(spamd).start();
SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage(MockSpamd.GTUBE)));
SpamAssassinHandler handler = new SpamAssassinHandler();
handler.setSpamdHost(SPAMD_HOST);
- handler.setSpamdPort(port);
+ handler.setSpamdPort(spamd.getPort());
handler.setSpamdRejectionHits(200.0);
HookResult response = handler.onMessage(session, mockedMail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ef7dafc/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
index a0ff6f9..45f6920 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
@@ -27,6 +27,8 @@ import java.net.Socket;
import org.apache.commons.io.IOUtils;
+import com.google.common.base.Preconditions;
+
/**
* This class can be used to run a mocked SPAMD daemon
*/
@@ -42,6 +44,7 @@ public class MockSpamd implements Runnable {
private OutputStream out;
private Socket spamd;
private ServerSocket socket;
+ private boolean isBinded;
/**
@@ -49,15 +52,26 @@ public class MockSpamd implements Runnable {
*
* @throws IOException
*/
- public MockSpamd(int port) throws IOException {
- socket = new ServerSocket(port);
+ public MockSpamd() {
+ isBinded = false;
+ }
+
+ public int getPort() {
+ Preconditions.checkState(isBinded, "SpamD mock server is not binded");
+ return socket.getLocalPort();
}
-
+
+ public void bind() throws IOException {
+ socket = new ServerSocket(0);
+ isBinded = true;
+ }
+
/**
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
+
try {
boolean spam = false;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/13] james-project git commit: JAMES-2262 Improve MockSpamd code
quality
Posted by bt...@apache.org.
JAMES-2262 Improve MockSpamd code quality
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/56b1ddc1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/56b1ddc1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/56b1ddc1
Branch: refs/heads/master
Commit: 56b1ddc1dade10286fec931052c66cb458b9ba67
Parents: 2bd8503
Author: benwa <bt...@linagora.com>
Authored: Fri Dec 22 16:00:19 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/utils/MockSpamd.java | 75 +++++++++-----------
1 file changed, 34 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/56b1ddc1/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
----------------------------------------------------------------------
diff --git a/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java b/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
index 896df3c..cbe7159 100644
--- a/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
+++ b/server/testing/src/main/java/org/apache/james/utils/MockSpamd.java
@@ -18,14 +18,19 @@
****************************************************************/
package org.apache.james.utils;
+import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
+import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
@@ -33,6 +38,7 @@ import com.google.common.base.Preconditions;
* This class can be used to run a mocked SPAMD daemon
*/
public class MockSpamd implements Runnable {
+ private static final Logger LOGGER = LoggerFactory.getLogger(MockSpamd.class);
/**
* Mailcontent which is 100% spam
@@ -40,18 +46,10 @@ public class MockSpamd implements Runnable {
public final static String GTUBE = "-SPAM-";
public final static String NOT_SPAM = "Spam: False ; 3 / 5";
public final static String SPAM = "Spam: True ; 1000 / 5";
- private BufferedReader in;
- private OutputStream out;
- private Socket spamd;
+
private ServerSocket socket;
private boolean isBinded;
-
- /**
- * Init the mocked SPAMD daemon
- *
- * @throws IOException
- */
public MockSpamd() {
isBinded = false;
}
@@ -66,44 +64,39 @@ public class MockSpamd implements Runnable {
isBinded = true;
}
- /**
- * @see java.lang.Runnable#run()
- */
@Override
public void run() {
+ try (Socket spamd = socket.accept();
+ BufferedReader in = new BufferedReader(new InputStreamReader(spamd.getInputStream()));
+ OutputStream out = spamd.getOutputStream()) {
- try {
- boolean spam = false;
-
- // Accept connections
- spamd = socket.accept();
-
- in = new BufferedReader(new InputStreamReader(spamd.getInputStream()));
- out = spamd.getOutputStream();
-
- String line;
-
- // Parse the message
- while ((line = in.readLine()) != null) {
- if (line.contains(GTUBE)) {
- spam = true;
- }
- }
- if (spam) {
- out.write(SPAM.getBytes());
- out.flush();
- } else {
- out.write(NOT_SPAM.getBytes());
- out.flush();
- }
+ handleRequest(in, out);
} catch (IOException e) {
- // Should not happen
- e.printStackTrace();
+ LOGGER.error("Exception while handling answer", e);
} finally {
- IOUtils.closeQuietly(in);
- IOUtils.closeQuietly(out);
- IOUtils.closeQuietly(spamd);
IOUtils.closeQuietly(socket);
}
}
+
+ private void handleRequest(BufferedReader in, OutputStream out) throws IOException {
+ if (isSpam(in)) {
+ out.write(SPAM.getBytes());
+ } else {
+ out.write(NOT_SPAM.getBytes());
+ }
+ out.flush();
+ }
+
+ private boolean isSpam(BufferedReader in) throws IOException {
+ try {
+ return in.lines()
+ .anyMatch(line -> line.contains(GTUBE));
+ } finally {
+ consume(in);
+ }
+ }
+
+ private void consume(BufferedReader in) throws IOException {
+ IOUtils.copy(in, NULL_OUTPUT_STREAM, StandardCharsets.UTF_8);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/13] james-project git commit: JAMES-2262 Add integration testing
for SpamAssassin
Posted by bt...@apache.org.
JAMES-2262 Add integration testing for SpamAssassin
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0be23436
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0be23436
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0be23436
Branch: refs/heads/master
Commit: 0be23436f7df9ac735a27f0be0dbf09c64d33b05
Parents: 4d9d568
Author: quynhn <qn...@linagora.com>
Authored: Thu Dec 14 16:54:19 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:28 2017 +0700
----------------------------------------------------------------------
.../james/util/streams/ContainerNames.java | 1 +
.../transport/mailets/SpamAssassinTest.java | 158 ++++++++++++-------
2 files changed, 104 insertions(+), 55 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0be23436/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java b/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
index 908cea2..2328431 100644
--- a/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
@@ -25,4 +25,5 @@ public interface ContainerNames {
String ELASTICSEARCH = "elasticsearch:2.2.2";
String NGINX = "nginx:1.7.1";
String TIKA = "logicalspark/docker-tikaserver:1.15rc2";
+ String SPAMASSASSIN = "dinkel/spamassassin:3.4.0";
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0be23436/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 34c9a36..8eb6fea 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -18,24 +18,21 @@
****************************************************************/
package org.apache.james.transport.mailets;
-import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson;
+import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
+import static org.apache.james.MemoryJamesServerMain.SMTP_ONLY_MODULE;
import static org.assertj.core.api.Assertions.assertThat;
-import java.util.Optional;
-
import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
-import org.apache.james.jmap.mailet.VacationMailet;
import org.apache.james.mailets.TemporaryJamesServer;
import org.apache.james.mailets.configuration.CommonProcessors;
import org.apache.james.mailets.configuration.MailetConfiguration;
import org.apache.james.mailets.configuration.MailetContainer;
import org.apache.james.mailets.configuration.ProcessorConfiguration;
-import org.apache.james.transport.mailets.amqp.AmqpRule;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
-import org.apache.james.transport.matchers.SMTPAuthSuccessful;
+import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.james.util.streams.ContainerNames;
import org.apache.james.util.streams.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
@@ -49,36 +46,37 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.rules.TemporaryFolder;
+import org.testcontainers.containers.wait.HostPortWaitStrategy;
import com.jayway.awaitility.Awaitility;
import com.jayway.awaitility.Duration;
+import com.jayway.awaitility.core.ConditionFactory;
-public class ContactExtractorTest {
+public class SpamAssassinTest {
+ private static final String LOCALHOST_IP = "127.0.0.1";
+ private static final int IMAP_PORT = 1143;
+ private static final int SMTP_PORT = 1025;
public static final String JAMES_ORG = "james.org";
public static final String SENDER = "sender@" + JAMES_ORG;
public static final String TO = "to@" + JAMES_ORG;
- public static final String TO2 = "to2@" + JAMES_ORG;
- public static final String CC = "cc@" + JAMES_ORG;
- public static final String CC2 = "cc2@" + JAMES_ORG;
- public static final String BCC = "bcc@" + JAMES_ORG;
- public static final String BCC2 = "bcc2@" + JAMES_ORG;
public static final String PASSWORD = "secret";
- public static final String EXCHANGE = "collector:email";
- public static final String ROUTING_KEY = "";
- public SwarmGenericContainer rabbit = new SwarmGenericContainer(ContainerNames.RABBITMQ);
- public AmqpRule amqpRule = new AmqpRule(rabbit, EXCHANGE, ROUTING_KEY);
- public TemporaryFolder folder = new TemporaryFolder();
+ public SwarmGenericContainer spamAssassinContainer = new SwarmGenericContainer(ContainerNames.SPAMASSASSIN)
+ .withExposedPorts(783)
+ .withAffinityToContainer()
+ .waitingFor(new HostPortWaitStrategy());
+
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
- public RuleChain chain = RuleChain.outerRule(rabbit).around(amqpRule).around(folder);
+ public RuleChain chain = RuleChain.outerRule(temporaryFolder).around(spamAssassinContainer);
private TemporaryJamesServer jamesServer;
+ private ConditionFactory calmlyAwait;
@Before
public void setup() throws Exception {
- String attribute = "ExtractedContacts";
MailetContainer mailets = MailetContainer
.builder()
.threads(5)
@@ -89,16 +87,16 @@ public class ContactExtractorTest {
ProcessorConfiguration.builder()
.state("transport")
.addMailet(MailetConfiguration.builder()
- .matcher(SMTPAuthSuccessful.class)
- .mailet(ContactExtractor.class)
- .addProperty(ContactExtractor.Configuration.ATTRIBUTE, attribute)
+ .matcher(All.class)
+ .mailet(SpamAssassin.class)
+ .addProperty(SpamAssassin.SPAMD_HOST, spamAssassinContainer.getContainerIp())
.build())
.addMailet(MailetConfiguration.builder()
.matcher(All.class)
- .mailet(AmqpForwardAttribute.class)
- .addProperty(AmqpForwardAttribute.URI_PARAMETER_NAME, amqpRule.getAmqpUri())
- .addProperty(AmqpForwardAttribute.EXCHANGE_PARAMETER_NAME, EXCHANGE)
- .addProperty(AmqpForwardAttribute.ATTRIBUTE_PARAMETER_NAME, attribute)
+ .mailet(MailAttributesToMimeHeaders.class)
+ .addProperty("simplemapping",
+ SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ";" + SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + "," +
+ SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ";" + SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME)
.build())
.addMailet(MailetConfiguration.builder()
.matcher(All.class)
@@ -107,24 +105,20 @@ public class ContactExtractorTest {
.build())
.addMailet(MailetConfiguration.builder()
.matcher(RecipientIsLocal.class)
- .mailet(VacationMailet.class)
- .build())
- .addMailet(MailetConfiguration.builder()
- .matcher(RecipientIsLocal.class)
.mailet(LocalDelivery.class)
.build())
.build())
.build();
- jamesServer = TemporaryJamesServer.builder().build(folder, mailets);
+ jamesServer = TemporaryJamesServer.builder()
+ .withBase(SMTP_AND_IMAP_MODULE)
+ .build(temporaryFolder, mailets);
+ Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
+ calmlyAwait = Awaitility.with().pollInterval(slowPacedPollInterval).and().with().pollDelay(slowPacedPollInterval).await();
+
DataProbeImpl probe = jamesServer.getProbe(DataProbeImpl.class);
probe.addDomain(JAMES_ORG);
probe.addUser(SENDER, PASSWORD);
probe.addUser(TO, PASSWORD);
- probe.addUser(TO2, PASSWORD);
- probe.addUser(CC, PASSWORD);
- probe.addUser(CC2, PASSWORD);
- probe.addUser(BCC, PASSWORD);
- probe.addUser(BCC2, PASSWORD);
}
@After
@@ -133,35 +127,89 @@ public class ContactExtractorTest {
}
@Test
- public void recipientsShouldBePublishedToAmqpWhenSendingEmail() throws Exception {
+ public void spamAssassinShouldAppendNewHeaderOnMessage() throws Exception {
+ MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+ .setSender(SENDER)
+ .addToRecipient(TO)
+ .setSubject("This is the subject")
+ .setText("This is -SPAM- my email")
+ .build();
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(message)
+ .sender(new MailAddress(SENDER))
+ .recipients(new MailAddress(TO))
+ .build();
+
+ try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
+ IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
+
+ messageSender.sendMessage(mail);
+
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
+
+ String receivedHeaders = imapMessageReader.readFirstMessageHeadersInInbox(TO, PASSWORD);
+
+ assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME, SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME);
+ }
+ }
+
+ @Test
+ public void spamAssassinShouldAppendNewHeaderWhichDetectIsSpamWhenSpamMessage() throws Exception {
+ String spamContent = "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X";
MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
.setSender(SENDER)
- .addToRecipient(TO, "John To2 <" + TO2 + ">")
- .addCcRecipient(CC, "John Cc2 <" + CC2 + ">")
- .addBccRecipient(BCC, "John Bcc2 <" + BCC2 + ">")
- .setSubject("Contact collection Rocks")
- .setText("This is my email")
+ .addToRecipient(TO)
+ .setSubject("This is the subject")
+ .setText(spamContent)
.build();
FakeMail mail = FakeMail.builder()
.mimeMessage(message)
.sender(new MailAddress(SENDER))
- .recipients(new MailAddress(TO), new MailAddress(TO2), new MailAddress(CC), new MailAddress(CC2), new MailAddress(BCC), new MailAddress(BCC2))
+ .recipients(new MailAddress(TO))
.build();
- try (SMTPMessageSender messageSender = SMTPMessageSender.authentication("localhost", 1025, JAMES_ORG, SENDER, PASSWORD);
- IMAPMessageReader imap = new IMAPMessageReader("localhost", 1143)) {
+
+ try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
+ IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
messageSender.sendMessage(mail);
- Awaitility.await().pollDelay(Duration.FIVE_HUNDRED_MILLISECONDS)
- .atMost(Duration.ONE_MINUTE)
- .until(() -> imap.userReceivedMessage(TO, PASSWORD));
-
- Optional<String> actual = amqpRule.readContent();
- assertThat(actual).isNotEmpty();
- assertThatJson(actual.get()).isEqualTo("{"
- + "\"userEmail\" : \"sender@james.org\", "
- + "\"emails\" : [ \"to@james.org\", \"John To2 <to...@james.org>\", \"cc@james.org\", \"John Cc2 <cc...@james.org>\", \"bcc@james.org\", \"John Bcc2 <bc...@james.org>\" ]"
- + "}");
+
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
+
+ String receivedHeaders = imapMessageReader.readFirstMessageInInbox(TO, PASSWORD);
+
+ assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": YES");
+ assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": Yes");
}
}
+ @Test
+ public void spamAssassinShouldAppendNewHeaderWhichNoWhenNonSpamMessage() throws Exception {
+ MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
+ .setSender(SENDER)
+ .addToRecipient(TO)
+ .setSubject("This is the subject")
+ .setText("This is the content")
+ .build();
+ FakeMail mail = FakeMail.builder()
+ .mimeMessage(message)
+ .sender(new MailAddress(SENDER))
+ .recipients(new MailAddress(TO))
+ .build();
+
+ try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_ORG);
+ IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
+
+ messageSender.sendMessage(mail);
+
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(TO, PASSWORD));
+
+ String receivedHeaders = imapMessageReader.readFirstMessageInInbox(TO, PASSWORD);
+
+ assertThat(receivedHeaders).contains(SpamAssassinInvoker.FLAG_MAIL_ATTRIBUTE_NAME + ": NO");
+ assertThat(receivedHeaders).contains(SpamAssassinInvoker.STATUS_MAIL_ATTRIBUTE_NAME + ": No");
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/13] james-project git commit: JAMES-2268 Functionnal style and
tests for PostmasterAlias
Posted by bt...@apache.org.
JAMES-2268 Functionnal style and tests for PostmasterAlias
PostmasterAlias was altering directly mail recipients and thus triggered an error while modifying Immutable collection
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dfd3f420
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dfd3f420
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dfd3f420
Branch: refs/heads/master
Commit: dfd3f420bfe4cb6ad38150034380221d793aa6a8
Parents: 02f9631
Author: benwa <bt...@linagora.com>
Authored: Thu Dec 21 14:00:29 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:25:18 2017 +0700
----------------------------------------------------------------------
.../transport/mailets/PostmasterAlias.java | 48 ++++---
.../transport/mailets/PostmasterAliasTest.java | 125 +++++++++++++++++++
2 files changed, 147 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfd3f420/mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
index 04c8c72..3366c86 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
@@ -17,26 +17,24 @@
* under the License. *
****************************************************************/
-
-
package org.apache.james.transport.mailets;
import java.util.Collection;
-import java.util.Vector;
+import java.util.stream.Stream;
import javax.mail.MessagingException;
-import org.apache.mailet.Mail;
import org.apache.james.core.MailAddress;
-import org.apache.mailet.MailetContext;
+import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
+import com.github.steveash.guavate.Guavate;
+
/**
* Rewrites recipient addresses to make sure email for the postmaster is
* always handled. This mailet is silently inserted at the top of the root
* spool processor. All recipients mapped to postmaster@<servernames> are
* changed to the postmaster account as specified in the server conf.
- *
*/
public class PostmasterAlias extends GenericMailet {
@@ -49,30 +47,28 @@ public class PostmasterAlias extends GenericMailet {
* @throws MessagingException if an error is encountered while modifying the message
*/
public void service(Mail mail) throws MessagingException {
- Collection<MailAddress> recipients = mail.getRecipients();
- Collection<MailAddress> recipientsToRemove = null;
- MailetContext mailetContext = getMailetContext();
- boolean postmasterAddressed = false;
+ Collection<MailAddress> postmasterAliases = mail.getRecipients()
+ .stream()
+ .filter(this::isPostmasterAlias)
+ .collect(Guavate.toImmutableList());
- for (MailAddress addr : recipients) {
- if (addr.getLocalPart().equalsIgnoreCase("postmaster") &&
- mailetContext.isLocalServer(addr.getDomain()) && !mailetContext.isLocalEmail(addr)) {
- //Should remove this address... we want to replace it with
- // the server's postmaster address
- if (recipientsToRemove == null) {
- recipientsToRemove = new Vector<>();
- }
- recipientsToRemove.add(addr);
- //Flag this as having found the postmaster
- postmasterAddressed = true;
- }
- }
- if (postmasterAddressed) {
- recipients.removeAll(recipientsToRemove);
- recipients.add(getMailetContext().getPostmaster());
+ if (!postmasterAliases.isEmpty()) {
+ mail.setRecipients(
+ Stream.concat(
+ mail.getRecipients()
+ .stream()
+ .filter(address -> !postmasterAliases.contains(address)),
+ Stream.of(getMailetContext().getPostmaster()))
+ .collect(Guavate.toImmutableSet()));
}
}
+ private boolean isPostmasterAlias(MailAddress addr) {
+ return addr.getLocalPart().equalsIgnoreCase("postmaster")
+ && getMailetContext().isLocalServer(addr.getDomain())
+ && !getMailetContext().isLocalEmail(addr);
+ }
+
/**
* Return a string describing this mailet.
*
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfd3f420/mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java
new file mode 100644
index 0000000..f485158
--- /dev/null
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java
@@ -0,0 +1,125 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.james.core.MailAddress;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.MailAddressFixture;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailContext;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.junit.Before;
+import org.junit.Test;
+
+public class PostmasterAliasTest {
+ private PostmasterAlias testee;
+ private MailAddress postmaster;
+ private MailAddress postmasterAlias;
+
+ @Before
+ public void setUp() throws Exception {
+ postmaster = new MailAddress("admin@localhost");
+ postmasterAlias = new MailAddress("postmaster@localhost");
+ testee = new PostmasterAlias();
+ testee.init(FakeMailetConfig.builder()
+ .mailetContext(FakeMailContext.builder()
+ .postmaster(postmaster))
+ .build());
+ }
+
+ @Test
+ public void serviceShouldAcceptMailsWithNoRecipients() throws Exception {
+ Mail mail = FakeMail.builder().build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).isEmpty();
+ }
+
+ @Test
+ public void serviceShouldNotAlterMailsForPostmaster() throws Exception {
+ Mail mail = FakeMail.builder()
+ .recipient(postmaster)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(postmaster);
+ }
+
+ @Test
+ public void serviceShouldNotAlterMailForOtherUsers() throws Exception {
+ Mail mail = FakeMail.builder()
+ .recipient(MailAddressFixture.ANY_AT_JAMES)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(MailAddressFixture.ANY_AT_JAMES);
+ }
+
+ @Test
+ public void serviceShouldNotAlterPostmasterAliasWhenForOtherDomains() throws Exception {
+ MailAddress otherDomainPostmaster = new MailAddress("postmaster@otherDomain");
+ Mail mail = FakeMail.builder()
+ .recipient(otherDomainPostmaster)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(otherDomainPostmaster);
+ }
+
+ @Test
+ public void serviceShouldRewritePostmasterAlias() throws Exception {
+ Mail mail = FakeMail.builder()
+ .recipient(postmasterAlias)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(postmaster);
+ }
+
+ @Test
+ public void serviceShouldNotAlterOtherRecipientsWhenRewritingPostmaster() throws Exception {
+ Mail mail = FakeMail.builder()
+ .recipients(postmasterAlias, MailAddressFixture.ANY_AT_JAMES)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(postmaster, MailAddressFixture.ANY_AT_JAMES);
+ }
+
+ @Test
+ public void serviceShouldNotDuplicatePostmaster() throws Exception {
+ Mail mail = FakeMail.builder()
+ .recipients(postmasterAlias, postmaster)
+ .build();
+
+ testee.service(mail);
+
+ assertThat(mail.getRecipients()).containsOnly(postmaster);
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/13] james-project git commit: JAMES-2262 SpamAssassin is no more
experimental
Posted by bt...@apache.org.
JAMES-2262 SpamAssassin is no more experimental
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4a0c630c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4a0c630c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4a0c630c
Branch: refs/heads/master
Commit: 4a0c630c6fe89b4df4ba858b41c81cb77381e731
Parents: 27b8908
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 18 17:10:42 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
.../main/java/org/apache/james/transport/mailets/SpamAssassin.java | 2 --
1 file changed, 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/4a0c630c/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
index 5d01cd5..e1ec544 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
@@ -27,7 +27,6 @@ import javax.mail.internet.MimeMessage;
import org.apache.james.transport.mailets.managesieve.ManageSieveMailet;
import org.apache.james.util.Port;
import org.apache.james.util.scanner.SpamAssassinInvoker;
-import org.apache.mailet.Experimental;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
import org.apache.mailet.base.MailetUtil;
@@ -61,7 +60,6 @@ import com.google.common.base.Strings;
* <spamdPort>783</spamdPort>
* </pre>
*/
-@Experimental
public class SpamAssassin extends GenericMailet {
private static final Logger LOGGER = LoggerFactory.getLogger(ManageSieveMailet.class);
public static final String SPAMD_HOST = "spamdHost";
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/13] james-project git commit: JAMES-2262 Improve docker helpers
naming
Posted by bt...@apache.org.
JAMES-2262 Improve docker helpers naming
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9c239771
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9c239771
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9c239771
Branch: refs/heads/master
Commit: 9c239771a997982e5c80fa9a392c71e54f66ad3b
Parents: 4a0c630
Author: benwa <bt...@linagora.com>
Authored: Fri Dec 22 09:37:00 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
.../es/ClientProviderImplConnectionTest.java | 2 +-
.../james/mailbox/tika/TikaContainer.java | 6 +-
.../apache/james/mpt/smtp/ForwardSmtpTest.java | 6 +-
.../apache/james/DockerElasticSearchRule.java | 6 +-
.../apache/james/metric/es/ESReporterTest.java | 6 +-
.../org/apache/james/util/docker/Images.java | 29 ++++
.../util/docker/SwarmGenericContainer.java | 158 ++++++++++++++++++
.../james/util/streams/ContainerNames.java | 29 ----
.../util/streams/SwarmGenericContainer.java | 159 -------------------
.../james/user/ldap/LdapGenericContainer.java | 2 +-
.../GatewayRemoteDeliveryIntegrationTest.java | 6 +-
.../james/smtp/SmtpAuthorizedAddressesTest.java | 2 +-
.../mailets/AmqpForwardAttachmentTest.java | 6 +-
.../transport/mailets/ContactExtractorTest.java | 6 +-
.../transport/mailets/GroupMappingTest.java | 6 +-
.../mailets/ICSAttachmentWorkflowTest.java | 6 +-
.../transport/mailets/SpamAssassinTest.java | 7 +-
.../james/transport/mailets/amqp/AmqpRule.java | 2 +-
.../org/apache/james/jmap/ContainerTest.java | 6 +-
.../jmap/VacationRelayIntegrationTest.java | 6 +-
20 files changed, 227 insertions(+), 229 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
index 5b64dd4..4fbe271 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
@@ -21,7 +21,7 @@ package org.apache.james.backends.es;
import java.util.concurrent.TimeUnit;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Ignore;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
----------------------------------------------------------------------
diff --git a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
index adb451b..8bb7733 100644
--- a/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
+++ b/mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
@@ -21,8 +21,8 @@ package org.apache.james.mailbox.tika;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.rules.ExternalResource;
import org.testcontainers.containers.wait.Wait;
@@ -36,7 +36,7 @@ public class TikaContainer extends ExternalResource {
private final SwarmGenericContainer tika;
public TikaContainer() {
- tika = new SwarmGenericContainer(ContainerNames.TIKA)
+ tika = new SwarmGenericContainer(Images.TIKA)
.withExposedPorts(DEFAULT_TIKA_PORT)
.waitingFor(Wait.forHttp("/tika"))
.withStartupTimeout(Duration.ofSeconds(30));
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/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 954ebd2..41f2ddf 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
@@ -27,8 +27,8 @@ import java.net.InetAddress;
import java.util.Locale;
import org.apache.james.mpt.script.SimpleScriptedTestProtocol;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -52,7 +52,7 @@ public abstract class ForwardSmtpTest {
public static final String PASSWORD = "secret";
private final TemporaryFolder folder = new TemporaryFolder();
- private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(ContainerNames.FAKE_SMTP)
+ private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
.withExposedPorts(25)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy());
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
index 06b5d44..c6c0679 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
@@ -22,8 +22,8 @@ package org.apache.james;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.modules.mailbox.ElasticSearchConfiguration;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
@@ -60,7 +60,7 @@ public class DockerElasticSearchRule implements GuiceModuleTestRule {
}
}
- private SwarmGenericContainer elasticSearchContainer = new SwarmGenericContainer(ContainerNames.ELASTICSEARCH)
+ private SwarmGenericContainer elasticSearchContainer = new SwarmGenericContainer(Images.ELASTICSEARCH)
.withExposedPorts(ELASTIC_SEARCH_HTTP_PORT, ELASTIC_SEARCH_PORT);
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
----------------------------------------------------------------------
diff --git a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
index 3cd77bd..14edded 100644
--- a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
@@ -31,8 +31,8 @@ import org.apache.james.metrics.api.TimeMetric;
import org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
import org.apache.james.metrics.es.ESMetricReporter;
import org.apache.james.metrics.es.ESReporterConfiguration;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.After;
@@ -53,7 +53,7 @@ public class ESReporterTest {
public static final int ES_HTTP_PORT = 9200;
@Rule
- public SwarmGenericContainer esContainer = new SwarmGenericContainer(ContainerNames.ELASTICSEARCH)
+ public SwarmGenericContainer esContainer = new SwarmGenericContainer(Images.ELASTICSEARCH)
.withAffinityToContainer()
.withExposedPorts(ES_HTTP_PORT, ES_APPLICATIVE_PORT);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/util-java8/src/test/java/org/apache/james/util/docker/Images.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/docker/Images.java b/server/container/util-java8/src/test/java/org/apache/james/util/docker/Images.java
new file mode 100644
index 0000000..7b75b45
--- /dev/null
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/docker/Images.java
@@ -0,0 +1,29 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.util.docker;
+
+public interface Images {
+ String FAKE_SMTP = "weave/rest-smtp-sink:latest";
+ String RABBITMQ = "rabbitmq:3";
+ String ELASTICSEARCH = "elasticsearch:2.2.2";
+ String NGINX = "nginx:1.7.1";
+ String TIKA = "logicalspark/docker-tikaserver:1.15rc2";
+ String SPAMASSASSIN = "dinkel/spamassassin:3.4.0";
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/util-java8/src/test/java/org/apache/james/util/docker/SwarmGenericContainer.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/docker/SwarmGenericContainer.java b/server/container/util-java8/src/test/java/org/apache/james/util/docker/SwarmGenericContainer.java
new file mode 100644
index 0000000..0114a4e
--- /dev/null
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/docker/SwarmGenericContainer.java
@@ -0,0 +1,158 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.util.docker;
+
+import java.net.Socket;
+import java.time.Duration;
+import java.util.List;
+
+import javax.net.SocketFactory;
+
+import org.junit.Assume;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.DockerClientFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.wait.WaitStrategy;
+import org.testcontainers.images.builder.ImageFromDockerfile;
+import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+import com.github.dockerjava.api.command.InspectContainerResponse;
+import com.google.common.base.Strings;
+
+public class SwarmGenericContainer implements TestRule {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SwarmGenericContainer.class);
+ private static final String DOCKER_CONTAINER = "DOCKER_CONTAINER";
+ private static final String NO_DOCKER_ENVIRONMENT = "Could not find a valid Docker environment.";
+ private static final String SKIPPING_TEST_CAUTION = "Skipping all docker tests as no Docker environment was found";
+
+ private GenericContainer<?> container;
+
+ public SwarmGenericContainer(String dockerImageName) {
+ try {
+ this.container = new GenericContainer<>(dockerImageName);
+ } catch (IllegalStateException e) {
+ logAndCheckSkipTest(e);
+ }
+ }
+
+ public SwarmGenericContainer(ImageFromDockerfile imageFromDockerfile) {
+ try {
+ this.container = new GenericContainer<>(imageFromDockerfile);
+ } catch (IllegalStateException e) {
+ logAndCheckSkipTest(e);
+ }
+ }
+ private void logAndCheckSkipTest(IllegalStateException e) {
+ LOGGER.error("Cannot initial a docker container", e);
+ if (e.getMessage().startsWith(NO_DOCKER_ENVIRONMENT)) {
+ Assume.assumeTrue(SKIPPING_TEST_CAUTION, false);
+ }
+ }
+
+ public SwarmGenericContainer withAffinityToContainer() {
+ String containerEnv = System.getenv(DOCKER_CONTAINER);
+ if (Strings.isNullOrEmpty(containerEnv)) {
+ LOGGER.warn("'DOCKER_CONTAINER' environment variable not found, dockering without affinity");
+ return this;
+ }
+ List<String> envVariables = container.getEnv();
+ envVariables.add("affinity:container==" + container);
+ container.setEnv(envVariables);
+ return this;
+ }
+
+ public SwarmGenericContainer withEnv(String key, String value) {
+ container.addEnv(key, value);
+ return this;
+ }
+
+ public SwarmGenericContainer withExposedPorts(Integer... ports) {
+ container.withExposedPorts(ports);
+ return this;
+ }
+
+ public SwarmGenericContainer portBinding(int hostPort, int dockerPort) {
+ container.setPortBindings(ImmutableList.of("0.0.0.0:" + hostPort + ":" + dockerPort));
+ return this;
+ }
+
+ public SwarmGenericContainer waitingFor(WaitStrategy waitStrategy) {
+ container.waitingFor(waitStrategy);
+ return this;
+ }
+
+ public SwarmGenericContainer withStartupTimeout(Duration startupTimeout) {
+ container.withStartupTimeout(startupTimeout);
+ return this;
+ }
+
+ public void start() {
+ container.start();
+ }
+
+ public void stop() {
+ container.stop();
+ }
+
+ public void pause() {
+ DockerClientFactory.instance().client().pauseContainerCmd(container.getContainerInfo().getId());
+ }
+
+ public void unpause() {
+ DockerClientFactory.instance().client().unpauseContainerCmd(container.getContainerInfo().getId());
+ }
+
+ public Integer getMappedPort(int originalPort) {
+ return container.getMappedPort(originalPort);
+ }
+
+ @SuppressWarnings("deprecation")
+ public String getContainerIp() {
+ return container.getContainerInfo().getNetworkSettings().getIpAddress();
+ }
+
+ public String getHostIp() {
+ return container.getContainerIpAddress();
+ }
+
+ public InspectContainerResponse getContainerInfo() {
+ return container.getContainerInfo();
+ }
+
+ public boolean tryConnect(int port) {
+ try {
+ Socket socket = SocketFactory.getDefault().createSocket(getContainerIp(), port);
+ socket.close();
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ @Override
+ public Statement apply(Statement statement, Description description) {
+ return container.apply(statement, description);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java b/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
deleted file mode 100644
index 2328431..0000000
--- a/server/container/util-java8/src/test/java/org/apache/james/util/streams/ContainerNames.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.util.streams;
-
-public interface ContainerNames {
- String FAKE_SMTP = "weave/rest-smtp-sink:latest";
- String RABBITMQ = "rabbitmq:3";
- String ELASTICSEARCH = "elasticsearch:2.2.2";
- String NGINX = "nginx:1.7.1";
- String TIKA = "logicalspark/docker-tikaserver:1.15rc2";
- String SPAMASSASSIN = "dinkel/spamassassin:3.4.0";
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java b/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
deleted file mode 100644
index d0d0906..0000000
--- a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
+++ /dev/null
@@ -1,159 +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.util.streams;
-
-import java.net.Socket;
-import java.time.Duration;
-import java.util.List;
-
-import javax.net.SocketFactory;
-
-import com.github.dockerjava.api.model.Bind;
-import org.junit.Assume;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.DockerClientFactory;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.WaitStrategy;
-import org.testcontainers.images.builder.ImageFromDockerfile;
-
-import com.github.dockerjava.api.command.InspectContainerResponse;
-import com.google.common.base.Strings;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
-
-public class SwarmGenericContainer implements TestRule {
- private static final Logger LOGGER = LoggerFactory.getLogger(SwarmGenericContainer.class);
- private static final String DOCKER_CONTAINER = "DOCKER_CONTAINER";
- private static final String NO_DOCKER_ENVIRONMENT = "Could not find a valid Docker environment.";
- private static final String SKIPPING_TEST_CAUTION = "Skipping all docker tests as no Docker environment was found";
-
- private GenericContainer<?> container;
-
- public SwarmGenericContainer(String dockerImageName) {
- try {
- this.container = new GenericContainer<>(dockerImageName);
- } catch (IllegalStateException e) {
- logAndCheckSkipTest(e);
- }
- }
-
- public SwarmGenericContainer(ImageFromDockerfile imageFromDockerfile) {
- try {
- this.container = new GenericContainer<>(imageFromDockerfile);
- } catch (IllegalStateException e) {
- logAndCheckSkipTest(e);
- }
- }
- private void logAndCheckSkipTest(IllegalStateException e) {
- LOGGER.error("Cannot initial a docker container", e);
- if (e.getMessage().startsWith(NO_DOCKER_ENVIRONMENT)) {
- Assume.assumeTrue(SKIPPING_TEST_CAUTION, false);
- }
- }
-
- public SwarmGenericContainer withAffinityToContainer() {
- String containerEnv = System.getenv(DOCKER_CONTAINER);
- if (Strings.isNullOrEmpty(containerEnv)) {
- LOGGER.warn("'DOCKER_CONTAINER' environment variable not found, dockering without affinity");
- return this;
- }
- List<String> envVariables = container.getEnv();
- envVariables.add("affinity:container==" + container);
- container.setEnv(envVariables);
- return this;
- }
-
- public SwarmGenericContainer withEnv(String key, String value) {
- container.addEnv(key, value);
- return this;
- }
-
- public SwarmGenericContainer withExposedPorts(Integer... ports) {
- container.withExposedPorts(ports);
- return this;
- }
-
- public SwarmGenericContainer portBinding(int hostPort, int dockerPort) {
- container.setPortBindings(ImmutableList.of("0.0.0.0:" + hostPort + ":" + dockerPort));
- return this;
- }
-
- public SwarmGenericContainer waitingFor(WaitStrategy waitStrategy) {
- container.waitingFor(waitStrategy);
- return this;
- }
-
- public SwarmGenericContainer withStartupTimeout(Duration startupTimeout) {
- container.withStartupTimeout(startupTimeout);
- return this;
- }
-
- public void start() {
- container.start();
- }
-
- public void stop() {
- container.stop();
- }
-
- public void pause() {
- DockerClientFactory.instance().client().pauseContainerCmd(container.getContainerInfo().getId());
- }
-
- public void unpause() {
- DockerClientFactory.instance().client().unpauseContainerCmd(container.getContainerInfo().getId());
- }
-
- public Integer getMappedPort(int originalPort) {
- return container.getMappedPort(originalPort);
- }
-
- @SuppressWarnings("deprecation")
- public String getContainerIp() {
- return container.getContainerInfo().getNetworkSettings().getIpAddress();
- }
-
- public String getHostIp() {
- return container.getContainerIpAddress();
- }
-
- public InspectContainerResponse getContainerInfo() {
- return container.getContainerInfo();
- }
-
- public boolean tryConnect(int port) {
- try {
- Socket socket = SocketFactory.getDefault().createSocket(getContainerIp(), port);
- socket.close();
- return true;
- } catch (Exception e) {
- return false;
- }
- }
-
- @Override
- public Statement apply(Statement statement, Description description) {
- return container.apply(statement, description);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
index 7be9d6b..4a6fb61 100644
--- a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
+++ b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.james.user.ldap;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.rules.ExternalResource;
import org.testcontainers.containers.wait.HostPortWaitStrategy;
import org.testcontainers.images.builder.ImageFromDockerfile;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
index 5d7d498..4bde906 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
@@ -47,8 +47,8 @@ import org.apache.james.transport.mailets.ToProcessor;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
import org.apache.james.transport.matchers.RelayLimit;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -84,7 +84,7 @@ public class GatewayRemoteDeliveryIntegrationTest {
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private final TemporaryFolder smtpFolder = new TemporaryFolder();
- private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(ContainerNames.FAKE_SMTP)
+ private final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
.withExposedPorts(25)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy());
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
index 3c9ea9f..726c6df 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
@@ -40,7 +40,7 @@ import org.apache.james.transport.mailets.ToProcessor;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
import org.apache.james.transport.matchers.SMTPIsAuthNetwork;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index 0b19dd4..493d8f8 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -36,8 +36,8 @@ import org.apache.james.probe.DataProbe;
import org.apache.james.transport.mailets.amqp.AmqpRule;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -74,7 +74,7 @@ public class AmqpForwardAttachmentTest {
private static final byte[] TEST_ATTACHMENT_CONTENT = "Test attachment content".getBytes(Charsets.UTF_8);
- public SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer(ContainerNames.RABBITMQ)
+ public SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer(Images.RABBITMQ)
.withAffinityToContainer();
public TemporaryFolder temporaryFolder = new TemporaryFolder();
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index 34c9a36..560d633 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
@@ -36,8 +36,8 @@ import org.apache.james.transport.mailets.amqp.AmqpRule;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
import org.apache.james.transport.matchers.SMTPAuthSuccessful;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -67,7 +67,7 @@ public class ContactExtractorTest {
public static final String EXCHANGE = "collector:email";
public static final String ROUTING_KEY = "";
- public SwarmGenericContainer rabbit = new SwarmGenericContainer(ContainerNames.RABBITMQ);
+ public SwarmGenericContainer rabbit = new SwarmGenericContainer(Images.RABBITMQ);
public AmqpRule amqpRule = new AmqpRule(rabbit, EXCHANGE, ROUTING_KEY);
public TemporaryFolder folder = new TemporaryFolder();
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
index 4ec65fb..db5fe68 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
@@ -44,8 +44,8 @@ import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
import org.apache.james.transport.matchers.RelayLimit;
import org.apache.james.transport.matchers.SMTPAuthSuccessful;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -91,7 +91,7 @@ public class GroupMappingTest {
private RequestSpecification restApiRequest;
@Rule
- public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(ContainerNames.FAKE_SMTP)
+ public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
.withExposedPorts(25)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy());
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index 56e80f3..b12595d 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -39,8 +39,8 @@ import org.apache.james.probe.DataProbe;
import org.apache.james.transport.mailets.amqp.AmqpRule;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -435,7 +435,7 @@ public class ICSAttachmentWorkflowTest {
"END:VCALENDAR\r\n" +
"";
- public SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer(ContainerNames.RABBITMQ)
+ public SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer(Images.RABBITMQ)
.withAffinityToContainer();
public TemporaryFolder temporaryFolder = new TemporaryFolder();
public AmqpRule amqpRule = new AmqpRule(rabbitMqContainer, EXCHANGE_NAME, ROUTING_KEY);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 8eb6fea..bf1541e 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -19,7 +19,6 @@
package org.apache.james.transport.mailets;
import static org.apache.james.MemoryJamesServerMain.SMTP_AND_IMAP_MODULE;
-import static org.apache.james.MemoryJamesServerMain.SMTP_ONLY_MODULE;
import static org.assertj.core.api.Assertions.assertThat;
import javax.mail.internet.MimeMessage;
@@ -32,9 +31,9 @@ import org.apache.james.mailets.configuration.MailetContainer;
import org.apache.james.mailets.configuration.ProcessorConfiguration;
import org.apache.james.transport.matchers.All;
import org.apache.james.transport.matchers.RecipientIsLocal;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.util.scanner.SpamAssassinInvoker;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
@@ -62,7 +61,7 @@ public class SpamAssassinTest {
public static final String TO = "to@" + JAMES_ORG;
public static final String PASSWORD = "secret";
- public SwarmGenericContainer spamAssassinContainer = new SwarmGenericContainer(ContainerNames.SPAMASSASSIN)
+ public SwarmGenericContainer spamAssassinContainer = new SwarmGenericContainer(Images.SPAMASSASSIN)
.withExposedPorts(783)
.withAffinityToContainer()
.waitingFor(new HostPortWaitStrategy());
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
index 06341df..3182103 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
@@ -24,7 +24,7 @@ import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.rules.ExternalResource;
import com.google.common.base.Charsets;
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
index 2bd0288..bcc8a18 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
@@ -26,8 +26,8 @@ import java.net.URISyntaxException;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.fluent.Response;
import org.apache.http.client.utils.URIBuilder;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.wait.HttpWaitStrategy;
@@ -35,7 +35,7 @@ import org.testcontainers.containers.wait.HttpWaitStrategy;
public class ContainerTest {
@Rule
- public SwarmGenericContainer container = new SwarmGenericContainer(ContainerNames.NGINX)
+ public SwarmGenericContainer container = new SwarmGenericContainer(Images.NGINX)
.withAffinityToContainer()
.withExposedPorts(80)
.waitingFor(new HttpWaitStrategy().forStatusCode(200));
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c239771/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
index 1887c45..0291569 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
@@ -36,8 +36,8 @@ import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.store.probe.MailboxProbe;
import org.apache.james.modules.MailboxProbeImpl;
import org.apache.james.probe.DataProbe;
-import org.apache.james.util.streams.ContainerNames;
-import org.apache.james.util.streams.SwarmGenericContainer;
+import org.apache.james.util.docker.Images;
+import org.apache.james.util.docker.SwarmGenericContainer;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.JmapGuiceProbe;
import org.junit.After;
@@ -67,7 +67,7 @@ public abstract class VacationRelayIntegrationTest {
private static final int REST_SMTP_SINK_PORT = 25;
@Rule
- public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(ContainerNames.FAKE_SMTP)
+ public final SwarmGenericContainer fakeSmtp = new SwarmGenericContainer(Images.FAKE_SMTP)
.withExposedPorts(REST_SMTP_SINK_PORT)
.waitingFor(new HostPortWaitStrategy());
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/13] james-project git commit: JAMES-2262 Finally close MockSpamD
resources
Posted by bt...@apache.org.
JAMES-2262 Finally close MockSpamD resources
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/03b2633b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/03b2633b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/03b2633b
Branch: refs/heads/master
Commit: 03b2633bdfaf62eb6bf2841a8bcb10eb6a753a24
Parents: 0be2343
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 18 08:23:46 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:28 2017 +0700
----------------------------------------------------------------------
.../james/smtpserver/mock/util/MockSpamd.java | 30 +++++++++-----------
1 file changed, 14 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/03b2633b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
index 1c0e2a0..a0ff6f9 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/mock/util/MockSpamd.java
@@ -25,6 +25,8 @@ import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
+import org.apache.commons.io.IOUtils;
+
/**
* This class can be used to run a mocked SPAMD daemon
*/
@@ -36,30 +38,28 @@ public class MockSpamd implements Runnable {
public final static String GTUBE = "-SPAM-";
public final static String NOT_SPAM = "Spam: False ; 3 / 5";
public final static String SPAM = "Spam: True ; 1000 / 5";
- BufferedReader in;
- OutputStream out;
- Socket spamd;
- ServerSocket socket;
+ private BufferedReader in;
+ private OutputStream out;
+ private Socket spamd;
+ private ServerSocket socket;
+
/**
* Init the mocked SPAMD daemon
*
- * @param port
- * The port on which the mocked SPAMD daemon will be bind
* @throws IOException
*/
public MockSpamd(int port) throws IOException {
socket = new ServerSocket(port);
}
-
+
/**
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
- boolean spam = false;
-
try {
+ boolean spam = false;
// Accept connections
spamd = socket.accept();
@@ -82,16 +82,14 @@ public class MockSpamd implements Runnable {
out.write(NOT_SPAM.getBytes());
out.flush();
}
-
- in.close();
- out.close();
- spamd.close();
- socket.close();
-
} catch (IOException e) {
// Should not happen
e.printStackTrace();
+ } finally {
+ IOUtils.closeQuietly(in);
+ IOUtils.closeQuietly(out);
+ IOUtils.closeQuietly(spamd);
+ IOUtils.closeQuietly(socket);
}
-
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/13] james-project git commit: JAMES-2262 Correct SpamAssassin
logger
Posted by bt...@apache.org.
JAMES-2262 Correct SpamAssassin logger
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2bd85033
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2bd85033
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2bd85033
Branch: refs/heads/master
Commit: 2bd85033f0ec45422d72e2bff06b368d5d780da2
Parents: 71f6fe2
Author: benwa <bt...@linagora.com>
Authored: Fri Dec 22 13:56:34 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/transport/mailets/SpamAssassin.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bd85033/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
index e1ec544..c0221fa 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
@@ -24,7 +24,6 @@ import java.util.Optional;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.james.transport.mailets.managesieve.ManageSieveMailet;
import org.apache.james.util.Port;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Mail;
@@ -61,7 +60,7 @@ import com.google.common.base.Strings;
* </pre>
*/
public class SpamAssassin extends GenericMailet {
- private static final Logger LOGGER = LoggerFactory.getLogger(ManageSieveMailet.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassin.class);
public static final String SPAMD_HOST = "spamdHost";
public static final String SPAMD_PORT = "spamdPort";
public static final String DEFAULT_HOST = "127.0.0.1";
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/13] james-project git commit: JAMES-2262 Factorize port operations
Posted by bt...@apache.org.
JAMES-2262 Factorize port operations
Many classes were doing port validation by themselves. We needed an helper centralizing this concern.
Concerning:
- ElasticSearch ClientProviderImpl: Port checks are done in the underlying Host class, no need to keep duplicating
- Webadmin: Previous Port class was more a PortProvider. This avoids a naming conflict.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/27b89085
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/27b89085
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/27b89085
Branch: refs/heads/master
Commit: 27b89085557b672cf82d9db0d042b58323b7ff75
Parents: d11a7e4
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 18 10:06:16 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Mon Dec 25 11:24:56 2017 +0700
----------------------------------------------------------------------
.../james/backends/es/ClientProviderImpl.java | 5 --
.../james/mailbox/tika/TikaConfiguration.java | 3 +
.../java/org/apache/james/cli/ServerCmd.java | 13 +--
.../cli/exceptions/InvalidPortException.java | 28 ------
.../org/apache/james/cli/ServerCmdTest.java | 7 +-
.../modules/server/WebAdminServerModule.java | 4 +-
.../apache/james/utils/WebAdminGuiceProbe.java | 2 +-
server/container/jetty/pom.xml | 4 +
.../apache/james/http/jetty/Configuration.java | 8 +-
.../james/http/jetty/JettyHttpServerTest.java | 11 +--
.../metrics/es/ESReporterConfiguration.java | 5 ++
.../main/java/org/apache/james/util/Host.java | 2 +-
.../main/java/org/apache/james/util/Port.java | 54 ++++++++++++
.../java/org/apache/james/util/PortTest.java | 92 ++++++++++++++++++++
.../james/transport/mailets/SpamAssassin.java | 6 +-
.../transport/mailets/SpamAssassinTest.java | 6 +-
.../routes/CassandraMigrationRoutesTest.java | 2 +-
.../org/apache/james/webadmin/FixedPort.java | 54 ------------
.../james/webadmin/FixedPortSupplier.java | 53 +++++++++++
.../java/org/apache/james/webadmin/Port.java | 26 ------
.../org/apache/james/webadmin/PortSupplier.java | 28 ++++++
.../org/apache/james/webadmin/RandomPort.java | 50 -----------
.../james/webadmin/RandomPortSupplier.java | 51 +++++++++++
.../james/webadmin/WebAdminConfiguration.java | 12 +--
.../apache/james/webadmin/WebAdminServer.java | 4 +-
.../james/webadmin/FixedPortSupplierTest.java | 57 ++++++++++++
.../apache/james/webadmin/FixedPortTest.java | 57 ------------
.../james/webadmin/RandomPortSupplierTest.java | 34 ++++++++
.../apache/james/webadmin/RandomPortTest.java | 34 --------
.../webadmin/WebAdminConfigurationTest.java | 2 +-
.../apache/james/webadmin/WebAdminUtils.java | 2 +-
.../webadmin/routes/DomainsRoutesTest.java | 2 +-
.../james/webadmin/routes/GroupsRoutesTest.java | 2 +-
.../james/webadmin/routes/UsersRoutesTest.java | 2 +-
.../webadmin/routes/GlobalQuotaRoutesTest.java | 2 +-
.../routes/UserMailboxesRoutesTest.java | 2 +-
.../james/webadmin/swagger/SwaggerParser.java | 4 +-
37 files changed, 422 insertions(+), 308 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
----------------------------------------------------------------------
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
index 6118739..d4d3e4b 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ClientProviderImpl.java
@@ -33,7 +33,6 @@ import com.google.common.collect.ImmutableList;
public class ClientProviderImpl implements ClientProvider {
public static ClientProviderImpl forHost(String address, Integer port) {
- isValidPort(port);
return new ClientProviderImpl(ImmutableList.of(Host.from(address, port)));
}
@@ -47,10 +46,6 @@ public class ClientProviderImpl implements ClientProvider {
return new ClientProviderImpl(hosts);
}
- private static boolean isValidPort(Integer port) {
- return port > 0 && port <= 65535;
- }
-
private final ImmutableList<Host> hosts;
private ClientProviderImpl(ImmutableList<Host> hosts) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
----------------------------------------------------------------------
diff --git a/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java b/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
index 1915fb6..633afc3 100644
--- a/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
+++ b/mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
@@ -21,6 +21,8 @@ package org.apache.james.mailbox.tika;
import java.util.Optional;
+import org.apache.james.util.Port;
+
import com.google.common.base.Preconditions;
public class TikaConfiguration {
@@ -60,6 +62,7 @@ public class TikaConfiguration {
Preconditions.checkState(host.isPresent(), "'host' is mandatory");
Preconditions.checkState(port.isPresent(), "'port' is mandatory");
Preconditions.checkState(timeoutInMillis.isPresent(), "'timeoutInMillis' is mandatory");
+ Port.assertValid(port.get());
return new TikaConfiguration(host.get(), port.get(), timeoutInMillis.get());
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index 9a9ae83..2c4d73f 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -34,7 +34,6 @@ import org.apache.commons.cli.PosixParser;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.time.StopWatch;
import org.apache.james.cli.exceptions.InvalidArgumentNumberException;
-import org.apache.james.cli.exceptions.InvalidPortException;
import org.apache.james.cli.exceptions.JamesCliException;
import org.apache.james.cli.exceptions.MissingCommandException;
import org.apache.james.cli.exceptions.UnrecognizedCommandException;
@@ -52,6 +51,7 @@ import org.apache.james.mailbox.store.probe.QuotaProbe;
import org.apache.james.mailbox.store.probe.SieveProbe;
import org.apache.james.probe.DataProbe;
import org.apache.james.rrt.lib.Mappings;
+import org.apache.james.util.Port;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -159,7 +159,9 @@ public class ServerCmd {
String portNum = cmd.getOptionValue(PORT_OPT_LONG);
if (!Strings.isNullOrEmpty(portNum)) {
try {
- return validatePortNumber(Integer.parseInt(portNum));
+ int portNumber = Integer.parseInt(portNum);
+ Port.assertValid(portNumber);
+ return portNumber;
} catch (NumberFormatException e) {
throw new ParseException("Port must be a number");
}
@@ -167,13 +169,6 @@ public class ServerCmd {
return DEFAULT_PORT;
}
- private static int validatePortNumber(int portNumber) {
- if (portNumber < 1 || portNumber > 65535) {
- throw new InvalidPortException(portNumber);
- }
- return portNumber;
- }
-
private static void failWithMessage(String s) {
System.err.println(s);
printUsage();
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/cli/src/main/java/org/apache/james/cli/exceptions/InvalidPortException.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/exceptions/InvalidPortException.java b/server/container/cli/src/main/java/org/apache/james/cli/exceptions/InvalidPortException.java
deleted file mode 100644
index bd659fb..0000000
--- a/server/container/cli/src/main/java/org/apache/james/cli/exceptions/InvalidPortException.java
+++ /dev/null
@@ -1,28 +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.cli.exceptions;
-
-public class InvalidPortException extends JamesCliException {
-
- public InvalidPortException(int invalidPortNumber) {
- super( invalidPortNumber + " is not a valid port number. Please provide one between 1 and 65535");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
----------------------------------------------------------------------
diff --git a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index b797683..aa24c29 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -31,7 +31,6 @@ import java.util.HashMap;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.ParseException;
import org.apache.james.cli.exceptions.InvalidArgumentNumberException;
-import org.apache.james.cli.exceptions.InvalidPortException;
import org.apache.james.cli.exceptions.MissingCommandException;
import org.apache.james.cli.exceptions.UnrecognizedCommandException;
import org.apache.james.cli.type.CmdType;
@@ -1364,7 +1363,7 @@ public class ServerCmdTest {
CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
assertThatThrownBy(() -> ServerCmd.getPort(commandLine))
- .isInstanceOf(InvalidPortException.class);
+ .isInstanceOf(IllegalArgumentException.class);
}
@Test
@@ -1373,7 +1372,7 @@ public class ServerCmdTest {
CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
assertThatThrownBy(() -> ServerCmd.getPort(commandLine))
- .isInstanceOf(InvalidPortException.class);
+ .isInstanceOf(IllegalArgumentException.class);
}
@Test
@@ -1382,7 +1381,7 @@ public class ServerCmdTest {
CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
assertThatThrownBy(() -> ServerCmd.getPort(commandLine))
- .isInstanceOf(InvalidPortException.class);
+ .isInstanceOf(IllegalArgumentException.class);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
index 88c1cd6..1a140ee 100644
--- a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
+++ b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
@@ -34,7 +34,7 @@ import org.apache.james.utils.ConfigurationPerformer;
import org.apache.james.utils.GuiceProbe;
import org.apache.james.utils.PropertiesProvider;
import org.apache.james.utils.WebAdminGuiceProbe;
-import org.apache.james.webadmin.FixedPort;
+import org.apache.james.webadmin.FixedPortSupplier;
import org.apache.james.webadmin.TlsConfiguration;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.apache.james.webadmin.WebAdminServer;
@@ -82,7 +82,7 @@ public class WebAdminServerModule extends AbstractModule {
PropertiesConfiguration configurationFile = propertiesProvider.getConfiguration("webadmin");
return WebAdminConfiguration.builder()
.enable(configurationFile.getBoolean("enabled", DEFAULT_DISABLED))
- .port(new FixedPort(configurationFile.getInt("port", WebAdminServer.DEFAULT_PORT)))
+ .port(new FixedPortSupplier(configurationFile.getInt("port", WebAdminServer.DEFAULT_PORT)))
.tls(readHttpsConfiguration(configurationFile))
.enableCORS(configurationFile.getBoolean("cors.enable", DEFAULT_CORS_DISABLED))
.urlCORSOrigin(configurationFile.getString("cors.origin", DEFAULT_NO_CORS_ORIGIN))
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
index a68155c..40cde64 100644
--- a/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
+++ b/server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
@@ -32,6 +32,6 @@ public class WebAdminGuiceProbe implements GuiceProbe {
}
public int getWebAdminPort() {
- return webAdminServer.getPort().toInt();
+ return webAdminServer.getPort().get().getValue();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/jetty/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/jetty/pom.xml b/server/container/jetty/pom.xml
index ae4a65c..1ec9a8b 100644
--- a/server/container/jetty/pom.xml
+++ b/server/container/jetty/pom.xml
@@ -34,6 +34,10 @@
<dependencies>
<dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>james-core</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.github.fge</groupId>
<artifactId>throwing-lambdas</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/jetty/src/main/java/org/apache/james/http/jetty/Configuration.java
----------------------------------------------------------------------
diff --git a/server/container/jetty/src/main/java/org/apache/james/http/jetty/Configuration.java b/server/container/jetty/src/main/java/org/apache/james/http/jetty/Configuration.java
index f638e9f..13b43af 100644
--- a/server/container/jetty/src/main/java/org/apache/james/http/jetty/Configuration.java
+++ b/server/container/jetty/src/main/java/org/apache/james/http/jetty/Configuration.java
@@ -24,11 +24,12 @@ import java.util.Optional;
import javax.servlet.Filter;
import javax.servlet.Servlet;
+import org.apache.james.util.Port;
+
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Range;
public class Configuration {
@@ -41,8 +42,7 @@ public class Configuration {
}
public static class Builder {
-
- private static final Range<Integer> VALID_PORT_RANGE = Range.closed(1, 65535);
+
private static final String TEMPLATE_LEVEL1 = "/*";
private final ImmutableMap.Builder<String, Object> mappings;
@@ -130,7 +130,7 @@ public class Configuration {
}
public Builder port(int port) {
- Preconditions.checkArgument(VALID_PORT_RANGE.contains(port));
+ Port.assertValid(port);
this.port = Optional.of(port);
return this;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerTest.java b/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerTest.java
index 07c4538..17cb1f4 100644
--- a/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerTest.java
+++ b/server/container/jetty/src/test/java/org/apache/james/http/jetty/JettyHttpServerTest.java
@@ -23,7 +23,6 @@ import static com.jayway.restassured.RestAssured.when;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
-import java.util.Random;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -35,6 +34,7 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.james.util.Port;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Before;
@@ -102,18 +102,11 @@ public class JettyHttpServerTest {
@Test
public void shouldStartOnConfiguredPort() throws Exception {
- int port = generateValidUnprivilegedPort();
+ int port = Port.generateValidUnprivilegedPort();
testee = JettyHttpServer.create(configurationBuilder.port(port).build()).start();
assertThat(testee.getPort()).isEqualTo(port);
}
-
- private int generateValidUnprivilegedPort() {
- int portBound = 65535;
- int privilegedPortBound = 1024;
- return new Random().nextInt(portBound - privilegedPortBound) + privilegedPortBound;
- }
-
@Test
public void shouldReturn404WhenNoServletConfigured() throws Exception {
testee = JettyHttpServer.create(configurationBuilder.build()).start();
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java b/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java
index afed836..75aa0a7 100644
--- a/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java
+++ b/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java
@@ -21,6 +21,8 @@ package org.apache.james.metrics.es;
import java.util.Optional;
+import org.apache.james.util.Port;
+
import com.google.common.base.Preconditions;
public class ESReporterConfiguration {
@@ -66,6 +68,9 @@ public class ESReporterConfiguration {
Preconditions.checkState(enabled.isPresent(), "You must specify either enabled or disabled");
Preconditions.checkState(!enabled.get() || host.isPresent(), "You must specify host when enabled");
Preconditions.checkState(!enabled.get() || port.isPresent(), "You must specify port when enabled");
+ if (enabled.get()) {
+ Port.assertValid(port.get());
+ }
return new ESReporterConfiguration(host, port, enabled.get(), index, periodInSecond);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/Host.java b/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
index 9adc41c..4337aa3 100644
--- a/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
+++ b/server/container/util-java8/src/main/java/org/apache/james/util/Host.java
@@ -101,7 +101,7 @@ public class Host {
Host(String hostName, int port) {
Preconditions.checkNotNull(hostName, "Hostname could not be null");
Preconditions.checkArgument(!Strings.isNullOrEmpty(hostName), "Hostname could not be empty");
- Preconditions.checkArgument(port > 0 && port <= 65535, "Port should be between 0 and 65535");
+ Port.assertValid(port);
this.hostName = hostName;
this.port = port;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/util-java8/src/main/java/org/apache/james/util/Port.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/Port.java b/server/container/util-java8/src/main/java/org/apache/james/util/Port.java
new file mode 100644
index 0000000..2acc4b6
--- /dev/null
+++ b/server/container/util-java8/src/main/java/org/apache/james/util/Port.java
@@ -0,0 +1,54 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.util;
+
+import java.util.Random;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Range;
+
+public class Port {
+ public static final int MAX_PORT_VALUE = 65535;
+ public static final int PRIVILEGED_PORT_BOUND = 1024;
+ private static final Range<Integer> VALID_PORT_RANGE = Range.closed(1, MAX_PORT_VALUE);
+
+ public static int generateValidUnprivilegedPort() {
+ return new Random().nextInt(Port.MAX_PORT_VALUE - PRIVILEGED_PORT_BOUND) + PRIVILEGED_PORT_BOUND;
+ }
+
+ public static void assertValid(int port) {
+ Preconditions.checkArgument(isValid(port), "Port should be between 1 and 65535");
+ }
+
+ public static boolean isValid(int port) {
+ return VALID_PORT_RANGE.contains(port);
+ }
+
+ private final int value;
+
+ public Port(int value) {
+ assertValid(value);
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/container/util-java8/src/test/java/org/apache/james/util/PortTest.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/PortTest.java b/server/container/util-java8/src/test/java/org/apache/james/util/PortTest.java
new file mode 100644
index 0000000..2f13e60
--- /dev/null
+++ b/server/container/util-java8/src/test/java/org/apache/james/util/PortTest.java
@@ -0,0 +1,92 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.util;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.junit.Test;
+
+public class PortTest {
+ @Test
+ public void assertValidShouldThrowOnNegativePort() {
+ assertThatThrownBy(() -> Port.assertValid(-1))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void assertValidShouldThrowOnZeroPort() {
+ assertThatThrownBy(() -> Port.assertValid(0))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void assertValidShouldAcceptOne() {
+ Port.assertValid(1);
+ }
+
+ @Test
+ public void assertValidShouldAcceptMaxValue() {
+ Port.assertValid(Port.MAX_PORT_VALUE);
+ }
+
+ @Test
+ public void assertValidShouldThrowOnTooBigValue() {
+ assertThatThrownBy(() -> Port.assertValid(Port.MAX_PORT_VALUE + 1))
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void isValidShouldReturnFalseWhenNegative() {
+ assertThat(Port.isValid(-1))
+ .isFalse();
+ }
+
+ @Test
+ public void isValidShouldReturnFalseWhenZero() {
+ assertThat(Port.isValid(0))
+ .isFalse();
+ }
+
+ @Test
+ public void isValidShouldReturnTrueWhenOne() {
+ assertThat(Port.isValid(1))
+ .isTrue();
+ }
+
+ @Test
+ public void isValidShouldReturnTrueWhenMaxValue() {
+ assertThat(Port.isValid(Port.MAX_PORT_VALUE))
+ .isTrue();
+ }
+
+ @Test
+ public void isValidShouldReturnFalseWhenAboveMaxValue() {
+ assertThat(Port.isValid(Port.MAX_PORT_VALUE + 1))
+ .isFalse();
+ }
+
+ @Test
+ public void generateValidUnprivilegedPortShouldReturnAValidPort() {
+ assertThat(Port.generateValidUnprivilegedPort())
+ .isStrictlyBetween(Port.PRIVILEGED_PORT_BOUND, Port.MAX_PORT_VALUE);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
index 1b3de01..5d01cd5 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SpamAssassin.java
@@ -25,6 +25,7 @@ import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.james.transport.mailets.managesieve.ManageSieveMailet;
+import org.apache.james.util.Port;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Experimental;
import org.apache.mailet.Mail;
@@ -67,7 +68,6 @@ public class SpamAssassin extends GenericMailet {
public static final String SPAMD_PORT = "spamdPort";
public static final String DEFAULT_HOST = "127.0.0.1";
public static final int DEFAULT_PORT = 783;
- public static final int MAX_AVAILABLE_PORT = 65535;
private String spamdHost;
private int spamdPort;
@@ -81,9 +81,7 @@ public class SpamAssassin extends GenericMailet {
.orElse(DEFAULT_HOST);
spamdPort = MailetUtil.getInitParameterAsStrictlyPositiveInteger(getInitParameter(SPAMD_PORT), DEFAULT_PORT);
- if (spamdPort > MAX_AVAILABLE_PORT) {
- throw new MessagingException("Please configure a valid port. Not valid: " + spamdPort);
- }
+ Port.assertValid(spamdPort);
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 71831d9..875a4f9 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -24,7 +24,9 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import javax.mail.MessagingException;
+import org.apache.james.smtpserver.mock.util.MockSpamd;
import org.apache.james.smtpserver.mock.util.MockSpamdTestRule;
+import org.apache.james.util.Port;
import org.apache.james.util.scanner.SpamAssassinInvoker;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
@@ -117,8 +119,8 @@ public class SpamAssassinTest {
assertThatThrownBy(() -> mailet.init(FakeMailetConfig.builder()
.mailetName("SpamAssassin")
.setProperty(SpamAssassin.SPAMD_PORT,
- String.valueOf(SpamAssassin.MAX_AVAILABLE_PORT + 1))
- .build())).isInstanceOf(MessagingException.class);
+ String.valueOf(Port.MAX_PORT_VALUE + 1))
+ .build())).isInstanceOf(IllegalArgumentException.class);
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
index e475373..e64fabd 100644
--- a/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
@@ -85,7 +85,7 @@ public class CassandraMigrationRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setBasePath(CassandraMigrationRoutes.VERSION_BASE)
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPort.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPort.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPort.java
deleted file mode 100644
index 7ada8a1..0000000
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPort.java
+++ /dev/null
@@ -1,54 +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.webadmin;
-
-import java.util.Objects;
-
-import com.google.common.base.Preconditions;
-
-public class FixedPort implements Port {
-
- private final int port;
-
- public FixedPort(int port) {
- Preconditions.checkArgument(port > 0 && port < 65536, "Port should be strictly contained between 0 and 65536");
- this.port = port;
- }
-
- @Override
- public int toInt() {
- return port;
- }
-
- @Override
- public final boolean equals(Object o) {
- if (o instanceof FixedPort) {
- FixedPort that = (FixedPort) o;
-
- return Objects.equals(this.port, that.port);
- }
- return false;
- }
-
- @Override
- public final int hashCode() {
- return Objects.hash(port);
- }
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.java
new file mode 100644
index 0000000..de35bcb
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.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.webadmin;
+
+import java.util.Objects;
+
+import org.apache.james.util.Port;
+
+public class FixedPortSupplier implements PortSupplier {
+
+ private final Port port;
+
+ public FixedPortSupplier(int port) {
+ this.port = new Port(port);
+ }
+
+ @Override
+ public Port get() {
+ return port;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof FixedPortSupplier) {
+ FixedPortSupplier that = (FixedPortSupplier) o;
+
+ return Objects.equals(this.port, that.port);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(port);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Port.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Port.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Port.java
deleted file mode 100644
index ff7a50b..0000000
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Port.java
+++ /dev/null
@@ -1,26 +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.webadmin;
-
-public interface Port {
-
- int toInt();
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java
new file mode 100644
index 0000000..b9a8afe
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.webadmin;
+
+import java.util.function.Supplier;
+
+import org.apache.james.util.Port;
+
+public interface PortSupplier extends Supplier<Port> {
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPort.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPort.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPort.java
deleted file mode 100644
index 2b3ab5d..0000000
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPort.java
+++ /dev/null
@@ -1,50 +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.webadmin;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.base.Throwables;
-
-public class RandomPort implements Port {
-
- public static int findFreePort() {
- try (ServerSocket socket = new ServerSocket(0)) {
- return socket.getLocalPort();
- } catch (IOException e) {
- throw Throwables.propagate(e);
- }
- }
-
- private final Supplier<Integer> portSupplier;
-
- public RandomPort() {
- portSupplier = Suppliers.memoize(RandomPort::findFreePort);
- }
-
- @Override
- public int toInt() {
- return portSupplier.get();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java
new file mode 100644
index 0000000..6f21591
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java
@@ -0,0 +1,51 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.webadmin;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+
+import org.apache.james.util.Port;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.base.Throwables;
+
+public class RandomPortSupplier implements PortSupplier {
+
+ public static int findFreePort() {
+ try (ServerSocket socket = new ServerSocket(0)) {
+ return socket.getLocalPort();
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+
+ private final Supplier<Integer> portSupplier;
+
+ public RandomPortSupplier() {
+ portSupplier = Suppliers.memoize(RandomPortSupplier::findFreePort);
+ }
+
+ @Override
+ public Port get() {
+ return new Port(portSupplier.get());
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
index 8db2976..45d0e18 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
@@ -42,7 +42,7 @@ public class WebAdminConfiguration {
public static class Builder {
private Optional<Boolean> enabled = Optional.empty();
- private Optional<Port> port = Optional.empty();
+ private Optional<PortSupplier> port = Optional.empty();
private Optional<Boolean> enableCORS = Optional.empty();
private Optional<TlsConfiguration> tlsConfiguration = Optional.empty();
private Optional<String> urlCORSOrigin = Optional.empty();
@@ -58,8 +58,8 @@ public class WebAdminConfiguration {
return this;
}
- public Builder port(Port port) {
- this.port = Optional.of(port);
+ public Builder port(PortSupplier portSupplier) {
+ this.port = Optional.of(portSupplier);
return this;
}
@@ -111,14 +111,14 @@ public class WebAdminConfiguration {
}
private final boolean enabled;
- private final Optional<Port> port;
+ private final Optional<PortSupplier> port;
private final Optional<TlsConfiguration> tlsConfiguration;
private final boolean enableCORS;
private final String urlCORSOrigin;
private final String host;
@VisibleForTesting
- WebAdminConfiguration(boolean enabled, Optional<Port> port, Optional<TlsConfiguration> tlsConfiguration,
+ WebAdminConfiguration(boolean enabled, Optional<PortSupplier> port, Optional<TlsConfiguration> tlsConfiguration,
boolean enableCORS, String urlCORSOrigin, String host) {
this.enabled = enabled;
this.port = port;
@@ -136,7 +136,7 @@ public class WebAdminConfiguration {
return urlCORSOrigin;
}
- public Port getPort() {
+ public PortSupplier getPort() {
return port.orElseThrow(() -> new IllegalStateException("No port was specified"));
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
index fe5d22a..e544022 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
@@ -67,7 +67,7 @@ public class WebAdminServer implements Configurable {
@Override
public void configure(HierarchicalConfiguration config) throws ConfigurationException {
if (configuration.isEnabled()) {
- service.port(configuration.getPort().toInt());
+ service.port(configuration.getPort().get().getValue());
configureHTTPS();
configureCORS();
configureMetrics();
@@ -123,7 +123,7 @@ public class WebAdminServer implements Configurable {
service.awaitInitialization();
}
- public Port getPort() {
+ public PortSupplier getPort() {
return configuration.getPort();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java
new file mode 100644
index 0000000..304295d
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java
@@ -0,0 +1,57 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.webadmin;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.junit.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+public class FixedPortSupplierTest {
+
+ @Test
+ public void toIntShouldThrowOnNegativePort() {
+ assertThatThrownBy(() -> new FixedPortSupplier(-1)).isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void toIntShouldThrowOnNullPort() {
+ assertThatThrownBy(() -> new FixedPortSupplier(0)).isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void toIntShouldThrowOnTooBigNumbers() {
+ assertThatThrownBy(() -> new FixedPortSupplier(65536)).isInstanceOf(IllegalArgumentException.class);
+ }
+
+ @Test
+ public void toIntShouldReturnedDesiredPort() {
+ int expectedPort = 452;
+ assertThat(new FixedPortSupplier(expectedPort).get().getValue()).isEqualTo(expectedPort);
+ }
+
+ @Test
+ public void shouldMatchBeanContract() {
+ EqualsVerifier.forClass(FixedPortSupplier.class).verify();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortTest.java
deleted file mode 100644
index 2712daa..0000000
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortTest.java
+++ /dev/null
@@ -1,57 +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.webadmin;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import org.junit.Test;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
-
-public class FixedPortTest {
-
- @Test
- public void toIntShouldThrowOnNegativePort() {
- assertThatThrownBy(() -> new FixedPort(-1)).isInstanceOf(IllegalArgumentException.class);
- }
-
- @Test
- public void toIntShouldThrowOnNullPort() {
- assertThatThrownBy(() -> new FixedPort(0)).isInstanceOf(IllegalArgumentException.class);
- }
-
- @Test
- public void toIntShouldThrowOnTooBigNumbers() {
- assertThatThrownBy(() -> new FixedPort(65536)).isInstanceOf(IllegalArgumentException.class);
- }
-
- @Test
- public void toIntShouldReturnedDesiredPort() {
- int expectedPort = 452;
- assertThat(new FixedPort(expectedPort).toInt()).isEqualTo(expectedPort);
- }
-
- @Test
- public void shouldMatchBeanContract() {
- EqualsVerifier.forClass(FixedPort.class).verify();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java
new file mode 100644
index 0000000..de821f1
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java
@@ -0,0 +1,34 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.webadmin;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class RandomPortSupplierTest {
+
+ @Test
+ public void toIntShouldReturnTwoTimeTheSameResult() {
+ RandomPortSupplier testee = new RandomPortSupplier();
+ assertThat(testee.get().getValue()).isEqualTo(testee.get().getValue());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortTest.java
deleted file mode 100644
index 07d1996..0000000
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortTest.java
+++ /dev/null
@@ -1,34 +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.webadmin;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Test;
-
-public class RandomPortTest {
-
- @Test
- public void toIntShouldReturnTwoTimeTheSameResult() {
- RandomPort testee = new RandomPort();
- assertThat(testee.toInt()).isEqualTo(testee.toInt());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
index ab0649f..8fdf930 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
@@ -29,7 +29,7 @@ import nl.jqno.equalsverifier.EqualsVerifier;
public class WebAdminConfigurationTest {
- public static final FixedPort PORT = new FixedPort(80);
+ public static final FixedPortSupplier PORT = new FixedPortSupplier(80);
@Rule
public ExpectedException expectedException = ExpectedException.none();
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index 3ff8c02..89a5310 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -31,7 +31,7 @@ public class WebAdminUtils {
public static WebAdminConfiguration webAdminConfigurationForTesting() {
return WebAdminConfiguration.builder()
.enabled()
- .port(new RandomPort())
+ .port(new RandomPortSupplier())
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index 1de056d..cfa3875 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -74,7 +74,7 @@ public class DomainsRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.setBasePath(DomainsRoutes.DOMAINS)
.build();
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index a0eae10..ccbe64a 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -90,7 +90,7 @@ public class GroupsRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.setBasePath(GroupsRoutes.ROOT_PATH)
.log(LogDetail.ALL)
.build();
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
index c2874db..bcc2d1f 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
@@ -76,7 +76,7 @@ public class UsersRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.setBasePath(UserRoutes.USERS)
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
index 67e8fd5..24a84cb 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
@@ -62,7 +62,7 @@ public class GlobalQuotaRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 5d34e26..46c493f 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -92,7 +92,7 @@ public class UserMailboxesRoutesTest {
.setContentType(ContentType.JSON)
.setAccept(ContentType.JSON)
.setBasePath(USERS_BASE + SEPARATOR + USERNAME + SEPARATOR + UserMailboxesRoutes.MAILBOXES)
- .setPort(webAdminServer.getPort().toInt())
+ .setPort(webAdminServer.getPort().get().getValue())
.setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
.build();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/27b89085/server/protocols/webadmin/webadmin-swagger/src/main/java/org/apache/james/webadmin/swagger/SwaggerParser.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-swagger/src/main/java/org/apache/james/webadmin/swagger/SwaggerParser.java b/server/protocols/webadmin/webadmin-swagger/src/main/java/org/apache/james/webadmin/swagger/SwaggerParser.java
index 7bdec19..730caa6 100644
--- a/server/protocols/webadmin/webadmin-swagger/src/main/java/org/apache/james/webadmin/swagger/SwaggerParser.java
+++ b/server/protocols/webadmin/webadmin-swagger/src/main/java/org/apache/james/webadmin/swagger/SwaggerParser.java
@@ -22,6 +22,7 @@ package org.apache.james.webadmin.swagger;
import javax.inject.Inject;
import org.apache.james.webadmin.WebAdminConfiguration;
+import org.reflections.Reflections;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -32,7 +33,6 @@ import io.swagger.annotations.SwaggerDefinition;
import io.swagger.jaxrs.Reader;
import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.models.Swagger;
-import org.reflections.Reflections;
@SwaggerDefinition
public class SwaggerParser {
@@ -68,7 +68,7 @@ public class SwaggerParser {
beanConfig.setVersion(API_DOC_VERSION);
beanConfig.setTitle(API_DOC_TITLE);
beanConfig.setDescription(API_DOC_DESCRIPTION);
- beanConfig.setHost(configuration.getHost() + HOST_PORT_SEPARATOR + configuration.getPort().toInt());
+ beanConfig.setHost(configuration.getHost() + HOST_PORT_SEPARATOR + configuration.getPort().get().getValue());
beanConfig.setSchemes(SCHEMES);
beanConfig.setScan(true);
beanConfig.scanAndRead();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org