001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.fcrepo.transform.http.responses; 019 020import static com.hp.hpl.jena.graph.NodeFactory.createLiteral; 021import static com.hp.hpl.jena.graph.NodeFactory.createURI; 022import static com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel; 023import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RDF_XML; 024import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RS_TSV; 025import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RS_XML; 026import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_UNKNOWN; 027import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RDF_NT; 028import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RDF_TTL; 029import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RS_BIO; 030import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RS_CSV; 031import static com.hp.hpl.jena.sparql.resultset.ResultsFormat.FMT_RS_JSON; 032import static javax.ws.rs.core.MediaType.valueOf; 033import static org.apache.jena.riot.WebContent.contentTypeNTriples; 034import static org.apache.jena.riot.WebContent.contentTypeRDFXML; 035import static org.apache.jena.riot.WebContent.contentTypeResultsBIO; 036import static org.apache.jena.riot.WebContent.contentTypeResultsJSON; 037import static org.apache.jena.riot.WebContent.contentTypeResultsXML; 038import static org.apache.jena.riot.WebContent.contentTypeTextCSV; 039import static org.apache.jena.riot.WebContent.contentTypeTextTSV; 040import static org.apache.jena.riot.WebContent.contentTypeTurtleAlt2; 041import static org.fcrepo.kernel.api.RdfLexicon.JCR_NAMESPACE; 042import static org.fcrepo.kernel.modeshape.rdf.JcrRdfTools.getRDFNamespaceForJcrNamespace; 043import static org.fcrepo.transform.http.responses.ResultSetStreamingOutput.getResultsFormat; 044import static org.junit.Assert.assertEquals; 045import static org.junit.Assert.assertFalse; 046import static org.junit.Assert.assertTrue; 047import static org.mockito.MockitoAnnotations.initMocks; 048 049import java.io.ByteArrayOutputStream; 050 051import org.junit.Before; 052import org.junit.Test; 053import org.mockito.Mock; 054 055import com.hp.hpl.jena.graph.Triple; 056import com.hp.hpl.jena.query.Dataset; 057import com.hp.hpl.jena.query.Query; 058import com.hp.hpl.jena.query.QueryExecution; 059import com.hp.hpl.jena.query.QueryExecutionFactory; 060import com.hp.hpl.jena.query.QueryFactory; 061import com.hp.hpl.jena.query.ResultSet; 062import com.hp.hpl.jena.sparql.core.DatasetImpl; 063 064import javax.ws.rs.core.MediaType; 065 066/** 067 * <p>ResultSetStreamingOutputTest class.</p> 068 * 069 * @author cbeer 070 */ 071public class ResultSetStreamingOutputTest { 072 073 @Mock 074 ResultSet mockResultSet; 075 076 ResultSetStreamingOutput testObj; 077 078 Dataset testData = new DatasetImpl(createDefaultModel()); 079 080 { 081 testData.asDatasetGraph().getDefaultGraph().add( 082 new Triple(createURI("test:subject"), 083 createURI("test:predicate"), 084 createLiteral("test:object"))); 085 testData.asDatasetGraph().getDefaultGraph().add( 086 new Triple(createURI("test:subject"), 087 createURI(getRDFNamespaceForJcrNamespace(JCR_NAMESPACE) + "primaryType"), 088 createLiteral("nt:file"))); 089 090 } 091 092 @Before 093 public void setUp() { 094 initMocks(this); 095 testObj = new ResultSetStreamingOutput(); 096 } 097 098 @Test 099 public void testWrite() throws Exception { 100 101 final Query sparqlQuery = 102 QueryFactory.create("SELECT ?x WHERE { ?x ?y ?z }"); 103 104 try (final QueryExecution testResult = 105 QueryExecutionFactory.create(sparqlQuery, testData)) { 106 final ResultSet resultSet = testResult.execSelect(); 107 108 109 try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) { 110 testObj.writeTo(resultSet, null, null, null, 111 valueOf(contentTypeTextTSV), null, out); 112 113 final String serialized = out.toString(); 114 assertTrue(serialized.contains("test:subject")); 115 } 116 } 117 } 118 119 @Test 120 public void testWriteWithRDFFormat() throws Exception { 121 122 final Query sparqlQuery = 123 QueryFactory.create("SELECT ?x WHERE { ?x ?y ?z }"); 124 125 try (final QueryExecution testResult = 126 QueryExecutionFactory.create(sparqlQuery, testData)) { 127 final ResultSet resultSet = testResult.execSelect(); 128 129 try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) { 130 testObj.writeTo(resultSet, null, null, null, 131 valueOf(contentTypeRDFXML), null, out); 132 final String serialized = out.toString(); 133 assertTrue(serialized.contains("rs:ResultSet")); 134 } 135 } 136 } 137 138 @Test 139 public void testGetResultsFormat() { 140 assertEquals(FMT_RS_TSV, getResultsFormat(valueOf(contentTypeTextTSV))); 141 assertEquals(FMT_UNKNOWN, getResultsFormat(valueOf("some/type"))); 142 assertEquals(FMT_RS_CSV, getResultsFormat(valueOf(contentTypeTextCSV))); 143 assertEquals(FMT_RS_JSON, getResultsFormat(valueOf(contentTypeResultsJSON))); 144 assertEquals(FMT_RS_BIO, getResultsFormat(valueOf(contentTypeResultsBIO))); 145 assertEquals(FMT_RDF_TTL, getResultsFormat(valueOf(contentTypeTurtleAlt2))); 146 assertEquals(FMT_RDF_NT, getResultsFormat(valueOf(contentTypeNTriples))); 147 assertEquals(FMT_RDF_XML, getResultsFormat(valueOf(contentTypeRDFXML))); 148 assertEquals(FMT_RS_XML, getResultsFormat(valueOf(contentTypeResultsXML))); 149 } 150 151 @Test 152 public void testNonWriteable() { 153 assertFalse(testObj.isWriteable(null, null, null, 154 MediaType.APPLICATION_FORM_URLENCODED_TYPE)); 155 } 156 157 @Test 158 public void testNegativeSize() { 159 assertTrue(testObj.getSize(null, null, null, null, 160 MediaType.APPLICATION_FORM_URLENCODED_TYPE) == -1); 161 } 162}