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