package eu.play_project.querydispatcher.epsparql.tests;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import junit.framework.Assert;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.sparql.serializer.PlaySerializer;
import eu.play_platform.platformservices.bdpl.VariableTypes;
import eu.play_project.play_platformservices.api.HistoricalQuery;
import eu.play_project.play_platformservices.api.QueryDetails;
import eu.play_project.play_platformservices.api.QueryTemplate;
import eu.play_project.play_platformservices_querydispatcher.bdpl.visitor.historic.QueryTemplateGenerator;
import eu.play_project.play_platformservices_querydispatcher.bdpl.visitor.realtime.StreamIdCollector;
import eu.play_project.play_platformservices_querydispatcher.types.VariableTypeManager;
/**
*
* @author sobermeier
*
*/
public class DispatcherTests {
private static Logger logger;
@Test
public void getIoStreamIds() throws IOException{
logger = LoggerFactory.getLogger(DispatcherTests.class);
String queryString;
Set<String> expectedInputStreams = new HashSet<String>(Arrays.asList(new String[] {"http://streams.event-processing.org/ids/TwitterFeed", "http://streams.event-processing.org/ids/TaxiUCGeoLocation", "http://streams.event-processing.org/ids/TaxiUCGeoLocation"}));
String expectedOutputStream = "http://streams.event-processing.org/ids/ContextualizedLatitudeFeed";
// Get query.
queryString = getSparqlQuery("play-epsparql-contextualized-latitude-01-query.eprq");
// Parse query
Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL);
StreamIdCollector streamIdCollector = new StreamIdCollector();
QueryDetails qd = new QueryDetails();
streamIdCollector.getStreamIds(query, qd);
// Test toString() implementation
Assert.assertTrue(qd.toString().contains(expectedOutputStream));
// Test output stream
assertTrue(qd.getOutputStream().equals(expectedOutputStream));
// Test input streams
assertTrue(qd.getInputStreams().equals(expectedInputStreams));
}
@Test
public void getVariablesAndTypes() throws IOException{
if(logger == null){
logger= LoggerFactory.getLogger(DispatcherTests.class);
}
// Get query.
String queryString = getSparqlQuery("play-epsparql-clic2call-plus-tweet.eprq");
// Parse query
Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL);
VariableTypeManager vtm = new VariableTypeManager(query);
vtm.collectVars();
List<String> vars = vtm.getVariables(VariableTypes.CONSTRUCT_TYPE);
assertTrue(vars.size() == 5);
assertTrue(vars.contains("e1"));
assertTrue(vars.contains("e2"));
assertTrue(vars.contains("bob"));
assertTrue(vars.contains("alice"));
assertTrue(vars.contains("tweetContent"));
vars = vtm.getVariables(VariableTypes.REALTIME_TYPE);
assertTrue(vars.size() == 8);
assertTrue(vars.contains("id1"));
assertTrue(vars.contains("e1"));
assertTrue(vars.contains("e2"));
assertTrue(vars.contains("alice"));
assertTrue(vars.contains("bob"));
assertTrue(vars.contains("direction"));
assertTrue(vars.contains("firstEvent"));
assertTrue(vars.contains("id2"));
vars = vtm.getVariables(VariableTypes.HISTORIC_TYPE);
System.out.println(vars.size());
assertTrue(vars.size() == 5);
assertTrue(vars.contains("id3"));
assertTrue(vars.contains("e3"));
assertTrue(vars.contains("tweetTime"));
assertTrue(vars.contains("firstEvent"));
assertTrue(vars.contains("tweetContent"));
}
@Test
public void dispatchQueryHistoricalMultipleClouds() throws IOException {
// Get query.
String queryString = getSparqlQuery("EP-SPARQL-Query-Realtime-Historical-multiple-Clouds.eprq");
// Parse query
Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL);
// Dispatch query
List<HistoricalQuery> queries = PlaySerializer.serializeToMultipleSelectQueries(query);
// Test results.
String temperatureAstream = "PREFIX : <http://events.event-processing.org/types/> \nPREFIX xsd : <http://events.event-processing.org/types/> \nPREFIX rdf : <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n\nSELECT DISTINCT ?e2 ?temperature ?pub_date ?id2 ?e4 ?id4 \n WHERE { \nGRAPH ?id2\n { ?e2 rdf:type :Temperature .\n ?e2 :stream <http://streams.event-processing.org/ids/TemperatureA#stream> .\n ?e2 :current ?temperature .\n ?e2 :date ?pub_date\n }\nGRAPH ?id4\n { ?e4 rdf:type :Temperature .\n ?e4 :stream <http://streams.event-processing.org/ids/TemperatureA#stream> .\n ?e4 :current ?temperature\n }} ";
String temperatureBstream = "PREFIX : <http://events.event-processing.org/types/> \nPREFIX xsd : <http://events.event-processing.org/types/> \nPREFIX rdf : <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n\nSELECT DISTINCT ?pub_date ?e3 ?id3 \n WHERE { \nGRAPH ?id3\n { ?e3 rdf:type :Temperature .\n ?e3 :stream <http://streams.event-processing.org/ids/TemperatureB#stream> .\n ?e3 :date ?pub_date\n }} \n";
//Test if generated select query is OK.
assertTrue(queries.get(0).getQuery().equals(temperatureAstream));
assertTrue(queries.get(1).getQuery().equals(temperatureBstream));
for (String varname : queries.get(0).getVariables()) {
System.out.println(varname);
}
}
@Test
public void dispatchMissedCallsPlusTwitterQuery() throws IOException{
// Get query.
String queryString = getSparqlQuery("play-epsparql-clic2call-plus-tweet.eprq");
// Parse query
Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL);
System.out.println(query);
StreamIdCollector streamIdCollector = new StreamIdCollector ();
QueryDetails qd = new QueryDetails();
streamIdCollector.getStreamIds(query, qd);
assertTrue(qd.getOutputStream().equals("http://streams.event-processing.org/ids/TaxiUCClic2Call"));
assertTrue(qd.getInputStreams().contains("http://streams.event-processing.org/ids/TaxiUCCall"));
}
@Test
public void testQueryTemplateGenerator() throws IOException{
QueryTemplateGenerator ab = new QueryTemplateGenerator();
// Get query.
String queryString = getSparqlQuery("play-epsparql-clic2call-plus-tweet.eprq");
// Parse query
Query query = QueryFactory.create(queryString, com.hp.hpl.jena.query.Syntax.syntaxBDPL);
QueryTemplate qt = ab.createQueryTemplate(query);
}
private String getSparqlQuery(String queryFile) throws IOException {
return IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream(queryFile), "UTF-8"); }
}