/* * ************************************************************************************* * 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.view; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.client.soda.*; import com.espertech.esper.support.bean.SupportBean; import com.espertech.esper.support.client.SupportConfigFactory; import com.espertech.esper.util.SerializableObjectCopier; import junit.framework.TestCase; public class TestIStreamRStreamKeywords extends TestCase { private EPServiceProvider epService; private SupportUpdateListener testListener; private SupportUpdateListener testListenerInsertInto; public void setUp() { testListener = new SupportUpdateListener(); testListenerInsertInto = new SupportUpdateListener(); } protected void tearDown() throws Exception { testListener = null; testListenerInsertInto = null; } public void testChangeEngineDefaultRStream() { Configuration config = SupportConfigFactory.getConfiguration(); config.getEngineDefaults().getStreamSelection().setDefaultStreamSelector(StreamSelector.RSTREAM_ONLY); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String stmtText = "select * from " + SupportBean.class.getName() + ".win:length(3)"; EPStatement statement = epService.getEPAdministrator().createEPL(stmtText); statement.addListener(testListener); Object theEvent = sendEvent("a"); sendEvent("b"); sendEvent("c"); assertFalse(testListener.isInvoked()); sendEvent("d"); assertTrue(testListener.isInvoked()); assertSame(theEvent, testListener.getLastNewData()[0].getUnderlying()); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data } public void testChangeEngineDefaultIRStream() { Configuration config = SupportConfigFactory.getConfiguration(); config.getEngineDefaults().getStreamSelection().setDefaultStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String stmtText = "select * from " + SupportBean.class.getName() + ".win:length(3)"; EPStatement statement = epService.getEPAdministrator().createEPL(stmtText); statement.addListener(testListener); Object eventOld = sendEvent("a"); sendEvent("b"); sendEvent("c"); testListener.reset(); Object eventNew = sendEvent("d"); assertTrue(testListener.isInvoked()); assertSame(eventNew, testListener.getLastNewData()[0].getUnderlying()); // receive 'a' as new data assertSame(eventOld, testListener.getLastOldData()[0].getUnderlying()); // receive 'a' as new data } public void testRStreamOnly_OM() throws Exception { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); String stmtText = "select rstream * from " + SupportBean.class.getName() + ".win:length(3)"; EPStatementObjectModel model = new EPStatementObjectModel(); model.setSelectClause(SelectClause.createWildcard(StreamSelector.RSTREAM_ONLY)); FromClause fromClause = FromClause.create(FilterStream.create(SupportBean.class.getName()).addView(View.create("win", "length", Expressions.constant(3)))); model.setFromClause(fromClause); model = (EPStatementObjectModel) SerializableObjectCopier.copy(model); assertEquals(stmtText, model.toEPL()); EPStatement statement = epService.getEPAdministrator().create(model); statement.addListener(testListener); Object theEvent = sendEvent("a"); assertFalse(testListener.isInvoked()); sendEvents(new String[] {"a", "b"}); assertFalse(testListener.isInvoked()); sendEvent("d"); assertSame(theEvent, testListener.getLastNewData()[0].getUnderlying()); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data testListener.reset(); } public void testRStreamOnly_Compile() throws Exception { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); String stmtText = "select rstream * from " + SupportBean.class.getName() + ".win:length(3)"; EPStatementObjectModel model = epService.getEPAdministrator().compileEPL(stmtText); model = (EPStatementObjectModel) SerializableObjectCopier.copy(model); assertEquals(stmtText, model.toEPL()); EPStatement statement = epService.getEPAdministrator().create(model); statement.addListener(testListener); Object theEvent = sendEvent("a"); assertFalse(testListener.isInvoked()); sendEvents(new String[] {"a", "b"}); assertFalse(testListener.isInvoked()); sendEvent("d"); assertSame(theEvent, testListener.getLastNewData()[0].getUnderlying()); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data testListener.reset(); } public void testRStreamOnly() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "select rstream * from " + SupportBean.class.getName() + ".win:length(3)"); statement.addListener(testListener); Object theEvent = sendEvent("a"); assertFalse(testListener.isInvoked()); sendEvents(new String[] {"a", "b"}); assertFalse(testListener.isInvoked()); sendEvent("d"); assertSame(theEvent, testListener.getLastNewData()[0].getUnderlying()); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data testListener.reset(); } public void testRStreamInsertInto() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "insert into NextStream " + "select rstream s0.theString as theString from " + SupportBean.class.getName() + ".win:length(3) as s0"); statement.addListener(testListener); statement = epService.getEPAdministrator().createEPL("select * from NextStream"); statement.addListener(testListenerInsertInto); sendEvent("a"); assertFalse(testListener.isInvoked()); assertEquals("a", testListenerInsertInto.assertOneGetNewAndReset().get("theString")); // insert into unchanged sendEvents(new String[] {"b", "c"}); assertFalse(testListener.isInvoked()); assertEquals(2, testListenerInsertInto.getNewDataList().size()); // insert into unchanged testListenerInsertInto.reset(); sendEvent("d"); assertSame("a", testListener.getLastNewData()[0].get("theString")); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data assertEquals("d", testListenerInsertInto.getLastNewData()[0].get("theString")); // insert into unchanged assertNull(testListenerInsertInto.getLastOldData()); // receive no old data in insert into testListener.reset(); } public void testRStreamInsertIntoRStream() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "insert rstream into NextStream " + "select rstream s0.theString as theString from " + SupportBean.class.getName() + ".win:length(3) as s0"); statement.addListener(testListener); statement = epService.getEPAdministrator().createEPL("select * from NextStream"); statement.addListener(testListenerInsertInto); sendEvent("a"); assertFalse(testListener.isInvoked()); assertFalse(testListenerInsertInto.isInvoked()); sendEvents(new String[] {"b", "c"}); assertFalse(testListener.isInvoked()); assertFalse(testListenerInsertInto.isInvoked()); sendEvent("d"); assertSame("a", testListener.getLastNewData()[0].get("theString")); // receive 'a' as new data assertNull(testListener.getLastOldData()); // receive no more old data assertEquals("a", testListenerInsertInto.getLastNewData()[0].get("theString")); // insert into unchanged assertNull(testListener.getLastOldData()); // receive no old data in insert into testListener.reset(); } public void testRStreamJoin() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "select rstream s1.intPrimitive as aID, s2.intPrimitive as bID " + "from " + SupportBean.class.getName() + "(theString='a').win:length(2) as s1, " + SupportBean.class.getName() + "(theString='b').win:keepall() as s2" + " where s1.intPrimitive = s2.intPrimitive"); statement.addListener(testListener); sendEvent("a", 1); sendEvent("b", 1); assertFalse(testListener.isInvoked()); sendEvent("a", 2); assertFalse(testListener.isInvoked()); sendEvent("a", 3); assertEquals(1, testListener.getLastNewData()[0].get("aID")); // receive 'a' as new data assertEquals(1, testListener.getLastNewData()[0].get("bID")); assertNull(testListener.getLastOldData()); // receive no more old data testListener.reset(); } public void testIStreamOnly() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "select istream * from " + SupportBean.class.getName() + ".win:length(1)"); statement.addListener(testListener); Object theEvent = sendEvent("a"); assertSame(theEvent, testListener.assertOneGetNewAndReset().getUnderlying()); theEvent = sendEvent("b"); assertSame(theEvent, testListener.getLastNewData()[0].getUnderlying()); assertNull(testListener.getLastOldData()); // receive no old data, just istream events testListener.reset(); } public void testIStreamInsertIntoRStream() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "insert rstream into NextStream " + "select istream a.theString as theString from " + SupportBean.class.getName() + ".win:length(1) as a"); statement.addListener(testListener); statement = epService.getEPAdministrator().createEPL("select * from NextStream"); statement.addListener(testListenerInsertInto); sendEvent("a"); assertEquals("a", testListener.assertOneGetNewAndReset().get("theString")); assertFalse(testListenerInsertInto.isInvoked()); sendEvent("b"); assertEquals("b", testListener.getLastNewData()[0].get("theString")); assertNull(testListener.getLastOldData()); assertEquals("a", testListenerInsertInto.getLastNewData()[0].get("theString")); assertNull(testListenerInsertInto.getLastOldData()); } public void testIStreamJoin() { epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration()); epService.initialize(); EPStatement statement = epService.getEPAdministrator().createEPL( "select istream s1.intPrimitive as aID, s2.intPrimitive as bID " + "from " + SupportBean.class.getName() + "(theString='a').win:length(2) as s1, " + SupportBean.class.getName() + "(theString='b').win:keepall() as s2" + " where s1.intPrimitive = s2.intPrimitive"); statement.addListener(testListener); sendEvent("a", 1); sendEvent("b", 1); assertEquals(1, testListener.getLastNewData()[0].get("aID")); // receive 'a' as new data assertEquals(1, testListener.getLastNewData()[0].get("bID")); assertNull(testListener.getLastOldData()); // receive no more old data testListener.reset(); sendEvent("a", 2); assertFalse(testListener.isInvoked()); sendEvent("a", 3); assertFalse(testListener.isInvoked()); } private void sendEvents(String[] stringValue) { for (int i = 0; i < stringValue.length; i++) { sendEvent(stringValue[i]); } } private Object sendEvent(String stringValue) { return sendEvent(stringValue, -1); } private Object sendEvent(String stringValue, int intPrimitive) { SupportBean theEvent = new SupportBean(); theEvent.setTheString(stringValue); theEvent.setIntPrimitive(intPrimitive); epService.getEPRuntime().sendEvent(theEvent); return theEvent; } }