package eu.play_project.dcep.distributedetalis.test;
import static eu.play_project.play_commons.constants.Event.EVENT_ID_SUFFIX;
import static eu.play_project.play_commons.constants.Namespace.EVENTS;
import static eu.play_project.play_commons.constants.Namespace.TYPES;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.event_processing.events.types.Event;
import org.junit.Test;
import org.ontoware.rdf2go.impl.jena.TypeConversion;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.NodeFactory;
import com.hp.hpl.jena.vocabulary.RDF;
import eu.play_project.dcep.distributedetalis.utils.EventCloudHelpers;
import eu.play_project.play_commons.constants.Stream;
import fr.inria.eventcloud.api.CompoundEvent;
import fr.inria.eventcloud.api.Quadruple;
public class EventCloudHelpersTest {
private final String eventId = EVENTS.getUri() + "1234";
private final Node GRAPHNAME = NodeFactory.createURI(eventId);
// Subjects
private final Node SUBJECT = NodeFactory.createURI(eventId + EVENT_ID_SUFFIX);
private final Node OTHER_SUBJECT = NodeFactory.createURI(eventId + "bogus");
// Predicates
private final Node STREAM = TypeConversion.toJenaNode(Event.STREAM);
// Objects
private final Node EVENT_TYPE_1 = NodeFactory.createURI(TYPES.getUri() + "Type1");
private final Node EVENT_TYPE_2 = NodeFactory.createURI(TYPES.getUri() + "Type2");
private final Node EVENT_TYPE_DEFAULT = TypeConversion.toJenaNode(Event.RDFS_CLASS);
/**
* Test an event with proper subject.
*/
@Test
public void testGetEventTypeWithSubject() {
List<Quadruple> quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
SUBJECT,
RDF.type.asNode(),
EVENT_TYPE_1));
quadruple.add(new Quadruple(
GRAPHNAME,
OTHER_SUBJECT,
RDF.type.asNode(),
EVENT_TYPE_2));
CompoundEvent event = new CompoundEvent(quadruple);
assertEquals(EVENT_TYPE_1.toString(), EventCloudHelpers.getEventType(event));
}
/**
* Test an event with no proper subject.
*/
@Test
public void testGetEventTypeWithoutSubject() {
List<Quadruple> quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
OTHER_SUBJECT,
RDF.type.asNode(),
EVENT_TYPE_2));
CompoundEvent event = new CompoundEvent(quadruple);
assertEquals(EVENT_TYPE_2.toString(), EventCloudHelpers.getEventType(event));
}
/**
* Test an event with no type declaration whatsoever: the default event type
* should be returned.
*/
@Test
public void testGetEventTypeWithoutType() {
List<Quadruple> quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
OTHER_SUBJECT,
RDF.first.asNode(), // arbitrary predicate
EVENT_TYPE_2));
CompoundEvent event = new CompoundEvent(quadruple);
assertEquals(EVENT_TYPE_DEFAULT.toString(), EventCloudHelpers.getEventType(event));
}
/**
* Test finding the correct cloud ID from an event.
*/
@Test
public void testGetCloudId() {
List<Quadruple> quadruple;
CompoundEvent event;
// check proper graph, subject and predicate
quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
SUBJECT,
STREAM,
NodeFactory.createURI(Stream.ActivityEventStream.getUri())));
event = new CompoundEvent(quadruple);
assertEquals(Stream.ActivityEventStream.getTopicUri(), EventCloudHelpers.getCloudId(event));
// check proper graph, subject and predicate with manually created URIs
quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
SUBJECT,
NodeFactory.createURI("http://events.event-processing.org/types/stream"),
NodeFactory.createURI("http://streams.event-processing.org/ids/TaxiUCESRRecomDcep#stream")));
event = new CompoundEvent(quadruple);
assertEquals(NodeFactory.createURI("http://streams.event-processing.org/ids/TaxiUCESRRecomDcep").toString(), EventCloudHelpers.getCloudId(event));
// check proper graph, predicate an improper subject
quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
OTHER_SUBJECT,
STREAM,
NodeFactory.createURI(Stream.ActivityEventStream.getUri())));
event = new CompoundEvent(quadruple);
assertEquals(Stream.ActivityEventStream.getTopicUri(), EventCloudHelpers.getCloudId(event));
// check if proper subject overrules improper subject (primary choice)
quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
OTHER_SUBJECT,
STREAM,
NodeFactory.createURI(Stream.TwitterFeed.getUri())));
quadruple.add(new Quadruple(
GRAPHNAME,
SUBJECT,
STREAM,
NodeFactory.createURI(Stream.ActivityEventStream.getUri())));
event = new CompoundEvent(quadruple);
assertEquals(Stream.ActivityEventStream.getTopicUri(), EventCloudHelpers.getCloudId(event));
// check improper predicate (no stream can be found, empty string is returned)
quadruple = new ArrayList<Quadruple>();
quadruple.add(new Quadruple(
GRAPHNAME,
SUBJECT,
NodeFactory.createURI("http://domain.invalid/bogus_uri"),
NodeFactory.createURI(Stream.ActivityEventStream.getUri())));
event = new CompoundEvent(quadruple);
assertEquals("", EventCloudHelpers.getCloudId(event));
}
}