This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-jspf.git

commit 142a9a2dc6c3d23132b7ed072a64be788ef8fb81
Author: Emerson Pinter <e...@pinter.dev>
AuthorDate: Sat Jan 18 03:32:40 2025 -0300

    Set sync executor as default and add factory methods
    
    AsynchronousSPFExecutor is the cause of many problems since it was made
    default in the commit 3ea9bffa7b6344c4d85e801b5b703510f613b155. This
    commit changes the default back to SynchronousSPFExecutor and add
    methods to create instances with sync or async executors.
---
 .../jspf/executor/AsynchronousSPFExecutor.java     |  2 +-
 .../org/apache/james/jspf/impl/DefaultSPF.java     | 34 +++++++++++++++++-
 .../main/java/org/apache/james/jspf/impl/SPF.java  | 41 +++++++++++++++------
 .../AsynchronousSPFExecutorIntegrationTest.java    | 36 ++++++++++++++++++-
 .../apache/james/jspf/DefaultSPFResolverTest.java  |  7 +++-
 ... => SynchronousSPFExecutorIntegrationTest.java} | 42 +++++++++++++++++++---
 6 files changed, 143 insertions(+), 19 deletions(-)

diff --git 
a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
 
b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
index 3ce330b..af1991e 100644
--- 
a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
+++ 
b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
 import org.xbill.DNS.lookup.NoSuchRRSetException;
 
 /**
- * Synchronous implementation of SPFExecuter. All queries will get executed 
synchronously
+ * Asynchronous implementation of SPFExecutor. All queries will get executed 
asynchronously
  */
 public class AsynchronousSPFExecutor implements SPFExecutor {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(AsynchronousSPFExecutor.class);
diff --git a/resolver/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java 
b/resolver/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java
index 11172c0..46555b8 100644
--- a/resolver/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java
+++ b/resolver/src/main/java/org/apache/james/jspf/impl/DefaultSPF.java
@@ -19,11 +19,43 @@
 
 package org.apache.james.jspf.impl;
 
+import org.apache.james.jspf.core.DNSService;
+import org.apache.james.jspf.executor.AsynchronousSPFExecutor;
+import org.apache.james.jspf.executor.SPFExecutor;
+import org.apache.james.jspf.executor.SynchronousSPFExecutor;
+
 public class DefaultSPF extends SPF {
     /**
-     * Uses DNSJava based dns resolver
+     * Creates an instance with the default dns resolver and a 
SynchronousSPFExecutor
+     *
+     * @see #createAsync()
+     * @see #createSync()
+     * @see SPF#SPF(DNSService, SPFExecutor)
      */
     public DefaultSPF() {
         super(new DNSServiceXBillImpl());
     }
+
+    /**
+     * Creates an instance of {@link SPF} with a default dns resolver and a 
{@link SynchronousSPFExecutor}
+     *
+     * @see #createAsync()
+     * @see SPF#SPF(DNSService, SPFExecutor)
+     * @return SPF
+     */
+    public static SPF createSync() {
+        return new SPF(new DNSServiceXBillImpl());
+    }
+
+    /**
+     * Creates an instance of {@link SPF} with a default dns resolver and a 
{@link AsynchronousSPFExecutor}
+     *
+     * @see #createSync()
+     * @see SPF#SPF(DNSService, SPFExecutor)
+     * @return SPF
+     */
+    public static SPF createAsync() {
+        DNSServiceXBillImpl dnsService = new DNSServiceXBillImpl();
+        return new SPF(dnsService, new AsynchronousSPFExecutor(dnsService));
+    }
 }
diff --git a/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java 
b/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java
index 405360f..3cfc6f1 100644
--- a/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java
+++ b/resolver/src/main/java/org/apache/james/jspf/impl/SPF.java
@@ -41,10 +41,10 @@ import 
org.apache.james.jspf.core.exceptions.PermErrorException;
 import org.apache.james.jspf.core.exceptions.SPFErrorConstants;
 import org.apache.james.jspf.core.exceptions.SPFResultException;
 import org.apache.james.jspf.core.exceptions.TempErrorException;
-import org.apache.james.jspf.executor.AsynchronousSPFExecutor;
 import org.apache.james.jspf.executor.FutureSPFResult;
 import org.apache.james.jspf.executor.SPFExecutor;
 import org.apache.james.jspf.executor.SPFResult;
+import org.apache.james.jspf.executor.SynchronousSPFExecutor;
 import org.apache.james.jspf.parser.RFC4408SPF1Parser;
 import org.apache.james.jspf.policies.InitialChecksPolicy;
 import org.apache.james.jspf.policies.NeutralIfNotMatchPolicy;
@@ -65,7 +65,7 @@ import org.slf4j.LoggerFactory;
 import org.xbill.DNS.lookup.NoSuchDomainException;
 
 /**
- * This class is used to generate a SPF-Test and provided all intressting data.
+ *  An {@link SPFChecker} implementation to start the SPF record validation.
  */
 public class SPF implements SPFChecker {
     private static final Logger LOGGER = LoggerFactory.getLogger(SPF.class);
@@ -202,13 +202,18 @@ public class SPF implements SPFChecker {
     private SPFExecutor executor;
 
     /**
-     * Uses passed logger and passed dnsServicer
-     * 
-     * @param dnsProbe the dns provider
+     * Creates an instance with the provided dnsService and executor.
+     *
+     * @param dnsService    the dns provider
+     * @param spfExecutor   the {@link SPFExecutor}
+     * @see DNSServiceXBillImpl
+     * @see org.apache.james.jspf.executor.AsynchronousSPFExecutor
+     * @see SynchronousSPFExecutor
      */
-    public SPF(DNSService dnsProbe) {
+    public SPF(DNSService dnsService, SPFExecutor spfExecutor) {
         super();
-        this.dnsProbe = dnsProbe;
+        this.dnsProbe = dnsService;
+        this.executor = spfExecutor;
         WiringServiceTable wiringService = new WiringServiceTable();
         wiringService.put(DNSServiceEnabled.class, this.dnsProbe);
         this.macroExpand = new MacroExpand(this.dnsProbe);
@@ -216,15 +221,29 @@ public class SPF implements SPFChecker {
         this.parser = new RFC4408SPF1Parser(new 
DefaultTermsFactory(wiringService));
         // We add this after the parser creation because services cannot be 
null
         wiringService.put(SPFCheckEnabled.class, this);
-        this.executor = new AsynchronousSPFExecutor(dnsProbe);
     }
-    
-    
+
+    /**
+     * Creates an instances with the provided DNSService and a 
SynchronousSPFExecutor
+     *
+     * @see DNSServiceXBillImpl
+     * @param dnsService the dns service
+     */
+    public SPF(DNSService dnsService) {
+        this(dnsService, new SynchronousSPFExecutor(dnsService));
+    }
+
     /**
      * Uses passed services
-     * 
+     *
+     * @see DNSServiceXBillImpl
+     * @see org.apache.james.jspf.executor.AsynchronousSPFExecutor
+     * @see SynchronousSPFExecutor
+     * @see RFC4408SPF1Parser
      * @param dnsProbe the dns provider
      * @param parser the parser to use
+     * @param macroExpand a {@link MacroExpand} instance
+     * @param executor an executor
      */
     public SPF(DNSService dnsProbe, SPFRecordParser parser, MacroExpand 
macroExpand, SPFExecutor executor) {
         super();
diff --git 
a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
 
b/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
index 8037672..6943162 100644
--- 
a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
+++ 
b/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
@@ -24,13 +24,27 @@ import static org.junit.Assert.assertEquals;
 import org.apache.james.jspf.executor.SPFResult;
 import org.apache.james.jspf.impl.DefaultSPF;
 import org.apache.james.jspf.impl.SPF;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.xbill.DNS.Lookup;
+import org.xbill.DNS.SimpleResolver;
+
+import java.net.UnknownHostException;
 
 public class AsynchronousSPFExecutorIntegrationTest {
+    @BeforeClass
+    public static void setup() {
+        System.out.println("Setting default resolver");
+        try {
+            Lookup.setDefaultResolver(new SimpleResolver());
+        } catch (UnknownHostException e) {
+            throw new RuntimeException(e);
+        }
+    }
 
     @Test
     public void test() {
-        SPF spf = new DefaultSPF();
+        SPF spf = DefaultSPF.createAsync();
         SPFResult result = spf.checkSPF("109.197.176.25", "n...@linagora.com", 
"linagora.com");
         System.out.println(result.getResult());
         System.out.println(result.getExplanation());
@@ -39,4 +53,24 @@ public class AsynchronousSPFExecutorIntegrationTest {
         assertEquals("Received-SPF: pass (spfCheck: domain of linagora.com 
designates 109.197.176.25 as permitted sender) client-ip=109.197.176.25; 
envelope-from=n...@linagora.com; helo=linagora.com;",
             result.getHeader());
     }
+
+    @Test
+    public void shouldHandleDomainNotFound() {
+        SPF spf = DefaultSPF.createAsync();
+        SPFResult result = 
spf.checkSPF("207.54.72.202","do_not_re...@reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de","reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de");
+        System.out.println(result.getResult());
+        System.out.println(result.getExplanation());
+        System.out.println(result.getHeader());
+        assertEquals("none", result.getResult());
+    }
+
+    @Test
+    public void shouldHandleSPFNotFound() {
+        SPF spf = DefaultSPF.createAsync();
+        SPFResult result = 
spf.checkSPF("207.54.72.202","do_not_reply@de","de");
+        System.out.println(result.getResult());
+        System.out.println(result.getExplanation());
+        System.out.println(result.getHeader());
+        assertEquals("none", result.getResult());
+    }
 }
\ No newline at end of file
diff --git 
a/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java 
b/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java
index fa5b70e..8378340 100644
--- a/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java
+++ b/resolver/src/test/java/org/apache/james/jspf/DefaultSPFResolverTest.java
@@ -25,8 +25,13 @@ import org.junit.Test;
 
 public class DefaultSPFResolverTest {
     @Test
-    public void shouldHandleNotFound() {
+    public void shouldHandleDomainNotFound() {
         String spfResult = new 
DefaultSPF().checkSPF("207.54.72.202","do_not_re...@reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de","reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de").getResult();
         Assert.assertEquals("none", spfResult);
     }
+    @Test
+    public void shouldHandleSPFNotFound() {
+        String spfResult = new 
DefaultSPF().checkSPF("207.54.72.202","do_not_reply@de","de").getResult();
+        Assert.assertEquals("none", spfResult);
+    }
 }
diff --git 
a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
 
b/resolver/src/test/java/org/apache/james/jspf/SynchronousSPFExecutorIntegrationTest.java
similarity index 59%
copy from 
resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
copy to 
resolver/src/test/java/org/apache/james/jspf/SynchronousSPFExecutorIntegrationTest.java
index 8037672..f78488e 100644
--- 
a/resolver/src/test/java/org/apache/james/jspf/AsynchronousSPFExecutorIntegrationTest.java
+++ 
b/resolver/src/test/java/org/apache/james/jspf/SynchronousSPFExecutorIntegrationTest.java
@@ -19,18 +19,32 @@
 
 package org.apache.james.jspf;
 
-import static org.junit.Assert.assertEquals;
-
 import org.apache.james.jspf.executor.SPFResult;
 import org.apache.james.jspf.impl.DefaultSPF;
 import org.apache.james.jspf.impl.SPF;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.xbill.DNS.Lookup;
+import org.xbill.DNS.SimpleResolver;
 
-public class AsynchronousSPFExecutorIntegrationTest {
+import java.net.UnknownHostException;
+
+import static org.junit.Assert.assertEquals;
+
+public class SynchronousSPFExecutorIntegrationTest {
+    @BeforeClass
+    public static void setup() {
+        System.out.println("Setting default resolver");
+        try {
+            Lookup.setDefaultResolver(new SimpleResolver());
+        } catch (UnknownHostException e) {
+            throw new RuntimeException(e);
+        }
+    }
 
     @Test
     public void test() {
-        SPF spf = new DefaultSPF();
+        SPF spf = DefaultSPF.createSync();
         SPFResult result = spf.checkSPF("109.197.176.25", "n...@linagora.com", 
"linagora.com");
         System.out.println(result.getResult());
         System.out.println(result.getExplanation());
@@ -39,4 +53,24 @@ public class AsynchronousSPFExecutorIntegrationTest {
         assertEquals("Received-SPF: pass (spfCheck: domain of linagora.com 
designates 109.197.176.25 as permitted sender) client-ip=109.197.176.25; 
envelope-from=n...@linagora.com; helo=linagora.com;",
             result.getHeader());
     }
+
+    @Test
+    public void shouldHandleDomainNotFound() {
+        SPF spf = DefaultSPF.createSync();
+        SPFResult result = 
spf.checkSPF("207.54.72.202","do_not_re...@reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de","reyifglerifwukfvbdjhrkbvebvekvfulervkerkeruerbeb.de");
+        System.out.println(result.getResult());
+        System.out.println(result.getExplanation());
+        System.out.println(result.getHeader());
+        assertEquals("none", result.getResult());
+    }
+
+    @Test
+    public void shouldHandleSPFNotFound() {
+        SPF spf = DefaultSPF.createSync();
+        SPFResult result = 
spf.checkSPF("207.54.72.202","do_not_reply@de","de");
+        System.out.println(result.getResult());
+        System.out.println(result.getExplanation());
+        System.out.println(result.getHeader());
+        assertEquals("none", result.getResult());
+    }
 }
\ No newline at end of file


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

Reply via email to