/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* 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.epl;
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.scopetest.EPAssertionUtil;
import com.espertech.esper.client.scopetest.SupportUpdateListener;
import com.espertech.esper.support.bean.SupportBean;
import com.espertech.esper.support.client.SupportConfigFactory;
import com.espertech.esper.util.EventRepresentationEnum;
import junit.framework.TestCase;
import java.util.HashMap;
public class TestNamedWindowProcessingOrder extends TestCase
{
private EPServiceProvider epService;
private SupportUpdateListener listener;
public void setUp()
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("Event", SupportBean.class);
epService = EPServiceProviderManager.getDefaultProvider(config);
epService.initialize();
listener = new SupportUpdateListener();
}
protected void tearDown() throws Exception {
listener = null;
}
public void testDispatchBackQueue() {
runAssertionDispatchBackQueue(EventRepresentationEnum.OBJECTARRAY);
runAssertionDispatchBackQueue(EventRepresentationEnum.DEFAULT);
runAssertionDispatchBackQueue(EventRepresentationEnum.MAP);
}
public void runAssertionDispatchBackQueue(EventRepresentationEnum eventRepresentationEnum) {
epService.getEPAdministrator().createEPL(eventRepresentationEnum.getAnnotationText() + " create schema StartValueEvent as (dummy string)");
epService.getEPAdministrator().createEPL(eventRepresentationEnum.getAnnotationText() + " create schema TestForwardEvent as (prop1 string)");
epService.getEPAdministrator().createEPL(eventRepresentationEnum.getAnnotationText() + " create schema TestInputEvent as (dummy string)");
epService.getEPAdministrator().createEPL("insert into TestForwardEvent select'V1' as prop1 from TestInputEvent");
epService.getEPAdministrator().createEPL(eventRepresentationEnum.getAnnotationText() + " create window NamedWin.std:unique(prop1) (prop1 string, prop2 string)");
epService.getEPAdministrator().createEPL("insert into NamedWin select 'V1' as prop1, 'O1' as prop2 from StartValueEvent");
epService.getEPAdministrator().createEPL("on TestForwardEvent update NamedWin as work set prop2 = 'U1' where work.prop1 = 'V1'");
String[] fields = "prop1,prop2".split(",");
String eplSelect = "select irstream prop1, prop2 from NamedWin";
epService.getEPAdministrator().createEPL(eplSelect).addListener(listener);
if (eventRepresentationEnum.isObjectArrayEvent()) {
epService.getEPRuntime().sendEvent(new Object[] {"dummyValue"}, "StartValueEvent");
}
else {
epService.getEPRuntime().sendEvent(new HashMap<String, String>(), "StartValueEvent");
}
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{"V1", "O1"});
if (eventRepresentationEnum.isObjectArrayEvent()) {
epService.getEPRuntime().sendEvent(new Object[] {"dummyValue"}, "TestInputEvent");
}
else {
epService.getEPRuntime().sendEvent(new HashMap<String, String>(), "TestInputEvent");
}
EPAssertionUtil.assertProps(listener.getLastOldData()[0], fields, new Object[]{"V1", "O1"});
EPAssertionUtil.assertProps(listener.getAndResetLastNewData()[0], fields, new Object[]{"V1", "U1"});
epService.initialize();
}
public void testOrderedDeleteAndSelect()
{
String stmtText;
stmtText = "create window MyWindow.std:lastevent() as select * from Event";
epService.getEPAdministrator().createEPL(stmtText);
stmtText = "insert into MyWindow select * from Event";
epService.getEPAdministrator().createEPL(stmtText);
stmtText = "on MyWindow e delete from MyWindow win where win.theString=e.theString and e.intPrimitive = 7";
epService.getEPAdministrator().createEPL(stmtText);
stmtText = "on MyWindow e delete from MyWindow win where win.theString=e.theString and e.intPrimitive = 5";
epService.getEPAdministrator().createEPL(stmtText);
stmtText = "on MyWindow e insert into ResultStream select e.* from MyWindow";
epService.getEPAdministrator().createEPL(stmtText);
stmtText = "select * from ResultStream";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
epService.getEPRuntime().sendEvent(new SupportBean("E1", 7));
assertFalse("E1", listener.isInvoked());
epService.getEPRuntime().sendEvent(new SupportBean("E2", 8));
assertEquals("E2", listener.assertOneGetNewAndReset().get("theString"));
epService.getEPRuntime().sendEvent(new SupportBean("E3", 5));
assertFalse("E3", listener.isInvoked());
epService.getEPRuntime().sendEvent(new SupportBean("E4", 6));
assertEquals("E4", listener.assertOneGetNewAndReset().get("theString"));
}
}