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

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new a2e5f53aa7 Don't fail test on bind failure of the default port
a2e5f53aa7 is described below

commit a2e5f53aa752f6c52d15b37b6a942a24a25f5058
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Feb 5 19:02:09 2024 +0000

    Don't fail test on bind failure of the default port
---
 .../org/apache/jena/fuseki/main/FusekiServer.java  | 11 +++++++++-
 .../apache/jena/fuseki/main/cmds/FusekiMain.java   |  6 ++++--
 .../jena/fuseki/main/TestFusekiServerBuild.java    | 25 ++++++++++++++++++++--
 3 files changed, 37 insertions(+), 5 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
index bf5688849f..aebf5dc662 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
@@ -147,6 +147,16 @@ public class FusekiServer {
         return new Builder(serviceDispatchRegistry);
     }
 
+    /**
+     * Default port when running in Java via {@code FusekiServer....build()}.
+     * The server will be http://localhost:3330.
+     *
+     * This is not the command line port (3030) which the command line 
programme sets.
+     *
+     * See {@link FusekiMain#defaultPort} and {@link 
FusekiMain#defaultHttpsPort}.
+     */
+    public static final int DefaultServerPort  = 3330;
+
     private final Server server;
     private int httpPort;
     private int httpsPort;
@@ -375,7 +385,6 @@ public class FusekiServer {
 
     /** FusekiServer.Builder */
     public static class Builder {
-        private static final int DefaultServerPort  = 3330;
         private static final int PortUnset          = -2;
         private static final int PortInactive       = -3;
 
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
index 2f2b2b59ea..b5a94499f9 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/cmds/FusekiMain.java
@@ -64,8 +64,10 @@ import org.apache.jena.tdb1.transaction.TransactionManager;
 import org.slf4j.Logger;
 
 public class FusekiMain extends CmdARQ {
-    private static int defaultPort          = 3030;
-    private static int defaultHttpsPort     = 3043;
+    /** Default HTTP port when running from the command line. */
+    public static int defaultPort          = 3030;
+    /** Default HTTPS port when running from the command line. */
+    public static int defaultHttpsPort     = 3043;
 
     private static ArgDecl  argMem          = new ArgDecl(ArgDecl.NoValue,  
"mem");
     private static ArgDecl  argUpdate       = new ArgDecl(ArgDecl.NoValue,  
"update", "allowUpdate");
diff --git 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
index 2e97e8d63f..cefa3ae31d 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
@@ -28,9 +28,11 @@ import java.io.IOException;
 import java.util.function.Consumer;
 
 import org.apache.jena.atlas.iterator.Iter;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.atlas.logging.LogCtl;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.fuseki.Fuseki;
+import org.apache.jena.fuseki.FusekiException;
 import org.apache.jena.fuseki.server.DataAccessPointRegistry;
 import org.apache.jena.fuseki.server.DataService;
 import org.apache.jena.fuseki.server.Operation;
@@ -99,14 +101,33 @@ public class TestFusekiServerBuild {
 
     // Build with defaults.
     @Test public void fuseki_build_dft_port_01() {
+        // In case another unrelated Fuseki server is running on port 3330 in 
another JVM,
+        // this test logs the bind failure but does not fail the test.
+        // Because this tests for "defaults", it's quite easy to have another 
server running.
+
         DatasetGraph dsg = dataset();
-        int port = 3330;   // Default port.
+        // Default embedded server port (command line default is 3030).
+        int port = FusekiServer.DefaultServerPort;
+        // Server, using the defaults.
         FusekiServer server = FusekiServer.create()
                 .add("/ds", dsg)
                 .build();
         try {
             
assertTrue(server.getDataAccessPointRegistry().isRegistered("/ds"));
-            server.start();
+            try {
+                server.start();
+            } catch (FusekiException ex) {
+                //org.apache.jena.fuseki.FusekiException: java.io.IOException: 
Failed to bind to 0.0.0.0/0.0.0.0:3330
+                if ( ex.getCause() instanceof IOException ex2 ) {
+                    if ( ex2.getMessage().matches("Failed to bind to 
.*:"+port) ) {
+                        // Some other Fuseki running on this machine.
+                        Log.warn(this, "Failed to bind port "+port+" - another 
Fuseki running on this machine?");
+                        return;
+                    }
+                }
+                // Not a port binding problem - it's a real test failure.
+                throw ex;
+            }
             query("http://localhost:"+port+"/ds/query";, "SELECT * { ?s ?p 
?o}", qExec-> {
                 RowSet rs = qExec.select();
                 assertFalse(rs.hasNext());

Reply via email to