JENA-1350: Use embedded Fuseki for testing

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/a363223b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/a363223b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/a363223b

Branch: refs/heads/master
Commit: a363223b270fb104896e9a2875141dfa12960488
Parents: 0a71419
Author: Andy Seaborne <[email protected]>
Authored: Sun May 28 18:19:31 2017 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Sun May 28 18:19:49 2017 +0100

----------------------------------------------------------------------
 jena-fuseki2/jena-fuseki-core/pom.xml           |  13 --
 .../src/main/webapp/WEB-INF/web.xml             |   2 +-
 .../java/org/apache/jena/fuseki/ServerCtl.java  |  21 ++-
 jena-fuseki2/jena-fuseki-embedded/pom.xml       |  32 +++-
 .../fuseki/embedded/FusekiEmbeddedServer.java   |  20 +-
 .../jena/fuseki/embedded/FusekiTestAuth.java    | 182 +++++++++++++++++++
 .../jena/fuseki/embedded/FusekiTestServer.java  | 123 ++++++++-----
 .../jena/fuseki/embedded/TS_EmbeddedFuseki.java |   2 +
 .../fuseki/embedded/TestFusekiTestAuth.java     | 100 ++++++++++
 .../fuseki/embedded/TestFusekiTestServer.java   |  60 ++++++
 jena-integration-tests/pom.xml                  |   2 +-
 .../rdfconnection/TestRDFConnectionRemote.java  |   1 -
 jena-jdbc/jena-jdbc-driver-bundle/pom.xml       |   4 +-
 jena-jdbc/jena-jdbc-driver-remote/pom.xml       | 164 ++++++++---------
 .../jena/jdbc/remote/TS_JdbcDriverRemote.java   |   6 +-
 .../TestRemoteEndpointConnection.java           |  16 +-
 .../TestRemoteEndpointConnectionWithAuth.java   |  57 ++----
 ...stRemoteEndpointConnectionWithGraphUris.java |  16 +-
 ...oteEndpointConnectionWithResultSetTypes.java |  16 +-
 .../metadata/TestRemoteConnectionMetadata.java  |  12 +-
 .../results/TestRemoteEndpointResults.java      |  18 +-
 .../TestRemoteEndpointResultsWithAuth.java      |  49 ++---
 .../TestRemoteEndpointResultsWithGraphUris.java |  18 +-
 ...RemoteEndpointResultsWithResultSetTypes.java |  18 +-
 .../TestRemoteEndpointStatements.java           |  12 +-
 25 files changed, 665 insertions(+), 299 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-core/pom.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/pom.xml 
b/jena-fuseki2/jena-fuseki-core/pom.xml
index b72139a..d7e70a7 100644
--- a/jena-fuseki2/jena-fuseki-core/pom.xml
+++ b/jena-fuseki2/jena-fuseki-core/pom.xml
@@ -195,19 +195,6 @@
       </plugin>
 
       <plugin>
-        <!-- Include the test jar for mebedded usein testing (eg. 
jena-jdbc-driver-remote) -->
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-source-plugin</artifactId>
         <executions>

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml 
b/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
index 5556726..dbd27a7 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
+++ b/jena-fuseki2/jena-fuseki-core/src/main/webapp/WEB-INF/web.xml
@@ -277,7 +277,7 @@
   </mime-mapping>
   <mime-mapping>
     <extension>nt</extension>
-    <mime-type>applicartion/n-triples</mime-type>
+    <mime-type>application/n-triples</mime-type>
   </mime-mapping>
   <mime-mapping>
     <extension>nq</extension>

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerCtl.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerCtl.java
 
