/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.example.marketdatafeed; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.client.time.CurrentTimeEvent; import com.espertech.esper.client.time.TimerControlEvent; import junit.framework.TestCase; import java.util.HashMap; public class TestTicksPerSecondStatement extends TestCase { private EPServiceProvider epService; private SupportUpdateListener listener; public void setUp() { Configuration configuration = new Configuration(); configuration.addEventType("MarketDataEvent", MarketDataEvent.class.getName()); epService = EPServiceProviderManager.getProvider("TestTicksPerSecondStatement", configuration); epService.initialize(); listener = new SupportUpdateListener(); TicksPerSecondStatement stmt = new TicksPerSecondStatement(epService.getEPAdministrator()); stmt.addListener(listener); // Use external clocking for the test epService.getEPRuntime().sendEvent(new TimerControlEvent(TimerControlEvent.ClockType.CLOCK_EXTERNAL)); } public void testFlow() { sendEvent(new CurrentTimeEvent(1000)); // Set the start time to 1 second sendEvent(new MarketDataEvent("CSC", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("IBM", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("GE", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("MS", FeedEnum.FEED_B)); assertFalse(listener.isInvoked()); sendEvent(new CurrentTimeEvent(1500)); // Now events arriving around 1.5 sec sendEvent(new MarketDataEvent("TEL", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("CSC", FeedEnum.FEED_B)); assertFalse(listener.isInvoked()); sendEvent(new CurrentTimeEvent(2000)); // Now events arriving around 2 sec sendEvent(new MarketDataEvent("TEL", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("IBM", FeedEnum.FEED_B)); sendEvent(new MarketDataEvent("GE", FeedEnum.FEED_B)); sendEvent(new MarketDataEvent("IOU", FeedEnum.FEED_B)); assertCounts(4, 2); sendEvent(new CurrentTimeEvent(2500)); // Now events arriving around 2.5 sec sendEvent(new MarketDataEvent("TEL", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("GE", FeedEnum.FEED_B)); sendEvent(new MarketDataEvent("MS", FeedEnum.FEED_B)); assertFalse(listener.isInvoked()); sendEvent(new CurrentTimeEvent(3000)); assertCounts(2, 5); sendEvent(new CurrentTimeEvent(3500)); sendEvent(new MarketDataEvent("TEL", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("IBM", FeedEnum.FEED_A)); sendEvent(new MarketDataEvent("UUS", FeedEnum.FEED_A)); assertFalse(listener.isInvoked()); sendEvent(new CurrentTimeEvent(4000)); sendEvent(new MarketDataEvent("NBOT", FeedEnum.FEED_B)); sendEvent(new MarketDataEvent("YAH", FeedEnum.FEED_B)); assertCounts(3, 0); sendEvent(new CurrentTimeEvent(4500)); assertFalse(listener.isInvoked()); sendEvent(new CurrentTimeEvent(5000)); assertCounts(0, 2); } private void assertCounts(long countFeedA, long countFeedB) { HashMap<FeedEnum, Long> countPerFeed = new HashMap<FeedEnum, Long>(); countPerFeed.put((FeedEnum) listener.getLastNewData()[0].get("feed"), (Long) listener.getLastNewData()[0].get("cnt")); countPerFeed.put((FeedEnum) listener.getLastNewData()[1].get("feed"), (Long) listener.getLastNewData()[1].get("cnt")); assertEquals(2, listener.getLastNewData().length); listener.reset(); assertEquals(countFeedA, (long) countPerFeed.get(FeedEnum.FEED_A)); // casting to long to avoid JUnit ambiguous assert assertEquals(countFeedB, (long) countPerFeed.get(FeedEnum.FEED_B)); } private void sendEvent(Object theEvent) { epService.getEPRuntime().sendEvent(theEvent); } }