/* *************************************************************************************** * 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.regression.client; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.hook.VirtualDataWindow; import com.espertech.esper.client.hook.VirtualDataWindowEventConsumerAdd; import com.espertech.esper.client.hook.VirtualDataWindowEventConsumerBase; import com.espertech.esper.client.hook.VirtualDataWindowEventConsumerRemove; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.metrics.instrumentation.InstrumentationHelper; import com.espertech.esper.supportregression.bean.SupportBean; import com.espertech.esper.supportregression.client.SupportConfigFactory; import com.espertech.esper.supportregression.virtualdw.SupportVirtualDW; import com.espertech.esper.supportregression.virtualdw.SupportVirtualDWFactory; import junit.framework.TestCase; import javax.naming.NamingException; import java.util.Collections; public class TestVirtualDataWindowLateConsume extends TestCase { private EPServiceProvider epService; private SupportUpdateListener listener; public void setUp() { listener = new SupportUpdateListener(); Configuration configuration = SupportConfigFactory.getConfiguration(); configuration.addPlugInVirtualDataWindow("test", "vdw", SupportVirtualDWFactory.class.getName(), SupportVirtualDW.ITERATE); // configure with iteration configuration.addEventType("SupportBean", SupportBean.class); epService = EPServiceProviderManager.getDefaultProvider(configuration); epService.initialize(); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.startTest(epService, this.getClass(), getName());} } public void tearDown() { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.endTest();} listener = null; } public void testInsertConsume() { epService.getEPAdministrator().createEPL("create window MyVDW.test:vdw() as SupportBean"); SupportVirtualDW window = (SupportVirtualDW) getFromContext("/virtualdw/MyVDW"); SupportBean supportBean = new SupportBean("S1", 100); window.setData(Collections.singleton(supportBean)); epService.getEPAdministrator().createEPL("insert into MyVDW select * from SupportBean"); // test aggregated consumer - wherein the virtual data window does not return an iterator that prefills the aggregation state String[] fields = "val0".split(","); EPStatement stmtAggregate = epService.getEPAdministrator().createEPL("@Name('ABC') select sum(intPrimitive) as val0 from MyVDW"); stmtAggregate.addListener(listener); EPAssertionUtil.assertProps(stmtAggregate.iterator().next(), fields, new Object[]{100}); epService.getEPRuntime().sendEvent(new SupportBean("E1", 10)); EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{110}); epService.getEPRuntime().sendEvent(new SupportBean("E1", 20)); EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{130}); // assert events received for add-consumer and remove-consumer stmtAggregate.destroy(); VirtualDataWindowEventConsumerAdd addConsumerEvent = (VirtualDataWindowEventConsumerAdd) window.getEvents().get(0); VirtualDataWindowEventConsumerRemove removeConsumerEvent = (VirtualDataWindowEventConsumerRemove) window.getEvents().get(1); for (VirtualDataWindowEventConsumerBase base : new VirtualDataWindowEventConsumerBase[] {addConsumerEvent, removeConsumerEvent}) { assertEquals(-1, base.getAgentInstanceId()); assertEquals("MyVDW", base.getNamedWindowName()); assertEquals("ABC", base.getStatementName()); } assertSame(removeConsumerEvent.getConsumerObject(), addConsumerEvent.getConsumerObject()); window.getEvents().clear(); // test filter criteria passed to event EPStatement stmtAggregateWFilter = epService.getEPAdministrator().createEPL("@Name('ABC') select sum(intPrimitive) as val0 from MyVDW(theString = 'A')"); VirtualDataWindowEventConsumerAdd eventWithFilter = (VirtualDataWindowEventConsumerAdd) window.getEvents().get(0); assertEquals(1, eventWithFilter.getFilterExpressions().length); assertNotNull(eventWithFilter.getExprEvaluatorContext()); stmtAggregateWFilter.destroy(); } private VirtualDataWindow getFromContext(String name) { try { return (VirtualDataWindow) epService.getContext().lookup(name); } catch (NamingException e) { throw new RuntimeException("Name '" + name + "' could not be looked up"); } } }