more on sparql testing
Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/33279b48 Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/33279b48 Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/33279b48 Branch: refs/heads/develop Commit: 33279b482abbdfd7ab6d68ee68ecb6976df5c4c7 Parents: d86c1fa Author: Sergio Fernández <[email protected]> Authored: Mon Apr 8 15:59:04 2013 +0200 Committer: Sergio Fernández <[email protected]> Committed: Mon Apr 8 15:59:04 2013 +0200 ---------------------------------------------------------------------- platform/marmotta-sparql/pom.xml | 16 ++- .../sparqlio/rdf/SPARQLGraphResultWriter.java | 40 ++--- .../sparql/webservices/SparqlWebServiceTest.java | 125 ++++++++++++++- 3 files changed, 150 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/33279b48/platform/marmotta-sparql/pom.xml ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/pom.xml b/platform/marmotta-sparql/pom.xml index c809d5c..5a985d2 100644 --- a/platform/marmotta-sparql/pom.xml +++ b/platform/marmotta-sparql/pom.xml @@ -30,13 +30,23 @@ <name>Apache Marmotta Platform: SPARQL Endpoint</name> <description> - Provides support for SPARQL 1.1 Queries and Updates and offers a basic UI for exploring SPARQL - results. + Provides support for SPARQL 1.1 Queries and Updates and offers different + UIs for exploring SPARQL results. </description> - <build> + + <resources> + <resource> + <directory>src/main/resources</directory> + </resource> + <resource> + <directory>src/test/resources</directory> + </resource> + </resources> + <plugins> + <plugin> <groupId>org.apache.marmotta</groupId> <artifactId>buildinfo-maven-plugin</artifactId> http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/33279b48/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/rdf/SPARQLGraphResultWriter.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/rdf/SPARQLGraphResultWriter.java b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/rdf/SPARQLGraphResultWriter.java index 8118308..0623365 100644 --- a/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/rdf/SPARQLGraphResultWriter.java +++ b/platform/marmotta-sparql/src/main/java/org/apache/marmotta/platform/sparql/services/sparqlio/rdf/SPARQLGraphResultWriter.java @@ -17,6 +17,10 @@ */ package org.apache.marmotta.platform.sparql.services.sparqlio.rdf; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Map; + import org.openrdf.query.GraphQueryResult; import org.openrdf.query.QueryEvaluationException; import org.openrdf.repository.Repository; @@ -29,24 +33,17 @@ import org.openrdf.rio.RDFWriter; import org.openrdf.rio.Rio; import org.openrdf.sail.memory.MemoryStore; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Map; - /** - * Add file description here! - * <p/> + * SPARQL grapg result writer for Sesam RIO + * * Author: Sebastian Schaffert */ public class SPARQLGraphResultWriter { - private OutputStream outputStream; - private RDFFormat format; - public SPARQLGraphResultWriter(OutputStream outputStream) { this.outputStream = outputStream; format = RDFFormat.RDFXML; @@ -57,38 +54,37 @@ public class SPARQLGraphResultWriter { this.format = RDFFormat.forMIMEType(mimeType, RDFFormat.RDFXML); } - public void write(GraphQueryResult result) throws IOException { Repository repository = new SailRepository(new MemoryStore()); try { repository.initialize(); - RepositoryConnection con = repository.getConnection(); + RepositoryConnection conn = repository.getConnection(); + for(Map.Entry<String,String> namespace : result.getNamespaces().entrySet()) { - con.setNamespace(namespace.getKey(),namespace.getValue()); + conn.setNamespace(namespace.getKey(), namespace.getValue()); } - while(result.hasNext()) { - con.add(result.next()); - } - con.commit(); + conn.add(result); + conn.commit(); - RDFWriter writer = Rio.createWriter(format,outputStream); - con.export(writer); - con.close(); + RDFWriter writer = Rio.createWriter(format, outputStream); + conn.export(writer); + conn.close(); repository.shutDown(); outputStream.flush(); outputStream.close(); } catch (RepositoryException e) { - throw new IOException("query result writing failed because there was an error while creating temporary triple store",e); + throw new IOException("query result writing failed because there was an error while creating temporary triple store", e); } catch (QueryEvaluationException e) { - throw new IOException("query result writing failed because query evaluation had a problem",e); + throw new IOException("query result writing failed because query evaluation had a problem", e); } catch (RDFHandlerException e) { - throw new IOException("query result writing failed because writer could not handle rdf data",e); + throw new IOException("query result writing failed because writer could not handle rdf data", e); } } + } http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/33279b48/platform/marmotta-sparql/src/test/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebServiceTest.java ---------------------------------------------------------------------- diff --git a/platform/marmotta-sparql/src/test/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebServiceTest.java b/platform/marmotta-sparql/src/test/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebServiceTest.java index d7d3a61..06d03eb 100644 --- a/platform/marmotta-sparql/src/test/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebServiceTest.java +++ b/platform/marmotta-sparql/src/test/java/org/apache/marmotta/platform/sparql/webservices/SparqlWebServiceTest.java @@ -1,5 +1,7 @@ package org.apache.marmotta.platform.sparql.webservices; +import static com.jayway.restassured.RestAssured.expect; + import java.io.IOException; import java.io.InputStream; @@ -11,6 +13,8 @@ import org.apache.marmotta.platform.core.test.base.JettyMarmotta; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.jayway.restassured.RestAssured; @@ -22,17 +26,21 @@ import com.jayway.restassured.RestAssured; */ public class SparqlWebServiceTest { + private static Logger log = LoggerFactory.getLogger(SparqlWebServiceTest.class); + private static JettyMarmotta marmotta; @BeforeClass public static void setUp() throws MarmottaImportException { - marmotta = new JettyMarmotta("/marmotta"); + marmotta = new JettyMarmotta("/marmotta", SparqlWebService.class); + ImportService importService = marmotta.getService(ImportService.class); UserService userService = marmotta.getService(UserService.class); ContextService contextService = marmotta.getService(ContextService.class); InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("foaf.rdf"); - importService.importData(is, "application/rdf+xml", userService.getAnonymousUser(), contextService.getDefaultContext()); - + int n = importService.importData(is, "application/rdf+xml", userService.getAnonymousUser(), contextService.getDefaultContext()); + log.info("Imported RDF test suite with {} triples", n); + RestAssured.baseURI = "http://localhost"; RestAssured.port = marmotta.getPort(); RestAssured.basePath = marmotta.getContext(); @@ -43,11 +51,116 @@ public class SparqlWebServiceTest { public static void tearDown() { marmotta.shutdown(); } - + @Test - public void testSet() throws IOException, InterruptedException { - + public void testSelect() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + given(). + param("query", "SELECT ?o WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + + @Test + public void testSelectContentNegotiation() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + contentType("application/sparql-results+xml"). + given(). + header("Accept", "application/xml"). + param("query", "SELECT ?o WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + + @Test + public void testAsk() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + given(). + param("query", "ASK WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + + /* + @Test + public void testConstruct() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + given(). + param("query", "CONSTRUCT { <http://www.wikier.org/foaf#wikier> ?p ?o } WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + + @Test + public void testConstructContentNegotiationXml() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + contentType("application/rdf+xml"). + given(). + header("Accept", "application/xml"). + param("query", "CONSTRUCT { <http://www.wikier.org/foaf#wikier> ?p ?o } WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + + @Test + public void testConstructContentNegotiationPlain() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + contentType("text/turtle"). + given(). + header("Accept", "plain/text"). + param("query", "CONSTRUCT { <http://www.wikier.org/foaf#wikier> ?p ?o } WHERE { <http://www.wikier.org/foaf#wikier> ?p ?o }"). + when(). + get("/sparql/select"); + } + @Test + public void testDescribe() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + given(). + param("query", "DESCRIBE <http://www.wikier.org/foaf#wikier>"). + when(). + get("/sparql/select"); + } + + @Test + public void testDescribeContentNegotiationXml() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + contentType("application/rdf+xml"). + given(). + header("Accept", "application/xml"). + param("query", "DESCRIBE <http://www.wikier.org/foaf#wikier>"). + when(). + get("/sparql/select"); + } + + @Test + public void testDescribeContentNegotiationPlain() throws IOException, InterruptedException { + expect(). + log().ifError(). + statusCode(200). + contentType("text/turle"). + given(). + header("Accept", "plain/text"). + param("query", "DESCRIBE <http://www.wikier.org/foaf#wikier>"). + when(). + get("/sparql/select"); } + */ }
