blob: 88c0739e40f27ec31caf967fde3812e1d8928ea0 [file] [log] [blame]
package org.apache.cloud.rdf.web.sail;
/*
* 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.
*/
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import java.io.ByteArrayInputStream;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.TupleQueryResult;
import org.eclipse.rdf4j.query.resultio.QueryResultIO;
import org.eclipse.rdf4j.query.resultio.TupleQueryResultFormat;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"/controllerIntegrationTest-accumulo.xml", "/controllerIntegrationTest-root.xml"})
public class RdfControllerAccumuloTest {
private MockMvc mockMvc;
@Autowired
private RdfController controller;
@Autowired
private Repository repository;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void setup() {
this.mockMvc = standaloneSetup(controller).build();
try {
RepositoryConnection con = repository.getConnection();
con.add(getClass().getResourceAsStream("/test.nt"), "", RDFFormat.NTRIPLES);
con.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Test
public void emptyQuery() throws Exception {
mockMvc.perform(get("/queryrdf?query="))
.andExpect(status().isOk());
}
@Test
public void emptyQueryXMLFormat() throws Exception {
this.mockMvc.perform(get("/queryrdf")
.param("query", "SELECT * WHERE { ?s a <http://mynamespace/ProductType> . }")
.param("query.resultformat", "xml"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.TEXT_XML));
}
@Test
public void loadDataWithVisibilities() throws Exception {
this.mockMvc.perform(post("/loadrdf")
.content("<http://loadDataWithVisibilities/AB> <http://loadDataWithVisibilities#pred1> \"loadDataWithVisibilities_AB\" . ")
.param("format", "N-Triples")
.param("conf.cv", "A&B"))
.andExpect(status().isOk());
this.mockMvc.perform(post("/loadrdf")
.content("<http://loadDataWithVisibilities/BC> <http://loadDataWithVisibilities#pred1> \"loadDataWithVisibilities_BC\" . ")
.param("format", "N-Triples")
.param("conf.cv", "B&C"))
.andExpect(status().isOk());
ResultActions actions;
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://loadDataWithVisibilities#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 0);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://loadDataWithVisibilities#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 0);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A,B")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://loadDataWithVisibilities#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 1);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "B,C")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://loadDataWithVisibilities#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 1);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A,B,C")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://loadDataWithVisibilities#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 2);
}
private static void validateCount(MockHttpServletResponse response, int count) throws Exception {
String rstString = response.getContentAsString();
TupleQueryResult result = QueryResultIO.parseTuple(new ByteArrayInputStream(rstString.getBytes()), TupleQueryResultFormat.SPARQL);
assertEquals(1, result.getBindingNames().size());
String binding = result.getBindingNames().get(0);
assertTrue(result.hasNext());
BindingSet bs = result.next();
assertEquals(Integer.toString(count), bs.getBinding(binding).getValue().stringValue());
}
@Test
public void updateQueryWithVisibilities() throws Exception {
this.mockMvc.perform(get("/queryrdf")
.param("query", "INSERT DATA { <http://mynamespace/ProductType1_AB> <http://mynamespace#pred1> \"test_AB\" }")
.param("conf.cv", "A&B"))
.andExpect(status().isOk());
this.mockMvc.perform(get("/queryrdf")
.param("query", "INSERT DATA { <http://mynamespace/ProductType1_BC> <http://mynamespace#pred1> \"test_BC\" }")
.param("conf.cv", "B&C"))
.andExpect(status().isOk());
ResultActions actions;
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://mynamespace#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 0);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://mynamespace#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 0);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A,B")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://mynamespace#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 1);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "B,C")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://mynamespace#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 1);
actions = this.mockMvc.perform(get("/queryrdf")
.param("query.resultformat", "xml")
.param("query.auth", "A,B,C")
.param("query", "SELECT (COUNT(?s) as ?c) WHERE {?s <http://mynamespace#pred1> ?o}"))
.andExpect(status().isOk());
validateCount(actions.andReturn().getResponse(), 2);
}
}