/*
* 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;
import static org.apache.jena.fuseki.ServerCtl.* ;
import org.apache.http.HttpEntity ;
import org.apache.http.entity.EntityTemplate ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.jena.atlas.web.HttpException ;
import org.apache.jena.atlas.web.TypedInputStream ;
import org.apache.jena.riot.RDFDataMgr ;
import org.apache.jena.riot.RDFFormat ;
import org.apache.jena.riot.WebContent ;
import org.apache.jena.riot.system.StreamRDF ;
import org.apache.jena.riot.system.StreamRDFLib ;
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.sse.SSE ;
import org.apache.jena.web.HttpSC ;
import org.junit.Test ;
/** TestDatasetAccessorHTTP does most of the GSP testing.
* This class adds the testing of Fuseki extras.
*/
public class TestDatasetOps extends AbstractFusekiTest
{
static DatasetGraph data = SSE.parseDatasetGraph(StrUtils.strjoinNL
("(prefix ((: <http://example/>))",
" (dataset",
" (graph (_:x :p 1) (_:x :p 2))" ,
" (graph :g (_:x :p 3))",
"))"
)) ;
/** Create an HttpEntity for the graph */
protected HttpEntity datasetToHttpEntity(final DatasetGraph dsg) {
final RDFFormat syntax = RDFFormat.NQUADS ;
EntityTemplate entity = new EntityTemplate((out) -> RDFDataMgr.write(out, dsg, syntax)) ;
String ct = syntax.getLang().getContentType().getContentType() ;
entity.setContentType(ct) ;
return entity ;
}
@Test public void gsp_x_01() {
gsp_x(urlDataset(), urlDataset()) ;
}
@Test public void gsp_x_02() {
gsp_x(urlDataset(), serviceGSP()) ;
}
@Test public void gsp_x_03() {
gsp_x(serviceGSP(), urlDataset()) ;
}
@Test public void gsp_x_04() {
gsp_x(serviceGSP(), urlDataset()) ;
}
private void gsp_x(String outward, String inward) {
HttpEntity e = datasetToHttpEntity(data) ;
HttpOp.execHttpPut(outward, e);
DatasetGraph dsg = DatasetGraphFactory.create() ;
RDFDataMgr.read(dsg, inward) ;
// String x = HttpOp.execHttpGetString(inward, "application/n-quads") ;
// RDFDataMgr.read(dsg, new StringReader(x), null, Lang.NQUADS) ;
assertEquals(2, dsg.getDefaultGraph().size()) ;
}
// Get dataset. Tests conneg.
@Test
public void gsp_x_10() {
gsp_x_ct(urlDataset(), WebContent.contentTypeNQuads, WebContent.contentTypeNQuads) ;
}
@Test
public void gsp_x_11() {
gsp_x_ct(urlDataset(), WebContent.contentTypeNQuadsAlt1, WebContent.contentTypeNQuads) ;
}
@Test
public void gsp_x_12() {
gsp_x_ct(urlDataset(), WebContent.contentTypeTriG, WebContent.contentTypeTriG) ;
}
@Test
public void gsp_x_13() {
gsp_x_ct(urlDataset(), WebContent.contentTypeTriGAlt1, WebContent.contentTypeTriG) ;
}
@Test
public void gsp_x_14() {
gsp_x_ct(urlDataset(), WebContent.defaultDatasetAcceptHeader, WebContent.contentTypeTriG) ;
}
@Test
public void gsp_x_15() {
// Anything!
gsp_x_ct(urlDataset(), WebContent.defaultRDFAcceptHeader, WebContent.contentTypeTriG) ;
}
private void gsp_x_ct(String urlDataset, String acceptheader, String contentTypeResponse) {
HttpEntity e = datasetToHttpEntity(data) ;
HttpOp.execHttpPut(urlDataset(), e);
TypedInputStream in = HttpOp.execHttpGet(urlDataset, acceptheader) ;
assertEqualsIgnoreCase(contentTypeResponse, in.getContentType()) ;
DatasetGraph dsg = DatasetGraphFactory.create() ;
StreamRDF dest = StreamRDFLib.dataset(dsg) ;
RDFDataMgr.parse(dest, in) ;
}
@Test
public void gsp_x_20()
{
HttpEntity e = datasetToHttpEntity(data) ;
try {
HttpOp.execHttpPost(serviceQuery(), e);
} catch (HttpException ex) {
assertTrue(HttpSC.isClientError(ex.getResponseCode())) ;
}
}
}