b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerCtl.java
index 8c1407b..d99bb5b 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerCtl.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/ServerCtl.java
@@ -44,6 +44,14 @@ import org.apache.jena.update.UpdateExecutionFactory ;
 import org.apache.jena.update.UpdateProcessor ;
 
 /**
+ * <b>Note:</b>
+ * <br/>
+ * <em> There is a {@code FusekiTestServer} in the basic Fuseki server which 
is more
+ * appropriate for testing SPARQL protocols. It does not have a on-disk 
footprint.</em>
+ * <br/>
+ * This class is
+ * primarily for testing the full Fuseki server and has a full on-disk 
configuration.
+ * 
  * Manage a single server for use with tests. It supports three modes:
  * <ul>
  * <li>One server for a whole test suite
@@ -51,12 +59,14 @@ import org.apache.jena.update.UpdateProcessor ;
  * <li>One server per individual test
  * </ul>
  * One server per individual test can be troublesome due to connections not 
closing down
- * fast enough (left in TCP state {@code TIME_WAIT} which is 2 minutes) and 
also can be slow.
- * One server per test class is a good compromise. 
- * <p> The data in the server is always reseet between tests.
+ * fast enough (left in TCP state {@code TIME_WAIT} which is 2 minutes) and 
also can be
+ * slow. One server per test class is a good compromise.
+ * <p>
+ * The data in the server is always reseet between tests.
  * <p>
- * Using a connection pooling HttpClient (see {@link 
HttpOp#createPoolingHttpClient()}) is important,
- * both for test performance and for reducing the TCP connection load on the 
operating system.  
+ * Using a connection pooling HttpClient (see {@link 
HttpOp#createPoolingHttpClient()}) is
+ * important, both for test performance and for reducing the TCP connection 
load on the
+ * operating system.
  * <p>
  * Usage:
  * </p>
@@ -69,6 +79,7 @@ import org.apache.jena.update.UpdateProcessor ;
  * </pre>
  * <p>
  * In the test class, put:
+ * 
  * <pre>
  * {@literal @BeforeClass} public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
  * {@literal @AfterClass}  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-embedded/pom.xml 
b/jena-fuseki2/jena-fuseki-embedded/pom.xml
index 95d6dfd..cb38ccd 100644
--- a/jena-fuseki2/jena-fuseki-embedded/pom.xml
+++ b/jena-fuseki2/jena-fuseki-embedded/pom.xml
@@ -37,10 +37,22 @@
       <version>2.7.0-SNAPSHOT</version>
       <!-- No specific logging - leave to the application -->
       <exclusions>
+
+        <!-- No Apache Shiro - exclude to make sure it does not get accidently 
picked up -->
+        <exclusion>
+          <groupId>org.apache.shiro</groupId>
+          <artifactId>shiro-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.shiro</groupId>
+          <artifactId>shiro-web</artifactId>
+        </exclusion>
+        
         <!-- Parts of Jena not needed but picked up via jena-fuseki-core.
              The application can put back any of these if it wants to use
              them, e.g. a text-indexed dataset, providing the version is 
compatible.
-           -->
+             -->
+
         <exclusion>
           <groupId>org.apache.jena</groupId>
           <artifactId>jena-cmds</artifactId>
@@ -84,6 +96,18 @@
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-source-plugin</artifactId>
         <executions>
           <execution>
@@ -93,6 +117,12 @@
               <goal>jar-no-fork</goal>
             </goals>
           </execution>
+          <execution>
+            <id>attach-sources-test</id>
+            <goals>
+              <goal>test-jar-no-fork</goal>
+            </goals>
+          </execution>
         </executions>
       </plugin>
 

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
index d3da284..e91b508 100644
--- 
a/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/main/java/org/apache/jena/fuseki/embedded/FusekiEmbeddedServer.java
@@ -44,6 +44,7 @@ import org.apache.jena.query.Dataset ;
 import org.apache.jena.riot.WebContent;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.eclipse.jetty.http.MimeTypes;
+import org.eclipse.jetty.security.SecurityHandler;
 import org.eclipse.jetty.server.HttpConnectionFactory ;
 import org.eclipse.jetty.server.Server ;
 import org.eclipse.jetty.server.ServerConnector ;
@@ -172,6 +173,7 @@ public class FusekiEmbeddedServer {
         private boolean                  withStats          = false ;
         private String                   contextPath        = "/" ;
         private String                   staticContentDir   = null ;
+        private SecurityHandler          securityHandler    = null ;
 
         /** Set the port to run on. */ 
         public Builder setPort(int port) {
@@ -200,7 +202,18 @@ public class FusekiEmbeddedServer {
             this.staticContentDir = directory;
             return this ;
         }
-
+        
+        /** Set a Jetty SecurityHandler.
+         *  By default, the server runs with no security.
+         *  This is more for using the basic server for testing.
+         *  The full Fuseki server provides secjurity with Apache Shiro
+         *  and a defensive reverse proxy (e.g. Apache httpd) in front og the 
Jetty server
+         *  can also be used, which provides a wide varient of proven security 
options.   
+         */
+        public Builder setSecurityHandler(SecurityHandler securityHandler) {
+            this.securityHandler = securityHandler;
+            return this;
+        }
 
         /** Add the "/$/stats" servlet that responds with stats about the 
server,
          * including counts of all calls made.
@@ -224,7 +237,6 @@ public class FusekiEmbeddedServer {
         public Builder add(String name, Dataset ds, boolean allowUpdate) {
             return add(name, ds.asDatasetGraph(), allowUpdate) ;
         }
-            
         
         /** Add the dataset with given name and a default set of services. */  
         public Builder add(String name, DatasetGraph dsg, boolean allowUpdate) 
{
@@ -286,7 +298,9 @@ public class FusekiEmbeddedServer {
             context.setDisplayName(Fuseki.servletRequestLogName) ;
             context.setErrorHandler(new FusekiErrorHandler1()) ;
             context.setContextPath(contextPath) ;
-
+            if ( securityHandler != null )
+                context.setSecurityHandler(securityHandler);
+            
             setMimeTypes(context);
             servlets(context);
             

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestAuth.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestAuth.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestAuth.java
new file mode 100644
index 0000000..992b9d2
--- /dev/null
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestAuth.java
@@ -0,0 +1,182 @@
+/**
+ * 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.jena.fuseki.embedded;
+
+import static org.apache.jena.fuseki.server.FusekiEnv.choosePort;
+
+import java.util.Objects;
+
+import org.apache.jena.atlas.web.HttpException;
+import org.apache.jena.fuseki.FusekiException;
+import org.apache.jena.sparql.core.DatasetGraph ;
+import org.apache.jena.sparql.core.DatasetGraphFactory;
+import org.apache.jena.web.HttpSC;
+import org.eclipse.jetty.security.*;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.util.security.Constraint;
+import org.eclipse.jetty.util.security.Credential;
+import org.eclipse.jetty.util.security.Password;
+import org.junit.Assert;
+
+/**
+ * Testing HTTP athentication.
+ * <p>
+ * {@code FusekiAuth} provides helper code for before/after (any of 
suite/class/test).
+ * The pattern of usage is:
+ * <pre>
+ * 
+ * &#64;BeforeClass
+ * public static void beforeClassAuth() {
+ *     SecurityHandler sh = FusekiAuth.makeSimpleSecurityHandler("/*", "USER", 
"PASSWORD");
+ *     FusekiAuth.setupServer(true, sh);
+ * }
+ * 
+ * &#64;AfterClass
+ * public static void afterClassAuth() {
+ *     FusekiAuth.teardownServer();
+ *     // Clear up any pooled connections.
+ *     HttpOp.setDefaultHttpClient(HttpOp.createPoolingHttpClient());
+ * }
+ * 
+ * &#64;Test
+ * public void myAuthTest() {
+ *     BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
+ *     Credentials credentials = new UsernamePasswordCredentials("USER", 
"PASSWORD");
+ *     credsProvider.setCredentials(AuthScope.ANY, credentials);
+ *     HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
+ *     try (TypedInputStream in = HttpOp.execHttpGet(ServerCtl.urlDataset(), 
"* /*", client, null)) {}
+ * }
+ * 
+ * &#64;Test
+ * public void myAuthTestRejected() {
+ *     BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
+ *     Credentials credentials = new UsernamePasswordCredentials("USER", 
"PASSWORD");
+ *     credsProvider.setCredentials(AuthScope.ANY, credentials);
+ *     HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
+ *     try (TypedInputStream in = HttpOp.execHttpGet(ServerCtl.urlDataset(), 
"* /*", client, null)) {}
+ *     catch (HttpException ex) {
+ *         throw assertAuthHttpException(ex);
+ *     }
+ * }
+ * </pre>
+ * 
+ * {@code @BeforeClass} can be {@code @Before} but server stop-start is 
expensive so a
+ * large test suite may end up quite slow.
+ */
+public class FusekiTestAuth {
+    private static int currentPort = choosePort() ;
+    
+    public static int port() {
+        return currentPort ;
+    }
+    
+    static boolean CLEAR_DSG_DIRECTLY = true ;
+    static private DatasetGraph dsgTesting ;
+    
+    // Abstraction that runs a SPARQL server for tests.
+    public static final String urlRoot()            { return 
"http://localhost:"+port()+"/" ; }
+    public static final String datasetPath()        { return "/dataset" ; }
+    public static final String urlDataset()         { return 
"http://localhost:"+port()+datasetPath() ; }
+    public static final DatasetGraph getDataset()   { return dsgTesting ; }
+    
+    public static final String serviceUpdate()      { return 
"http://localhost:"+port()+datasetPath()+"/update" ; } 
+    public static final String serviceQuery()       { return 
"http://localhost:"+port()+datasetPath()+"/query" ; }
+    public static final String serviceGSP()         { return 
"http://localhost:"+port()+datasetPath()+"/data" ; }
+    
+    private static FusekiEmbeddedServer server ;
+    
+    public static void setupServer(boolean updateable, SecurityHandler sh) {
+        // Clean datasets.
+        dsgTesting = DatasetGraphFactory.createTxnMem();
+        server = FusekiEmbeddedServer.create()
+            .add(datasetPath(), dsgTesting)
+            .setPort(port())
+            .setSecurityHandler(sh)
+            .build()
+            .start();
+    }
+    
+    public static void teardownServer() {
+        if ( server != null ) {
+            server.stop() ;
+            server = null ;
+        }
+    }
+
+    /** Create a Jetty {@link SecurityHandler} for basic authentication, one 
user/password/role. */
+    public static SecurityHandler makeSimpleSecurityHandler(String pathSpec, 
String user, String password) {
+            return makeSimpleSecurityHandler(pathSpec, null, user, password, 
"FusekiTestRole");
+    }
+
+    /** Create a Jetty {@link SecurityHandler} for basic authentication, one 
user/password/role. */
+    public static SecurityHandler makeSimpleSecurityHandler(String pathSpec, 
String realm, String user, String password, String role) {
+        Objects.requireNonNull(user);
+        Objects.requireNonNull(password);
+        Objects.requireNonNull(role);
+        
+        Constraint constraint = new Constraint() ;
+        constraint.setName(Constraint.__BASIC_AUTH) ;
+        String[] roles = new String[]{role};
+        constraint.setRoles(roles) ;
+        constraint.setAuthenticate(true) ;
+
+        ConstraintMapping mapping = new ConstraintMapping() ;
+        mapping.setConstraint(constraint) ;
+        mapping.setPathSpec("/*") ;
+
+        IdentityService identService = new DefaultIdentityService() ;
+        
+        ConstraintSecurityHandler securityHandler = new 
ConstraintSecurityHandler() ;
+        securityHandler.addConstraintMapping(mapping) ;
+        securityHandler.setIdentityService(identService) ;
+        
+        UserStore userStore = makeUserStore(user, password, role);
+        
+        HashLoginService loginService = new HashLoginService("Fuseki 
Authentication") ;
+        loginService.setUserStore(userStore);
+        loginService.setIdentityService(identService) ;
+        
+        securityHandler.setLoginService(loginService) ;
+        securityHandler.setAuthenticator(new BasicAuthenticator()) ;
+        if ( realm != null )
+            securityHandler.setRealmName(realm);
+        
+        return securityHandler;
+    }
+
+    /** Very simple! */
+    private static UserStore makeUserStore(String user, String password, 
String role) {
+        Credential cred  = new Password(password);
+        PropertyUserStore propertyUserStore = new PropertyUserStore();
+        String[] roles = role == null ? null : new String[]{role};
+        propertyUserStore.addUser(user, cred, roles);
+        try { propertyUserStore.start(); }
+        catch (Exception ex) { throw new FusekiException("UserStore", ex); }
+        return propertyUserStore;
+    }
+
+    /** Assert that an {@code HttpException} ias an authorization failure.
+     * This is normally 403.  401 indicates no retryu with credentials.
+     */
+    public static HttpException assertAuthHttpException(HttpException ex) {
+        int rc = ex.getResponseCode();
+        Assert.assertTrue(rc == HttpSC.FORBIDDEN_403 || rc == 
HttpSC.UNAUTHORIZED_401 );
+        return ex;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestServer.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestServer.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestServer.java
index 48dd278..e1a4488 100644
--- 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestServer.java
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/FusekiTestServer.java
@@ -18,19 +18,19 @@
 
 package org.apache.jena.fuseki.embedded;
 
-import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.CLASS ;
-import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.SUITE ;
-import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.TEST ;
+import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.CLASS;
+import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.SUITE;
+import static 
org.apache.jena.fuseki.embedded.FusekiTestServer.ServerScope.TEST;
+import static org.apache.jena.fuseki.server.FusekiEnv.choosePort;
 
 import java.util.concurrent.atomic.AtomicInteger ;
 
 import org.apache.http.client.HttpClient ;
 import org.apache.http.impl.client.CloseableHttpClient ;
 import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.fuseki.server.FusekiEnv;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.DatasetGraphFactory ;
+import org.apache.jena.sparql.core.DatasetGraphFactory;
 import org.apache.jena.sparql.modify.request.Target ;
 import org.apache.jena.sparql.modify.request.UpdateDrop ;
 import org.apache.jena.system.Txn ;
@@ -38,22 +38,22 @@ import org.apache.jena.update.Update ;
 import org.apache.jena.update.UpdateExecutionFactory ;
 import org.apache.jena.update.UpdateProcessor ;
 
-// NOT FINISHED
-
 /**
  * Manage a single server for use with tests. It supports three modes:
  * <ul>
- * <li>{@code ServerScope.SUITE} : One server for a whole test suite
- * <li>{@code ServerScope.CLASS} : One server per test class
- * <li>{@code ServerScope.TEST} :One server per individual test
+ * <li>One server for a whole test suite
+ * <li>One server per test class
+ * <li>One server per individual test
  * </ul>
  * One server per individual test can be troublesome due to connections not 
closing down
- * fast enough and can also be slow.
- * <p> One server per test class is a good compromise. 
- * <p> The data in the server is always reset between tests in all modes.
+ * fast enough (left in TCP state {@code TIME_WAIT} which is 2 minutes) and 
also can be
+ * slow. One server per test class is a good compromise.
+ * <p>
+ * The data in the server is always reseet between tests.
  * <p>
- * Using a connection pooling HttpClient (see {@link 
HttpOp#createPoolingHttpClient()}) is important,
- * both for test performance and for reducing the TCP connection load on the 
operating system.  
+ * Using a connection pooling HttpClient (see {@link 
HttpOp#createPoolingHttpClient()}) is
+ * important, both for test performance and for reducing the TCP connection 
load on the
+ * operating system.
  * <p>
  * Usage:
  * </p>
@@ -61,40 +61,67 @@ import org.apache.jena.update.UpdateProcessor ;
  * In the test suite, put:
  * 
  * <pre>
- *  {@literal @BeforeClass} static public void beforeSuiteClass() { 
ServerCtl.ctlBeforeTestSuite(); } 
- *  {@literal @AfterClass}  static public void afterSuiteClass()  { 
ServerCtl.ctlAfterTestSuite(); }
+ *  {@literal @BeforeClass} static public void beforeSuiteClass() { 
FusekiTestServer.ctlBeforeTestSuite(); } 
+ *  {@literal @AfterClass}  static public void afterSuiteClass()  { 
FusekiTestServer.ctlAfterTestSuite(); }
  * </pre>
  * <p>
  * In the test class, put:
+ * 
+ * <pre>
+ * {@literal @BeforeClass} public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+ * {@literal @AfterClass}  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+ * {@literal @Before}      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+ * {@literal @After}       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); }
+ * </pre>
+ * 
+ * Much of this machinery is unnessecary for just running a sever in the 
background:
+ * 
  * <pre>
- * {@literal @BeforeClass} public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
- * {@literal @AfterClass}  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
- * {@literal @Before}      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
- * {@literal @After}       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); }
+ *   private static FusekiEmbeddedServer server ;
+ *   private static DatasetGraph serverdsg = 
DatasetGraphFactory.createTxnMem() ;
+ *
+ *   &#64;BeforeClass
+ *   public static void beforeClass() {
+ *       server = FusekiEmbeddedServer.create()
+ *           .setPort(....)
+ *           .add("/ds", serverdsg)
+ *           .build()
+ *           .start();
+ *   }
+ *
+ *   &#64;Before
+ *   public void beforeTest() {
+ *       // Clear up data in server servers
+ *       Txn.executeWrite(serverdsg, ()->serverdsg.clear()) ;
+ *   }
+ *       
+ *   &#64;AfterClass
+ *   public static void afterClass() {
+ *       server.stop(); 
+ *   }
  * </pre>
  */
 public class FusekiTestServer {
     /* Cut&Paste versions:
 
     Test suite (TS_*)
-    @BeforeClass static public void beforeSuiteClass() { 
ServerCtl.ctlBeforeTestSuite(); } 
-    @AfterClass  static public void afterSuiteClass()  { 
ServerCtl.ctlAfterTestSuite(); }
+    @BeforeClass static public void beforeSuiteClass() { 
FusekiTestServer.ctlBeforeTestSuite(); } 
+    @AfterClass  static public void afterSuiteClass()  { 
FusekiTestServer.ctlAfterTestSuite(); }
 
     Test class (Test*)
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); }
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); }
+     
     */
-    
-    static HttpClient defaultHttpClient = HttpOp.getDefaultHttpClient();
 
     // Note: it is important to cleanly close a PoolingHttpClient across 
server restarts
     // otherwise the pooled connections remain for the old server. 
     
     /*package : for import static */ enum ServerScope { SUITE, CLASS, TEST }
     private static ServerScope serverScope = ServerScope.CLASS ;
-    private static int currentPort = FusekiEnv.choosePort() ;
+    private static int currentPort = choosePort() ;
     
     public static int port() {
         return currentPort ;
@@ -104,12 +131,9 @@ public class FusekiTestServer {
     static boolean CLEAR_DSG_DIRECTLY = true ;
     static private DatasetGraph dsgTesting ;
     
-    // reference count of start/stop server
-    private static AtomicInteger countServer    = new AtomicInteger() ; 
-    private static FusekiEmbeddedServer server  = null ;
-    
+    // Abstraction that runs a SPARQL server for tests.
     public static final String urlRoot()        { return 
"http://localhost:"+port()+"/" ; }
-    public static final String datasetPath()    { return "/ds_test" ; }
+    public static final String datasetPath()    { return "/dataset" ; }
     public static final String urlDataset()     { return 
"http://localhost:"+port()+datasetPath() ; }
     
     public static final String serviceUpdate()  { return 
"http://localhost:"+port()+datasetPath()+"/update" ; } 
@@ -172,23 +196,27 @@ public class FusekiTestServer {
     }
 
     /** Set a PoolingHttpClient */
-    private static void setPoolingHttpClient() {
+    public static void setPoolingHttpClient() {
         setHttpClient(HttpOp.createPoolingHttpClient()) ;
     }
 
     /** Restore the original setup */
     private static void resetDefaultHttpClient() {
-        setHttpClient(defaultHttpClient);
+        setHttpClient(HttpOp.createDefaultHttpClient());
     }
     
     /** Set the HttpClient - close the old one if appropriate */
-    /*package*/ static void setHttpClient(HttpClient newHttpClient) {
+    public static void setHttpClient(HttpClient newHttpClient) {
         HttpClient hc = HttpOp.getDefaultHttpClient() ;
         if ( hc instanceof CloseableHttpClient )
             IO.close((CloseableHttpClient)hc) ;
         HttpOp.setDefaultHttpClient(newHttpClient) ;
     }
     
+    // reference count of start/stop server
+    private static AtomicInteger countServer = new AtomicInteger() ; 
+    private static FusekiEmbeddedServer server        = null ;
+    
     /*package*/ static void allocServer() {
         if ( countServer.getAndIncrement() == 0 )
             setupServer(true) ;
@@ -200,19 +228,19 @@ public class FusekiTestServer {
     }
     
     /*package*/ static void setupServer(boolean updateable) {
-        dsgTesting = DatasetGraphFactory.createTxnMem() ;
-        server =
-            FusekiEmbeddedServer.create()
-            .setPort(port())
-            .setLoopback(true)
+        dsgTesting = DatasetGraphFactory.createTxnMem();
+        server = FusekiEmbeddedServer.create()
             .add(datasetPath(), dsgTesting)
-            .build();
+            .setPort(port())
+            .build()
+            .start();
     }
     
     /*package*/ static void teardownServer() {
-        if ( server != null )
+        if ( server != null ) {
             server.stop() ;
-        server = null ;
+            server = null ;
+        }
     }
 
     /*package*/ static void resetServer() {
@@ -227,4 +255,7 @@ public class FusekiTestServer {
             catch (Throwable e) {e.printStackTrace(); throw e;}
         }
     }
+    
+    // ---- Helper code.
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TS_EmbeddedFuseki.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TS_EmbeddedFuseki.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TS_EmbeddedFuseki.java
index 07b4728..dd2d8e9 100644
--- 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TS_EmbeddedFuseki.java
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TS_EmbeddedFuseki.java
@@ -30,6 +30,8 @@ import org.junit.runners.Suite.SuiteClasses ;
 @SuiteClasses({
   TestEmbeddedFuseki.class
   , TestMultipleEmbedded.class
+  , TestFusekiTestServer.class
+  , TestFusekiTestAuth.class
 })
 public class TS_EmbeddedFuseki {
     @BeforeClass public static void setupForFusekiServer() {

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestAuth.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestAuth.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestAuth.java
new file mode 100644
index 0000000..70eaef9
--- /dev/null
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestAuth.java
@@ -0,0 +1,100 @@
+/*
+ * 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.jena.fuseki.embedded;
+
+import static 
org.apache.jena.fuseki.embedded.FusekiTestAuth.assertAuthHttpException;
+
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.Credentials;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.jena.atlas.logging.LogCtl;
+import org.apache.jena.atlas.web.HttpException;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.fuseki.Fuseki;
+import org.apache.jena.fuseki.FusekiLogging;
+import org.apache.jena.riot.web.HttpOp;
+import org.eclipse.jetty.security.SecurityHandler;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestFusekiTestAuth {
+    
+    static {
+        FusekiLogging.setLogging();
+        LogCtl.setLevel(Fuseki.serverLogName, "WARN");
+        LogCtl.setLevel(Fuseki.actionLogName, "WARN");
+        LogCtl.setLevel(Fuseki.requestLogName, "WARN");
+        LogCtl.setLevel(Fuseki.adminLogName, "WARN");
+        LogCtl.setLevel("org.eclipse.jetty", "WARN");
+    }
+    
+    private static String USER      = "user1234";
+    private static String PASSWORD  = "password1234";
+    
+    @BeforeClass
+    public static void ctlBeforeClass() {
+        SecurityHandler sh = FusekiTestAuth.makeSimpleSecurityHandler("/*", 
USER, PASSWORD);
+        FusekiTestAuth.setupServer(false, sh);
+    }
+
+    @AfterClass
+    public static void ctlAfterClass() {
+        FusekiTestAuth.teardownServer();
+        HttpOp.setDefaultHttpClient(HttpOp.createPoolingHttpClient());
+    }
+
+    @Test(expected=HttpException.class) 
+    public void testServer_auth_no_auth() {
+      // No Auth
+      try ( TypedInputStream in = 
HttpOp.execHttpGet(FusekiTestAuth.urlDataset(), "*/*") ) {}
+      catch (HttpException ex) { throw assertAuthHttpException(ex); }
+    }
+    
+    @Test public void testServer_auth() {
+        BasicCredentialsProvider credsProvider = new 
BasicCredentialsProvider();
+        Credentials credentials = new UsernamePasswordCredentials(USER, 
PASSWORD);
+        credsProvider.setCredentials(AuthScope.ANY, credentials);
+        HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
+        try ( TypedInputStream in = 
HttpOp.execHttpGet(FusekiTestAuth.urlDataset(), "*/*", client, null) ) {}
+    }
+    
+    @Test(expected=HttpException.class)
+    public void testServer_auth_bad_user() {
+        BasicCredentialsProvider credsProvider = new 
BasicCredentialsProvider();
+        Credentials credentials = new UsernamePasswordCredentials("USERUSER", 
PASSWORD);
+        credsProvider.setCredentials(AuthScope.ANY, credentials);
+        HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
+        try ( TypedInputStream in = 
HttpOp.execHttpGet(FusekiTestAuth.urlDataset(), "*/*", client, null) ) {}
+        catch (HttpException ex) { throw assertAuthHttpException(ex); }
+    }
+        
+    @Test(expected=HttpException.class)
+    public void testServer_auth_bad_password() {
+        BasicCredentialsProvider credsProv = new BasicCredentialsProvider();
+        credsProv.setCredentials(AuthScope.ANY, new 
UsernamePasswordCredentials(USER, "WRONG"));
+        HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProv).build();
+        
+        try ( TypedInputStream in = 
HttpOp.execHttpGet(FusekiTestAuth.urlDataset(), "*/*", client, null) ) {}
+        catch (HttpException ex) { throw assertAuthHttpException(ex); }
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestServer.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestServer.java
 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestServer.java
new file mode 100644
index 0000000..9bbe2a8
--- /dev/null
+++ 
b/jena-fuseki2/jena-fuseki-embedded/src/test/java/org/apache/jena/fuseki/embedded/TestFusekiTestServer.java
@@ -0,0 +1,60 @@
+/*
+ * 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.jena.fuseki.embedded;
+
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.jena.atlas.web.HttpException;
+import org.apache.jena.atlas.web.TypedInputStream;
+import org.apache.jena.riot.web.HttpOp;
+import org.apache.jena.web.HttpSC;
+import org.junit.*;
+
+public class TestFusekiTestServer {
+    
+//    @BeforeClass static public void beforeSuiteClass() { 
ServerCtl.ctlBeforeTestSuite(); } 
+//    @AfterClass  static public void afterSuiteClass()  { 
ServerCtl.ctlAfterTestSuite(); }
+
+    // This is file is the "suite".
+    
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeTestSuite(); FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass();      FusekiTestServer.ctlAfterTestSuite(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); }
+    
+    @Test public void testServer_1() {
+        HttpOp.execHttpGetString(FusekiTestServer.urlDataset());
+    }
+    
+    @Test public void testServer_2() {
+        BasicCredentialsProvider credsProv = new BasicCredentialsProvider();
+        credsProv.setCredentials(AuthScope.ANY, new 
UsernamePasswordCredentials("USER", "PASSWORD"));
+        HttpClient client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProv).build();
+        
+        // No auth set - should work.
+        try ( TypedInputStream in = 
HttpOp.execHttpGet(FusekiTestServer.urlDataset(), "*/*") ) {}
+        catch (HttpException ex) {
+            Assert.assertTrue(ex.getResponseCode() == HttpSC.FORBIDDEN_403 || 
ex.getResponseCode() == HttpSC.UNAUTHORIZED_401 );
+            throw ex;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/jena-integration-tests/pom.xml b/jena-integration-tests/pom.xml
index 7510d46..eeeb00d 100644
--- a/jena-integration-tests/pom.xml
+++ b/jena-integration-tests/pom.xml
@@ -96,7 +96,7 @@
       <artifactId>jena-fuseki-embedded</artifactId>
       <version>2.7.0-SNAPSHOT</version>
       <scope>test</scope>
-    </dependency>   
+    </dependency>
     
     <dependency>
       <groupId>org.slf4j</groupId>

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
----------------------------------------------------------------------
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
index 5f111a5..b60d0b9 100644
--- 
a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionRemote.java
@@ -37,7 +37,6 @@ public class TestRDFConnectionRemote extends 
AbstractTestRDFConnection {
     
     @BeforeClass
     public static void beforeClass() {
-        DatasetGraph dsg = DatasetGraphFactory.createTxnMem() ;
         server = FusekiEmbeddedServer.create()
             .setPort(2244)
             .add("/ds", serverdsg)

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-bundle/pom.xml
----------------------------------------------------------------------
diff --git a/jena-jdbc/jena-jdbc-driver-bundle/pom.xml 
b/jena-jdbc/jena-jdbc-driver-bundle/pom.xml
index c6f9529..42b869a 100644
--- a/jena-jdbc/jena-jdbc-driver-bundle/pom.xml
+++ b/jena-jdbc/jena-jdbc-driver-bundle/pom.xml
@@ -94,8 +94,8 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.jena</groupId>
-                       <artifactId>jena-fuseki1</artifactId>
-                       <version>1.7.0-SNAPSHOT</version>
+                       <artifactId>jena-fuseki-embedded</artifactId>
+                       <version>2.7.0-SNAPSHOT</version>
                        <scope>test</scope>
                </dependency>
                <dependency>

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/pom.xml
----------------------------------------------------------------------
diff --git a/jena-jdbc/jena-jdbc-driver-remote/pom.xml 
b/jena-jdbc/jena-jdbc-driver-remote/pom.xml
index 77a8552..109ffe2 100644
--- a/jena-jdbc/jena-jdbc-driver-remote/pom.xml
+++ b/jena-jdbc/jena-jdbc-driver-remote/pom.xml
@@ -18,88 +18,88 @@
 -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-       <modelVersion>4.0.0</modelVersion>
-       <parent>
-               <groupId>org.apache.jena</groupId>
-               <artifactId>jena-jdbc</artifactId>
-               <version>3.4.0-SNAPSHOT</version>
-       </parent>
-       <artifactId>jena-jdbc-driver-remote</artifactId>
-       <name>Apache Jena - JDBC Remote Endpoint Driver</name>
-       <description>A Jena JDBC driver for use with remote SPARQL 
endpoints.</description>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.jena</groupId>
+    <artifactId>jena-jdbc</artifactId>
+    <version>3.4.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>jena-jdbc-driver-remote</artifactId>
+  <name>Apache Jena - JDBC Remote Endpoint Driver</name>
+  <description>A Jena JDBC driver for use with remote SPARQL 
endpoints.</description>
 
-       <properties>
-               
<plugin.license.headerPath>${project.parent.basedir}</plugin.license.headerPath>
-       </properties>
+  <properties>
+    
<plugin.license.headerPath>${project.parent.basedir}</plugin.license.headerPath>
+  </properties>
 
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.jena</groupId>
-                       <artifactId>jena-jdbc-core</artifactId>
-                       <version>3.4.0-SNAPSHOT</version>
-               </dependency>
-               <!-- Test Dependencies -->
-               <dependency>
-                       <groupId>org.apache.jena</groupId>
-                       <artifactId>jena-jdbc-core</artifactId>
-                       <version>3.4.0-SNAPSHOT</version>
-                       <classifier>tests</classifier>
-                       <scope>test</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.jena</groupId>
-                       <artifactId>jena-fuseki1</artifactId>
-                       <version>1.7.0-SNAPSHOT</version>
-                       <scope>test</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.jena</groupId>
-                       <artifactId>jena-fuseki1</artifactId>
-                       <version>1.7.0-SNAPSHOT</version>
-                       <scope>test</scope>
-                       <classifier>tests</classifier>
-               </dependency>
-               <dependency>
-                       <groupId>junit</groupId>
-                       <artifactId>junit</artifactId>
-                       <scope>test</scope>
-               </dependency>
-       </dependencies>
-
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-jar-plugin</artifactId>
-                               <executions>
-                                       <execution>
-                                               <goals>
-                                                       <goal>test-jar</goal>
-                                               </goals>
-                                       </execution>
-                               </executions>
-                       </plugin>
-                       <!-- Javadoc Plugin -->
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-javadoc-plugin</artifactId>
-                               <configuration>
-                                       <quiet>true</quiet>
-                                       <encoding>UTF-8</encoding>
-                                       <charset>UTF-8</charset>
-                                       <docencoding>UTF-8</docencoding>
-                               </configuration>
-                               <executions>
-                                       <execution>
-                                               <phase>package</phase>
-                                               <goals>
-                                                       <!-- Produce Javadoc 
JARs for each module -->
-                                                       <goal>jar</goal>
-                                                       <goal>test-jar</goal>
-                                               </goals>
-                                       </execution>
-                               </executions>
-                       </plugin>
-               </plugins>
-       </build>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-jdbc-core</artifactId>
+      <version>3.4.0-SNAPSHOT</version>
+    </dependency>
+    <!-- Test Dependencies -->
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-jdbc-core</artifactId>
+      <version>3.4.0-SNAPSHOT</version>
+      <classifier>tests</classifier>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-fuseki-embedded</artifactId>
+      <version>2.7.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-fuseki-embedded</artifactId>
+      <version>2.7.0-SNAPSHOT</version>
+      <scope>test</scope>
+      <classifier>tests</classifier>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Javadoc Plugin -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <configuration>
+          <quiet>true</quiet>
+          <encoding>UTF-8</encoding>
+          <charset>UTF-8</charset>
+          <docencoding>UTF-8</docencoding>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <!-- Produce Javadoc JARs for each module -->
+              <goal>jar</goal>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/TS_JdbcDriverRemote.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/TS_JdbcDriverRemote.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/TS_JdbcDriverRemote.java
index 372f379..df04e56 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/TS_JdbcDriverRemote.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/TS_JdbcDriverRemote.java
@@ -17,7 +17,7 @@
  */
 package org.apache.jena.jdbc.remote;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer ;
 import org.apache.jena.jdbc.remote.connections.TestRemoteEndpointConnection;
 import 
org.apache.jena.jdbc.remote.connections.TestRemoteEndpointConnectionWithAuth;
 import 
org.apache.jena.jdbc.remote.connections.TestRemoteEndpointConnectionWithGraphUris;
@@ -60,11 +60,11 @@ public class TS_JdbcDriverRemote {
 
     @BeforeClass
     public static void beforeClassAbstract1() {
-        ServerCtl.ctlBeforeTestSuite() ;
+        FusekiTestServer.ctlBeforeTestSuite() ;
     }
 
     @AfterClass
     public static void afterClassAbstract1() {
-        ServerCtl.ctlAfterTestSuite() ;
+        FusekiTestServer.ctlAfterTestSuite() ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnection.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnection.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnection.java
index ccde079..d797379 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnection.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnection.java
@@ -20,7 +20,7 @@ package org.apache.jena.jdbc.remote.connections;
 
 import java.sql.SQLException;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.utils.TestUtils;
@@ -36,10 +36,10 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteEndpointConnection extends 
AbstractRemoteEndpointConnectionTests {
         
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
     
     @Override
     protected boolean supportsTimeouts() {
@@ -49,14 +49,14 @@ public class TestRemoteEndpointConnection extends 
AbstractRemoteEndpointConnecti
     
     @Override
     protected JenaConnection getConnection() throws SQLException {
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
     }
 
     @Override
     protected JenaConnection getConnection(Dataset ds) throws SQLException {
         // Set up the dataset
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
     }
 
 

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithAuth.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithAuth.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithAuth.java
index 08d8360..13c90b0 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithAuth.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithAuth.java
@@ -18,8 +18,6 @@
 
 package org.apache.jena.jdbc.remote.connections;
 
-import java.io.File ;
-import java.io.FileWriter ;
 import java.io.IOException ;
 import java.sql.SQLException ;
 
@@ -28,21 +26,15 @@ import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.HttpClient;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.HttpClients;
-import org.apache.jena.fuseki.ServerCtl ;
-import org.apache.jena.fuseki.server.FusekiConfig ;
-import org.apache.jena.fuseki.server.SPARQLServer ;
-import org.apache.jena.fuseki.server.ServerConfig ;
+import org.apache.jena.fuseki.embedded.FusekiTestAuth;
 import org.apache.jena.jdbc.JdbcCompatibility ;
 import org.apache.jena.jdbc.connections.JenaConnection ;
 import org.apache.jena.jdbc.utils.TestUtils ;
 import org.apache.jena.query.Dataset ;
+import org.apache.jena.riot.web.HttpOp;
 import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.DatasetGraphFactory ;
-import org.apache.jena.sparql.modify.request.Target ;
-import org.apache.jena.sparql.modify.request.UpdateDrop ;
-import org.apache.jena.update.Update ;
-import org.apache.jena.update.UpdateExecutionFactory ;
-import org.apache.jena.update.UpdateProcessor ;
+import org.apache.jena.system.Txn;
+import org.eclipse.jetty.security.SecurityHandler;
 import org.junit.After ;
 import org.junit.AfterClass ;
 import org.junit.BeforeClass ;
@@ -58,8 +50,6 @@ public class TestRemoteEndpointConnectionWithAuth extends 
AbstractRemoteEndpoint
 
     private static String USER = "test";
     private static String PASSWORD = "letmein";
-    private static File realmFile;
-    private static SPARQLServer server;
     private static HttpClient client;
 
     /**
@@ -68,36 +58,21 @@ public class TestRemoteEndpointConnectionWithAuth extends 
AbstractRemoteEndpoint
      */
     @BeforeClass
     public static void setup() throws IOException {
+        SecurityHandler sh = FusekiTestAuth.makeSimpleSecurityHandler("/*", 
USER, PASSWORD);
+        FusekiTestAuth.setupServer(true, sh);
+        
         BasicCredentialsProvider credsProv = new BasicCredentialsProvider();
         credsProv.setCredentials(AuthScope.ANY, new 
UsernamePasswordCredentials(USER, PASSWORD));
         client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProv).build();
-
-        realmFile = File.createTempFile("realm", ".properties");
-
-        try(FileWriter writer = new FileWriter(realmFile)) {
-            writer.write(USER + ": " + PASSWORD + ", fuseki\n");
-        }
-
-        DatasetGraph dsg = DatasetGraphFactory.create();
-
-        // This must agree with ServerTest
-        ServerConfig conf = 
FusekiConfig.defaultConfiguration(ServerCtl.datasetPath(), dsg, true, false);
-        conf.port = ServerCtl.port();
-        conf.pagesPort = ServerCtl.port();
-        conf.authConfigFile = realmFile.getAbsolutePath();
-
-        server = new SPARQLServer(conf);
-        server.start();
-    }
+   }
 
     /**
-     * Clean up after each test by resetting the Fuseki instance
+     * Clean up after each test by resetting the data
      */
     @After
     public void cleanupTest() {
-        Update clearRequest = new UpdateDrop(Target.ALL) ;
-        UpdateProcessor proc = 
UpdateExecutionFactory.createRemote(clearRequest, ServerCtl.serviceUpdate(), 
client) ;
-        proc.execute() ;
+        DatasetGraph dsg = FusekiTestAuth.getDataset();
+        Txn.executeWrite(dsg, ()->dsg.clear());
     }
 
     /**
@@ -105,8 +80,8 @@ public class TestRemoteEndpointConnectionWithAuth extends 
AbstractRemoteEndpoint
      */
     @AfterClass
     public static void cleanup() {
-        server.stop();
-        realmFile.delete();
+        FusekiTestAuth.teardownServer();
+        HttpOp.setDefaultHttpClient(HttpOp.createPoolingHttpClient());
     }
 
     @Override
@@ -118,7 +93,7 @@ public class TestRemoteEndpointConnectionWithAuth extends 
AbstractRemoteEndpoint
 
     @Override
     protected JenaConnection getConnection() throws SQLException {
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null,
+        return new RemoteEndpointConnection(FusekiTestAuth.serviceQuery(), 
FusekiTestAuth.serviceUpdate(), null, null, null, null,
                 client, JenaConnection.DEFAULT_HOLDABILITY,
                 JdbcCompatibility.DEFAULT, null, null);
     }
@@ -126,8 +101,8 @@ public class TestRemoteEndpointConnectionWithAuth extends 
AbstractRemoteEndpoint
     @Override
     protected JenaConnection getConnection(Dataset ds) throws SQLException {
         // Set up the dataset
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP(), client);
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null,
+        TestUtils.copyToRemoteDataset(ds, FusekiTestAuth.serviceGSP(), client);
+        return new RemoteEndpointConnection(FusekiTestAuth.serviceQuery(), 
FusekiTestAuth.serviceUpdate(), null, null, null, null,
                 client, JenaConnection.DEFAULT_HOLDABILITY,
                 JdbcCompatibility.DEFAULT, null, null);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithGraphUris.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithGraphUris.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithGraphUris.java
index 3408975..6a76888 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithGraphUris.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithGraphUris.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.utils.TestUtils;
@@ -43,10 +43,10 @@ public class TestRemoteEndpointConnectionWithGraphUris 
extends AbstractRemoteEnd
      */
     private static final String DEFAULT_GRAPH_URI = 
"http://example.org/defaultGraph";;
 
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
 
     @Override
     protected boolean supportsTimeouts() {
@@ -59,7 +59,7 @@ public class TestRemoteEndpointConnectionWithGraphUris 
extends AbstractRemoteEnd
     protected JenaConnection getConnection() throws SQLException {
         List<String> defaultGraphs = new ArrayList<>();
         defaultGraphs.add(DEFAULT_GRAPH_URI);
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), defaultGraphs, null,
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), defaultGraphs, null,
                 defaultGraphs, null, null, JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT, null, null);
     }
 
@@ -79,8 +79,8 @@ public class TestRemoteEndpointConnectionWithGraphUris 
extends AbstractRemoteEnd
         // Set up the dataset
         ds = TestUtils.renameGraph(ds, null, DEFAULT_GRAPH_URI);
         Assert.assertEquals(0, ds.getDefaultModel().size());
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), defaultGraphs, namedGraphs,
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), defaultGraphs, namedGraphs,
                 defaultGraphs, namedGraphs, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, null, null);
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithResultSetTypes.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithResultSetTypes.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithResultSetTypes.java
index 3b6c128..bf6b080 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithResultSetTypes.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/connections/TestRemoteEndpointConnectionWithResultSetTypes.java
@@ -20,7 +20,7 @@ package org.apache.jena.jdbc.remote.connections;
 
 import java.sql.SQLException;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.utils.TestUtils;
@@ -37,10 +37,10 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteEndpointConnectionWithResultSetTypes extends 
AbstractRemoteEndpointConnectionTests {
         
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
     
     @Override
     protected boolean supportsTimeouts() {
@@ -50,13 +50,13 @@ public class TestRemoteEndpointConnectionWithResultSetTypes 
extends AbstractRemo
 
     @Override
     protected JenaConnection getConnection() throws SQLException {
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
     }
 
     @Override
     protected JenaConnection getConnection(Dataset ds) throws SQLException {
         // Set up the dataset
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/metadata/TestRemoteConnectionMetadata.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/metadata/TestRemoteConnectionMetadata.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/metadata/TestRemoteConnectionMetadata.java
index 103a303..33ccf0b 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/metadata/TestRemoteConnectionMetadata.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/metadata/TestRemoteConnectionMetadata.java
@@ -23,7 +23,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.metadata.results.AbstractDatabaseMetadataTests;
@@ -39,14 +39,14 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteConnectionMetadata extends 
AbstractDatabaseMetadataTests {
     
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
 
     @Override
     protected JenaConnection getConnection() throws SQLException {
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
index 009fc71..18433ca 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResults.java
@@ -22,7 +22,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer ;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.remote.connections.RemoteEndpointConnection;
@@ -41,10 +41,10 @@ public class TestRemoteEndpointResults extends 
AbstractRemoteEndpointResultSetTe
     
     private static RemoteEndpointConnection connection;
     
-    //@BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    //@AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    //@BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    //@AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
 
     /**
      * Setup for the tests by allocating a Fuseki instance to work with
@@ -52,8 +52,8 @@ public class TestRemoteEndpointResults extends 
AbstractRemoteEndpointResultSetTe
      */
     @BeforeClass
     public static void setup() throws SQLException {
-        ServerCtl.ctlBeforeClass();
-        connection = new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
+        FusekiTestServer.ctlBeforeClass();
+        connection = new 
RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
         connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
     }
     
@@ -64,7 +64,7 @@ public class TestRemoteEndpointResults extends 
AbstractRemoteEndpointResultSetTe
     @AfterClass
     public static void cleanup() throws SQLException {
         connection.close();
-        ServerCtl.ctlAfterClass();
+        FusekiTestServer.ctlAfterClass();
     }
 
     @Override
@@ -74,7 +74,7 @@ public class TestRemoteEndpointResults extends 
AbstractRemoteEndpointResultSetTe
     
     @Override
     protected ResultSet createResults(Dataset ds, String query, int 
resultSetType) throws SQLException {
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
         Statement stmt = connection.createStatement(resultSetType, 
ResultSet.CONCUR_READ_ONLY);
         return stmt.executeQuery(query);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithAuth.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithAuth.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithAuth.java
index 78b7d2b..d7da24e 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithAuth.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithAuth.java
@@ -18,8 +18,6 @@
 
 package org.apache.jena.jdbc.remote.results;
 
-import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -30,22 +28,19 @@ import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.HttpClient;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.HttpClients;
-import org.apache.jena.fuseki.ServerCtl ;
-import org.apache.jena.fuseki.server.FusekiConfig;
-import org.apache.jena.fuseki.server.SPARQLServer;
-import org.apache.jena.fuseki.server.ServerConfig;
+import org.apache.jena.fuseki.embedded.FusekiTestAuth;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.remote.connections.RemoteEndpointConnection;
 import org.apache.jena.jdbc.utils.TestUtils;
 import org.apache.jena.query.Dataset ;
-import org.apache.jena.sparql.core.DatasetGraph ;
-import org.apache.jena.sparql.core.DatasetGraphFactory ;
+import org.apache.jena.riot.web.HttpOp;
 import org.apache.jena.sparql.modify.request.Target ;
 import org.apache.jena.sparql.modify.request.UpdateDrop ;
 import org.apache.jena.update.Update ;
 import org.apache.jena.update.UpdateExecutionFactory ;
 import org.apache.jena.update.UpdateProcessor ;
+import org.eclipse.jetty.security.SecurityHandler;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -62,8 +57,6 @@ public class TestRemoteEndpointResultsWithAuth extends 
AbstractRemoteEndpointRes
 
     private static String USER = "test";
     private static String PASSWORD = "letmein";
-    private static File realmFile;
-    private static SPARQLServer server;
     private static HttpClient client;
 
     /**
@@ -74,29 +67,14 @@ public class TestRemoteEndpointResultsWithAuth extends 
AbstractRemoteEndpointRes
      */
     @BeforeClass
     public static void setup() throws SQLException, IOException {
-
+        SecurityHandler sh = FusekiTestAuth.makeSimpleSecurityHandler("/*", 
USER, PASSWORD);
+        FusekiTestAuth.setupServer(true, sh);
+        
         BasicCredentialsProvider credsProv = new BasicCredentialsProvider();
         credsProv.setCredentials(AuthScope.ANY, new 
UsernamePasswordCredentials(USER, PASSWORD));
         client = 
HttpClients.custom().setDefaultCredentialsProvider(credsProv).build();
-
-        realmFile = File.createTempFile("realm", ".properties");
-
-        try(FileWriter writer = new FileWriter(realmFile)) {
-            writer.write(USER + ": " + PASSWORD + ", fuseki\n");
-        }
-
-        DatasetGraph dsg = DatasetGraphFactory.create();
-
-        // This must agree with ServerTest
-        ServerConfig conf = 
FusekiConfig.defaultConfiguration(ServerCtl.datasetPath(), dsg, true, false);
-        conf.port = ServerCtl.port();
-        conf.pagesPort = ServerCtl.port();
-        conf.authConfigFile = realmFile.getAbsolutePath();
-
-        server = new SPARQLServer(conf);
-        server.start();
-
-        connection = new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null,
+        
+        connection = new 
RemoteEndpointConnection(FusekiTestAuth.serviceQuery(), 
FusekiTestAuth.serviceUpdate(), null, null, null, null,
                 client, JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT, null, null);
         connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
     }
@@ -107,7 +85,7 @@ public class TestRemoteEndpointResultsWithAuth extends 
AbstractRemoteEndpointRes
     @After
     public void cleanupTest() {
         Update clearRequest = new UpdateDrop(Target.ALL) ;
-        UpdateProcessor proc = 
UpdateExecutionFactory.createRemote(clearRequest, ServerCtl.serviceUpdate(), 
client) ;
+        UpdateProcessor proc = 
UpdateExecutionFactory.createRemote(clearRequest, 
FusekiTestAuth.serviceUpdate(), client) ;
         proc.execute() ;
     }
 
@@ -118,12 +96,9 @@ public class TestRemoteEndpointResultsWithAuth extends 
AbstractRemoteEndpointRes
      */
     @AfterClass
     public static void cleanup() throws SQLException {
-        
-        // Sleep attempts to avoid a intermittent timing issue on the build 
server that can result in hung builds
-        
+        HttpOp.setDefaultHttpClient(HttpOp.createPoolingHttpClient());
         connection.close();
-        realmFile.delete();
-        server.stop();
+        FusekiTestAuth.teardownServer();
     }
 
     @Override
@@ -133,7 +108,7 @@ public class TestRemoteEndpointResultsWithAuth extends 
AbstractRemoteEndpointRes
 
     @Override
     protected ResultSet createResults(Dataset ds, String query, int 
resultSetType) throws SQLException {
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP(), client);
+        TestUtils.copyToRemoteDataset(ds, FusekiTestAuth.serviceGSP(), client);
         Statement stmt = connection.createStatement(resultSetType, 
ResultSet.CONCUR_READ_ONLY);
         return stmt.executeQuery(query);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
index 9988249..ea70835 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithGraphUris.java
@@ -24,7 +24,7 @@ import java.sql.Statement;
 import java.util.List;
 
 import org.apache.jena.ext.com.google.common.collect.Lists;
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer ;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.remote.connections.RemoteEndpointConnection;
@@ -41,10 +41,10 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteEndpointResultsWithGraphUris extends 
AbstractRemoteEndpointResultSetTests {
     
-    //@BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    //@AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()  { ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()   { ServerCtl.ctlAfterTest(); } 
+    //@BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    //@AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()  { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()   { 
FusekiTestServer.ctlAfterTest(); } 
 
 
     /**
@@ -60,9 +60,9 @@ public class TestRemoteEndpointResultsWithGraphUris extends 
AbstractRemoteEndpoi
      */
     @BeforeClass
     public static void setup() throws SQLException {
-        ServerCtl.ctlBeforeClass();
+        FusekiTestServer.ctlBeforeClass();
         List<String> defaultGraphUris = Lists.newArrayList(DEFAULT_GRAPH_URI);
-        connection = new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), defaultGraphUris, null, defaultGraphUris, null, 
null, JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, null, 
null);
+        connection = new 
RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), defaultGraphUris, null, defaultGraphUris, 
null, null, JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
null, null);
         connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
     }
     
@@ -73,7 +73,7 @@ public class TestRemoteEndpointResultsWithGraphUris extends 
AbstractRemoteEndpoi
     @AfterClass
     public static void cleanup() throws SQLException {
         connection.close();
-        ServerCtl.ctlAfterClass();
+        FusekiTestServer.ctlAfterClass();
     }
 
     @Override
@@ -84,7 +84,7 @@ public class TestRemoteEndpointResultsWithGraphUris extends 
AbstractRemoteEndpoi
     @Override
     protected ResultSet createResults(Dataset ds, String query, int 
resultSetType) throws SQLException {
         ds = TestUtils.renameGraph(ds, null, DEFAULT_GRAPH_URI);
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
         Statement stmt = connection.createStatement(resultSetType, 
ResultSet.CONCUR_READ_ONLY);
         return stmt.executeQuery(query);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithResultSetTypes.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithResultSetTypes.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithResultSetTypes.java
index 3114ff0..1268a7a 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithResultSetTypes.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/results/TestRemoteEndpointResultsWithResultSetTypes.java
@@ -22,7 +22,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer ;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.remote.connections.RemoteEndpointConnection;
@@ -40,10 +40,10 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteEndpointResultsWithResultSetTypes extends 
AbstractRemoteEndpointResultSetTests {
 
-    //@BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    //@AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()  { ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()   { ServerCtl.ctlAfterTest(); } 
+    //@BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    //@AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()  { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()   { 
FusekiTestServer.ctlAfterTest(); } 
 
     private static RemoteEndpointConnection connection;
     
@@ -53,8 +53,8 @@ public class TestRemoteEndpointResultsWithResultSetTypes 
extends AbstractRemoteE
      */
     @BeforeClass
     public static void setup() throws SQLException {
-        ServerCtl.ctlBeforeClass();
-        connection = new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
+        FusekiTestServer.ctlBeforeClass();
+        connection = new 
RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), null, null, null, null, null, 
JenaConnection.DEFAULT_HOLDABILITY, JdbcCompatibility.DEFAULT, 
WebContent.contentTypeTextTSV, WebContent.contentTypeRDFJSON);
         connection.setJdbcCompatibilityLevel(JdbcCompatibility.HIGH);
     }
     
@@ -65,7 +65,7 @@ public class TestRemoteEndpointResultsWithResultSetTypes 
extends AbstractRemoteE
     @AfterClass
     public static void cleanup() throws SQLException {
         connection.close();
-        ServerCtl.ctlAfterClass();
+        FusekiTestServer.ctlAfterClass();
     }
 
     @Override
@@ -75,7 +75,7 @@ public class TestRemoteEndpointResultsWithResultSetTypes 
extends AbstractRemoteE
     
     @Override
     protected ResultSet createResults(Dataset ds, String query, int 
resultSetType) throws SQLException {
-        TestUtils.copyToRemoteDataset(ds, ServerCtl.serviceGSP());
+        TestUtils.copyToRemoteDataset(ds, FusekiTestServer.serviceGSP());
         Statement stmt = connection.createStatement(resultSetType, 
ResultSet.CONCUR_READ_ONLY);
         return stmt.executeQuery(query);
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/a363223b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/statements/TestRemoteEndpointStatements.java
----------------------------------------------------------------------
diff --git 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/statements/TestRemoteEndpointStatements.java
 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/statements/TestRemoteEndpointStatements.java
index 9b64cce..9c70dad 100644
--- 
a/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/statements/TestRemoteEndpointStatements.java
+++ 
b/jena-jdbc/jena-jdbc-driver-remote/src/test/java/org/apache/jena/jdbc/remote/statements/TestRemoteEndpointStatements.java
@@ -20,7 +20,7 @@ package org.apache.jena.jdbc.remote.statements;
 
 import java.sql.SQLException;
 
-import org.apache.jena.fuseki.ServerCtl ;
+import org.apache.jena.fuseki.embedded.FusekiTestServer ;
 import org.apache.jena.jdbc.JdbcCompatibility;
 import org.apache.jena.jdbc.connections.JenaConnection;
 import org.apache.jena.jdbc.remote.connections.RemoteEndpointConnection;
@@ -36,14 +36,14 @@ import org.junit.BeforeClass;
  */
 public class TestRemoteEndpointStatements extends AbstractJenaStatementTests {
 
-    @BeforeClass public static void ctlBeforeClass() { 
ServerCtl.ctlBeforeClass(); }
-    @AfterClass  public static void ctlAfterClass()  { 
ServerCtl.ctlAfterClass(); }
-    @Before      public void ctlBeforeTest()         { 
ServerCtl.ctlBeforeTest(); }
-    @After       public void ctlAfterTest()          { 
ServerCtl.ctlAfterTest(); } 
+    @BeforeClass public static void ctlBeforeClass() { 
FusekiTestServer.ctlBeforeClass(); }
+    @AfterClass  public static void ctlAfterClass()  { 
FusekiTestServer.ctlAfterClass(); }
+    @Before      public void ctlBeforeTest()         { 
FusekiTestServer.ctlBeforeTest(); }
+    @After       public void ctlAfterTest()          { 
FusekiTestServer.ctlAfterTest(); } 
 
     @Override
     protected JenaConnection getConnection() throws SQLException {
-        return new RemoteEndpointConnection(ServerCtl.serviceQuery(), 
ServerCtl.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
+        return new RemoteEndpointConnection(FusekiTestServer.serviceQuery(), 
FusekiTestServer.serviceUpdate(), JenaConnection.DEFAULT_HOLDABILITY, 
JdbcCompatibility.DEFAULT);
     }
 
 

Reply via email to