package com.espertech.esper.example.transaction; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.scopetest.SupportUpdateListener; public class TestCombinedEventStmt extends TestStmtBase { private SupportUpdateListener listener; public void setUp() { super.setUp(); listener = new SupportUpdateListener(); CombinedEventStmt stmt = new CombinedEventStmt(epService.getEPAdministrator()); stmt.addListener(listener); } public void testFlow() { TxnEventA a = new TxnEventA("id1", 1, "c1"); TxnEventB b = new TxnEventB("id1", 2); TxnEventC c = new TxnEventC("id1", 3, "s1"); // send 3 events with C last sendEvent(a); sendEvent(b); assertFalse(listener.isInvoked()); sendEvent(c); assertCombinedEvent(a, b, c); // send events not matching id a = new TxnEventA("id4", 4, "c2"); b = new TxnEventB("id2", 5); c = new TxnEventC("id3", 6, "s2"); sendEvent(a); sendEvent(b); assertFalse(listener.isInvoked()); sendEvent(c); // send events with B last a = new TxnEventA("id3", 7, "c2"); b = new TxnEventB("id3", 8); sendEvent(a); assertFalse(listener.isInvoked()); sendEvent(b); assertCombinedEvent(a, b, c); // send events with A last a = new TxnEventA("id6", 9, "c2"); b = new TxnEventB("id6", 10); c = new TxnEventC("id6", 11, "s2"); sendEvent(b); sendEvent(c); assertFalse(listener.isInvoked()); sendEvent(a); assertCombinedEvent(a, b, c); } private void assertCombinedEvent(TxnEventA expectedA, TxnEventB expectedB, TxnEventC expectedC) { assertEquals(1, listener.getNewDataList().size()); assertEquals(1, listener.getLastNewData().length); EventBean combinedEvent = listener.getLastNewData()[0]; assertSame(expectedC.getTransactionId(), combinedEvent.get("transactionId")); assertSame(expectedB.getTransactionId(), combinedEvent.get("transactionId")); assertSame(expectedA.getTransactionId(), combinedEvent.get("transactionId")); assertSame(expectedA.getCustomerId(), combinedEvent.get("customerId")); assertSame(expectedC.getSupplierId(), combinedEvent.get("supplierId")); assertSame(expectedC.getTimestamp() - expectedA.getTimestamp(), combinedEvent.get("latencyAC")); assertSame(expectedB.getTimestamp() - expectedA.getTimestamp(), combinedEvent.get("latencyAB")); assertSame(expectedC.getTimestamp() - expectedB.getTimestamp(), combinedEvent.get("latencyBC")); listener.reset(); } }