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> + * + * @BeforeClass + * public static void beforeClassAuth() { + * SecurityHandler sh = FusekiAuth.makeSimpleSecurityHandler("/*", "USER", "PASSWORD"); + * FusekiAuth.setupServer(true, sh); + * } + * + * @AfterClass + * public static void afterClassAuth() { + * FusekiAuth.teardownServer(); + * // Clear up any pooled connections. + * HttpOp.setDefaultHttpClient(HttpOp.createPoolingHttpClient()); + * } + * + * @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)) {} + * } + * + * @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() ; + * + * @BeforeClass + * public static void beforeClass() { + * server = FusekiEmbeddedServer.create() + * .setPort(....) + * .add("/ds", serverdsg) + * .build() + * .start(); + * } + * + * @Before + * public void beforeTest() { + * // Clear up data in server servers + * Txn.executeWrite(serverdsg, ()->serverdsg.clear()) ; + * } + * + * @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); }
