package eu.play_project.dcep.distributedetalis.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import org.etsi.uri.gcm.util.GCM; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.objectweb.fractal.adl.ADLException; import org.objectweb.fractal.adl.Factory; import org.objectweb.fractal.api.Component; import org.objectweb.fractal.api.NoSuchInterfaceException; import org.objectweb.fractal.api.control.IllegalLifeCycleException; import org.objectweb.proactive.ActiveObjectCreationException; import org.objectweb.proactive.api.PAActiveObject; import org.objectweb.proactive.core.component.adl.FactoryFactory; import org.objectweb.proactive.core.config.CentralPAPropertyRepository; import org.objectweb.proactive.core.node.NodeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.hp.hpl.jena.graph.NodeFactory; import eu.play_project.dcep.api.DcepManagementException; import eu.play_project.dcep.api.DcepManagmentApi; import eu.play_project.dcep.api.DcepMonitoringApi; import eu.play_project.dcep.distributedetalis.api.ConfigApi; import eu.play_project.dcep.distributedetalis.api.DistributedEtalisException; import eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi; import eu.play_project.dcep.distributedetalis.configurations.DetalisConfigLocal; import eu.play_project.play_platformservices.api.BdplQuery; import eu.play_project.play_platformservices.api.QueryDetails; import fr.inria.eventcloud.api.CompoundEvent; import fr.inria.eventcloud.api.Quadruple; public class DEtalisTests implements Serializable { private static final long serialVersionUID = 100L; private static DistributedEtalisTestApi distributedEtalisTestApi; private static DcepManagmentApi dcepManagmentApi = null; private static PublishApiSubscriber subscriber = null; private static ConfigApi configApi = null; static Component root; private final Logger logger = LoggerFactory.getLogger(DEtalisTests.class); DcepMonitoringApi dEtalis; @Test public void basicDetalisComponentTest() throws IllegalLifeCycleException, NoSuchInterfaceException, ADLException, DistributedEtalisException, InterruptedException, DcepManagementException { /* * Check if you get a reference to PublishApi and ManagementApi: */ if (distributedEtalisTestApi == null || dcepManagmentApi == null) { fail("No DCEP Component"); } /* * Register a pattern: */ logger.info("Register pattern."); QueryDetails qd = new QueryDetails("queryId42"); qd.setRdfDbQueries(new ArrayList<String>()); BdplQuery bdpl = BdplQuery.nonValidatingBuilder() .details(qd) .ele("complex(ID1, queryId42) do (generateConstructResult([S], ['http://play-project.eu/is/CepResult'], [O], ID)) <- 'http://events.event-processing.org/types/Event'(ID1) where (rdf(S, P, O, ID1), (xpath(element(sparqlFilter, [keyWord=O], []), //sparqlFilter(contains(@keyWord,'42')), _)))") //.ele("complex(CEID1, queryId42) do (generateConstructResult([S], ['http://play-project.eu/is/CepResult'], [O], ID)) <- 'http://events.event-processing.org/types/Event'(ID1) where (rdf(S, P, O, ID1),random(1000000, 9000000, CEID1))") .bdpl("") .build(); dcepManagmentApi.registerEventPattern(bdpl); /* * Push an event: */ logger.info("Push events"); Quadruple event = new Quadruple(NodeFactory.createURI("id4710"), NodeFactory.createURI("http://play-project.eu/Karlsruhe"), NodeFactory.createURI("http://play-project.eu/is/CepResult"), NodeFactory.createURI("http://play-project.eu/42")); ArrayList<Quadruple> list = new ArrayList<Quadruple>(); list.add(event); CompoundEvent ce = new CompoundEvent(list); logger.info("SENT: ====================================\n" + ce); distributedEtalisTestApi.publish(ce); Thread.sleep(30000); /* * Check results: */ logger.info("Check results."); Quadruple expectedResult = new Quadruple(NodeFactory.createURI("http://events.event-processing.org/ids/id4710"), NodeFactory.createURI("http://play-project.eu/Karlsruhe"), NodeFactory.createURI("http://play-project.eu/is/CepResult"), NodeFactory.createURI("http://play-project.eu/42")); CompoundEvent result = subscriber.getComplexEvents().get(0); logger.debug("ACTUAL: " + result.get(4).toString()); logger.debug("TARGET: " + expectedResult.toString()); assertEquals(expectedResult, subscriber.getComplexEvents().get(0).get(4)); dcepManagmentApi.unregisterEventPattern(bdpl.getDetails().getQueryId()); } @After public void shutDownComponents() { logger.info("Terminate components"); try { GCM.getGCMLifeCycleController(root).stopFc(); GCM.getGCMLifeCycleController(root).terminateGCMComponent(); } catch (IllegalLifeCycleException e) { e.printStackTrace(); } catch (NoSuchInterfaceException e) { e.printStackTrace(); } try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } @Before public void instantiateDcepComponent() throws IllegalLifeCycleException, NoSuchInterfaceException, ADLException, DistributedEtalisException { // CentralPAPropertyRepository.JAVA_SECURITY_POLICY.setValue("proactive.java.policy"); CentralPAPropertyRepository.JAVA_SECURITY_POLICY.setValue(System .getProperty("user.dir") + "\\src\\main\\resources\\proactive.java.policy"); CentralPAPropertyRepository.GCM_PROVIDER .setValue("org.objectweb.proactive.core.component.Fractive"); // setProAktiveHome(); Factory factory = FactoryFactory.getFactory(); HashMap<String, Object> context = new HashMap<String, Object>(); // GCMApplication gcma = PAGCMDeployment.loadApplicationDescriptor( // new // URL("file:/"+System.getProperty("user.dir")+"/src/main/resources/applicationDescriptor.xml")); // gcma.startDeployment(); // gcma.waitReady(); // // context.put("deployment-descriptor", gcma); root = (Component) factory.newComponent("DistributedEtalis", context); GCM.getGCMLifeCycleController(root).startFc(); distributedEtalisTestApi = ((eu.play_project.dcep.distributedetalis.api.DistributedEtalisTestApi) root .getFcInterface(DistributedEtalisTestApi.class.getSimpleName())); configApi = ((eu.play_project.dcep.distributedetalis.api.ConfigApi) root.getFcInterface(ConfigApi.class.getSimpleName())); configApi.setConfig(new DetalisConfigLocal("play-epsparql-clic2call-plus-tweet-historical-data.trig")); dcepManagmentApi = ((eu.play_project.dcep.api.DcepManagmentApi) root.getFcInterface(DcepManagmentApi.class.getSimpleName())); dEtalis = ((eu.play_project.dcep.api.DcepMonitoringApi) root.getFcInterface(DcepMonitoringApi.class.getSimpleName())); // Subscribe to get complex events. try { subscriber = PAActiveObject.newActive(PublishApiSubscriber.class, new Object[] {}); } catch (ActiveObjectCreationException e) { e.printStackTrace(); } catch (NodeException e) { e.printStackTrace(); } distributedEtalisTestApi.attach(subscriber); } }