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 ro...@apache.org on 2017/01/10 14:18:17 UTC

[02/50] [abbrv] james-project git commit: JAMES-1877 Extract HeloName provider and test it

JAMES-1877 Extract HeloName provider and test it


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

Branch: refs/heads/master
Commit: 1cb969bdda7db0ba8f1c8b52adeb27186bb566e7
Parents: e82996e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Nov 29 10:27:13 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 10 11:37:10 2017 +0700

----------------------------------------------------------------------
 .../james/transport/mailets/RemoteDelivery.java | 30 ++------
 .../remoteDelivery/HeloNameProvider.java        | 53 +++++++++++++
 .../remoteDelivery/HeloNameProviderTest.java    | 79 ++++++++++++++++++++
 3 files changed, 140 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1cb969bd/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
index 0e7e48d..c4113b5 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
@@ -53,12 +53,10 @@ import javax.mail.internet.MimeMultipart;
 import javax.mail.internet.MimePart;
 import javax.mail.internet.ParseException;
 
-import com.sun.mail.smtp.SMTPTransport;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.api.TemporaryResolutionException;
 import org.apache.james.dnsservice.library.MXHostAddressIterator;
 import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.MetricFactory;
@@ -67,6 +65,7 @@ import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueue.MailQueueException;
 import org.apache.james.queue.api.MailQueue.MailQueueItem;
 import org.apache.james.queue.api.MailQueueFactory;
+import org.apache.james.transport.mailets.remoteDelivery.HeloNameProvider;
 import org.apache.james.transport.mailets.remoteDelivery.RemoteDeliverySocketFactory;
 import org.apache.james.transport.util.Patterns;
 import org.apache.james.util.TimeConverter;
@@ -77,6 +76,8 @@ import org.apache.mailet.MailetContext;
 import org.apache.mailet.base.GenericMailet;
 import org.slf4j.Logger;
 
+import com.sun.mail.smtp.SMTPTransport;
+
 /**
  * <p>The RemoteDelivery mailet delivers messages to a remote SMTP server able to deliver or forward messages to their final
  * destination.
@@ -252,8 +253,6 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
 
     private MailQueue queue;
 
-    private String heloName;
-
     private Logger logger;
 
     private boolean usePriority;
@@ -266,6 +265,7 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
 
     private MetricFactory metricFactory;
     private Metric outgoingMailsMetric;
+    private HeloNameProvider heloNameProvider;
 
     @Inject
     public void setDomainList(DomainList domainList) {
@@ -444,7 +444,7 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
             dnsProblemRetry = Integer.parseInt(dnsRetry);
         }
 
-        heloName = getInitParameter("heloName");
+        heloNameProvider = new HeloNameProvider(getInitParameter("heloName"), domainList);
 
         String prio = getInitParameter("usePriority");
         if (prio != null) {
@@ -751,7 +751,7 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
         props.put("mail.smtp.connectiontimeout", connectionTimeout + "");
         props.put("mail.smtp.sendpartial", String.valueOf(sendPartial));
 
-        props.put("mail.smtp.localhost", getHeloName());
+        props.put("mail.smtp.localhost", heloNameProvider.getHeloName());
 
         // handle starttls
         props.put("mail.smtp.starttls.enable", String.valueOf(startTLS));
@@ -970,7 +970,7 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
                     SMTPTransport transport = null;
                     try {
                         transport =  (SMTPTransport) session.getTransport(outgoingMailServer);
-                        transport.setLocalHost( props.getProperty("mail.smtp.localhost", heloName) );
+                        transport.setLocalHost( props.getProperty("mail.smtp.localhost", heloNameProvider.getHeloName()) );
                         try {
                             if (authUser != null) {
                                 transport.connect(outgoingMailServer.getHostName(), authUser, authPass);
@@ -1555,7 +1555,7 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
         PrintWriter out = new PrintWriter(sout, true);
         String machine;
         try {
-            machine = getHeloName();
+            machine = heloNameProvider.getHeloName();
 
         } catch (Exception e) {
             machine = "[address unknown]";
@@ -1631,18 +1631,4 @@ public class RemoteDelivery extends GenericMailet implements Runnable {
         return new MXHostAddressIterator(gateways, dnsServer, false, logger);
     }
 
-    protected String getHeloName() {
-        if (heloName == null) {
-            // TODO: Maybe we should better just lookup the hostname via dns
-            try {
-                return domainList.getDefaultDomain();
-            } catch (DomainListException e) {
-                log("Unable to access DomainList", e);
-                return "localhost";
-            }
-        } else {
-            return heloName;
-        }
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/1cb969bd/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProvider.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProvider.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProvider.java
new file mode 100644
index 0000000..b91c68e
--- /dev/null
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProvider.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.transport.mailets.remoteDelivery;
+
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.api.DomainListException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HeloNameProvider {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HeloNameProvider.class);
+    public static final String LOCALHOST = "localhost";
+
+    private final String heloName;
+    private final DomainList domainList;
+
+    public HeloNameProvider(String heloName, DomainList domainList) {
+        this.heloName = heloName;
+        this.domainList = domainList;
+    }
+
+    public String getHeloName() {
+        if (heloName == null) {
+            // TODO: Maybe we should better just lookup the hostname via dns
+            try {
+                return domainList.getDefaultDomain();
+            } catch (DomainListException e) {
+                LOGGER.warn("Unable to access DomainList", e);
+                return LOCALHOST;
+            }
+        } else {
+            return heloName;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/1cb969bd/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProviderTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProviderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProviderTest.java
new file mode 100644
index 0000000..987b99b
--- /dev/null
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/HeloNameProviderTest.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * 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.remoteDelivery;
+
+import static org.mockito.Mockito.mock;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.api.DomainListException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class HeloNameProviderTest {
+
+    public static final String DOMAIN = "domain";
+
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
+    private DomainList domainList;
+
+    @Before
+    public void setUp() {
+        domainList = mock(DomainList.class);
+    }
+
+    @Test
+    public void getHeloNameShouldReturnNonNullProvidedHeloName() {
+        HeloNameProvider heloNameProvider = new HeloNameProvider(DOMAIN, domainList);
+
+        assertThat(heloNameProvider.getHeloName()).isEqualTo(DOMAIN);
+    }
+
+    @Test
+    public void getHeloNameShouldReturnDomainListDefaultDomainOnNullHeloName() throws DomainListException {
+        when(domainList.getDefaultDomain()).thenReturn(DOMAIN);
+        HeloNameProvider heloNameProvider = new HeloNameProvider(null, domainList);
+
+        assertThat(heloNameProvider.getHeloName()).isEqualTo(DOMAIN);
+    }
+
+    @Test
+    public void getHeloNameShouldReturnLocalhostOnDomainListException() throws DomainListException {
+        when(domainList.getDefaultDomain()).thenThrow(new DomainListException("any message"));
+        HeloNameProvider heloNameProvider = new HeloNameProvider(null, domainList);
+
+        assertThat(heloNameProvider.getHeloName()).isEqualTo(HeloNameProvider.LOCALHOST);
+    }
+
+    @Test
+    public void getHeloNameShouldPropagateRuntimeExceptions() throws DomainListException {
+        when(domainList.getDefaultDomain()).thenThrow(new RuntimeException());
+        HeloNameProvider heloNameProvider = new HeloNameProvider(null, domainList);
+
+        expectedException.expect(RuntimeException.class);
+        heloNameProvider.getHeloName();
+    }
+
+}


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