package org.drools.integrationtests.eventgenerator;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.integrationtests.SerializationHelper;
import org.drools.integrationtests.eventgenerator.Event.EventType;
import org.drools.lang.descr.PackageDescr;
import org.drools.rule.Package;
public class SimpleEventGeneratorTest extends TestCase {
private final static String TEST_RULE_FILE = "test_eventGenerator.drl";
protected RuleBase getRuleBase() throws Exception {
return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
null );
}
private RuleBase loadRuleBase(final Reader reader) throws IOException,
DroolsParserException,
Exception {
final DrlParser parser = new DrlParser();
final PackageDescr packageDescr = parser.parse( reader );
if ( parser.hasErrors() ) {
System.out.println( parser.getErrors() );
Assert.fail( "Error messages in parser, need to sort this our (or else collect error messages)" );
}
// pre build the package
final PackageBuilder builder = new PackageBuilder();
builder.addPackage( packageDescr );
final Package pkg = builder.getPackage();
// add the package to a rulebase
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
// load up the rulebase
return SerializationHelper.serializeObject(ruleBase);
}
public void testEventGenerationMaxItems() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate 10 events, starting from the session clock
myGenerator.addEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), 0, 10);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), 10);
}
public void testEventGenerationMaxTime() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate events for 1 min, starting from the session clock
myGenerator.addEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(1), 0);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), wm.getQueryResults("all inserted events with generation time < 1 min").size());
}
public void testEventGenerationMaxTimeAndMaxItems() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate at most 10 events not exceeding 1 min, starting from the session clock
myGenerator.addEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(1), 10);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), wm.getQueryResults("all inserted events with generation time < 1 min").size());
assertTrue(wm.getQueryResults("all inserted events with generation time < 1 min").size()<=10);
}
public void testEventGenerationDelayedMaxItems() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate 10 events, delayed by 2 minutes from start session clock
myGenerator.addDelayedEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(2), 0, 10);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), 10);
}
public void testEventGenerationDelayedMaxTime() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate events for 1 min, delayed by 2 minutes from start session clock
myGenerator.addDelayedEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(2), PseudoSessionClock.timeInMinutes(1), 0);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), wm.getQueryResults("all inserted events with 2 min < generation time < 3 min").size());
}
public void testEventGenerationDelayedMaxTimeAndMaxItems() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate at most 10 events not exceeding 1 min, delayed by 2 minutes from start session clock
myGenerator.addDelayedEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(2), PseudoSessionClock.timeInMinutes(1), 10);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), wm.getQueryResults("all inserted events with 2 min < generation time < 3 min").size());
assertTrue(wm.getQueryResults("all inserted events with 2 min < generation time < 3 min").size()<=10);
}
public void testEventGenerationGlobalMaxTime() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm), PseudoSessionClock.timeInMinutes(1));
// generate events for 1 min, starting from the session clock
myGenerator.addEventSource("Conveyor1", new Event(EventType.CUSTOM, null), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), PseudoSessionClock.timeInMinutes(3), 0);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events").size(), wm.getQueryResults("all inserted events with generation time < 1 min").size());
}
public void testEventGenerationMultipleSources() throws DroolsParserException, IOException, Exception{
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( TEST_RULE_FILE ) );
final RuleBase ruleBase = loadRuleBase( reader );
final WorkingMemory wm = ruleBase.newStatefulSession();
final SimpleEventGenerator myGenerator;
// create unrestricted event generator
myGenerator = new SimpleEventGenerator(wm , new SimpleEventListener(wm));
// generate 15 events with parent resource A and 20 events with parent resource B
myGenerator.addEventSource("Conveyor1", new Event(EventType.CUSTOM, "resA"), PseudoSessionClock.timeInSeconds(4), PseudoSessionClock.timeInSeconds(6), 0, 15);
myGenerator.addEventSource("Conveyor2", new Event(EventType.CUSTOM, "resB"), PseudoSessionClock.timeInSeconds(3), PseudoSessionClock.timeInSeconds(5), 0, 20);
myGenerator.generate();
assertEquals(wm.getQueryResults("all inserted events with parent resource A").size(), 15);
assertEquals(wm.getQueryResults("all inserted events with parent resource B").size(), 20);
}
}