package com.mysema.rdfbean.sparql; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import javax.servlet.ServletException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletConfig; import com.mysema.rdfbean.model.Format; import com.mysema.rdfbean.model.RDF; import com.mysema.rdfbean.model.Repository; import com.mysema.rdfbean.sesame.MemoryRepository; public class SPARQLServletTest { private static SPARQLServlet servlet = new SPARQLServlet(); private static MockServletConfig config; private static MemoryRepository repository; private final MockHttpServletRequest request = new MockHttpServletRequest(); private final MockHttpServletResponse response = new MockHttpServletResponse(); @BeforeClass public static void setUpClass() throws ServletException { repository = new MemoryRepository(); repository.initialize(); repository.load(Format.RDFXML, SPARQLServletTest.class.getResourceAsStream("/foaf.rdf"), null, false); config = new MockServletConfig(); config.getServletContext().setAttribute(Repository.class.getName(), repository); servlet.init(config); } @AfterClass public static void tearDownClass() { repository.close(); } @Test public void Ask() throws ServletException, IOException { request.setParameter("query", "ASK { ?s ?p ?o }"); servlet.service(request, response); System.out.println(response.getContentAsString()); assertTrue(response.getContentAsString().contains("<sparql")); assertTrue(response.getContentAsString().contains("<head/>")); assertTrue(response.getContentAsString().contains("<results><boolean>true</boolean></results>")); } @Test public void Ask_as_JSON() throws ServletException, IOException { request.setParameter("query", "ASK { ?s ?p ?o }"); request.setParameter("type", "json"); servlet.service(request, response); System.out.println(response.getContentAsString()); assertTrue(response.getContentAsString().contains("head")); assertTrue(response.getContentAsString().contains("boolean")); assertTrue(response.getContentAsString().contains("true")); } @Test public void Construct() throws ServletException, IOException { request.setParameter("query", "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); servlet.service(request, response); assertTrue(response.getContentAsString().contains("<rdf:RDF")); assertTrue(response.getContentAsString().contains(RDF.NS)); } @Test public void Construct_as_Turtle() throws ServletException, IOException { request.setParameter("query", "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); request.setParameter("type", "turtle"); servlet.service(request, response); assertTrue(!response.getContentAsString().contains("<rdf:RDF")); } @Test public void Construct_as_Turtle_via_Accept() throws ServletException, IOException { request.setParameter("query", "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); request.addHeader("Accept", Format.TURTLE.getMimetype() + ", " + Format.RDFXML.getMimetype()); servlet.service(request, response); assertTrue(!response.getContentAsString().contains("<rdf:RDF")); } @Test public void Construct_as_NTriples() throws ServletException, IOException { request.setParameter("query", "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); request.setParameter("type", "ntriples"); servlet.service(request, response); assertTrue(!response.getContentAsString().contains("<rdf:RDF")); } @Test public void Construct_with_Html_Accept() throws ServletException, IOException { request.setParameter("query", "CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }"); request.addHeader("Accept", "text/html"); servlet.service(request, response); assertEquals(Format.RDFXML.getMimetype(), response.getContentType()); } @Test public void Select() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); servlet.service(request, response); assertTrue(response.getContentAsString().contains("<sparql")); assertTrue(response.getContentAsString().contains("<head>")); assertTrue(response.getContentAsString().contains("<results>")); assertTrue(response.getContentAsString().contains("literal")); assertEquals(SPARQLServlet.SPARQL_RESULTS_XML, response.getContentType()); } @Test public void Select_with_MaxQueryTime() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); SPARQLServlet servlet2 = new SPARQLServlet(repository, null, 1); servlet2.service(request, response); assertTrue(response.getContentAsString().contains("<sparql")); assertTrue(response.getContentAsString().contains("<head>")); assertTrue(response.getContentAsString().contains("<results>")); assertTrue(response.getContentAsString().contains("literal")); assertEquals(SPARQLServlet.SPARQL_RESULTS_XML, response.getContentType()); } @Test public void Select_with_Html_Accept() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); request.addHeader("Accept", "text/html"); servlet.service(request, response); assertEquals(SPARQLServlet.SPARQL_RESULTS_XML, response.getContentType()); } @Test public void Select_as_JSON() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); request.setParameter("type", "json"); servlet.service(request, response); assertTrue(response.getContentAsString().contains("head")); assertTrue(response.getContentAsString().contains("results")); assertTrue(response.getContentAsString().contains("literal")); assertEquals(SPARQLServlet.SPARQL_RESULTS_JSON, response.getContentType()); } @Test public void Select_as_JSON_with_JSONP() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); request.setParameter("type", "json"); request.setParameter("callback", "handleResponse"); servlet.service(request, response); assertTrue(response.getContentAsString().startsWith("handleResponse(")); assertTrue(response.getContentAsString().endsWith(")")); assertTrue(response.getContentAsString().contains("head")); assertTrue(response.getContentAsString().contains("results")); assertTrue(response.getContentAsString().contains("literal")); assertEquals(SPARQLServlet.SPARQL_RESULTS_JSON, response.getContentType()); } @Test public void Select_as_JSON_via_Accept() throws ServletException, IOException { request.setParameter("query", "SELECT ?s ?p ?o WHERE { ?s ?p ?o }"); request.addHeader("Accept", SPARQLServlet.SPARQL_RESULTS_JSON); servlet.service(request, response); assertTrue(response.getContentAsString().contains("head")); assertTrue(response.getContentAsString().contains("results")); assertTrue(response.getContentAsString().contains("literal")); assertEquals(SPARQLServlet.SPARQL_RESULTS_JSON, response.getContentType()); } @Test public void Select_with_Optional_Bindings_as_JSON() throws ServletException, IOException { StringBuilder query = new StringBuilder(); query.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); query.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); query.append("PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n"); query.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); query.append("SELECT ?c ?c2 ?domain " + "WHERE { ?c rdf:type rdfs:Class . " + "OPTIONAL { ?c owl:disjointWith ?c2 . } " + "OPTIONAL { ?c rdfs:domain ?domain } }"); request.setParameter("query", query.toString()); request.addHeader("Accept", SPARQLServlet.SPARQL_RESULTS_JSON); servlet.service(request, response); System.out.println(response.getContentAsString()); } }