Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BZ-1019708: fixing NPE on queries with no results
(cherry picked from commit 315cc8f)
- Loading branch information
1 parent
b18d2a2
commit 5151d01
Showing
2 changed files
with
139 additions
and
1 deletion.
There are no files selected for viewing
138 changes: 138 additions & 0 deletions
138
drools-compiler/src/test/java/org/drools/compiler/integrationtests/QueryCepTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
package org.drools.compiler.integrationtests; | ||
|
||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.assertTrue; | ||
|
||
import java.util.concurrent.TimeUnit; | ||
|
||
import org.drools.core.time.SessionPseudoClock; | ||
import org.junit.After; | ||
import org.junit.Before; | ||
import org.junit.Ignore; | ||
import org.junit.Test; | ||
import org.kie.api.KieServices; | ||
import org.kie.api.builder.KieFileSystem; | ||
import org.kie.api.builder.model.KieBaseModel; | ||
import org.kie.api.builder.model.KieModuleModel; | ||
import org.kie.api.conf.EventProcessingOption; | ||
import org.kie.api.runtime.KieSession; | ||
import org.kie.api.runtime.conf.ClockTypeOption; | ||
import org.kie.api.runtime.rule.EntryPoint; | ||
import org.kie.api.runtime.rule.QueryResults; | ||
import org.kie.internal.io.ResourceFactory; | ||
|
||
public class QueryCepTest { | ||
|
||
private KieSession ksession; | ||
|
||
private SessionPseudoClock clock; | ||
|
||
private EntryPoint firstEntryPoint, secondEntryPoint; | ||
|
||
@Before | ||
public void prepare() { | ||
String drl = "package org.drools.compiler.integrationtests\n" + | ||
"import org.drools.compiler.integrationtests.QueryCepTest.TestEvent\n" + | ||
"declare TestEvent\n" + | ||
" @role( event )\n" + | ||
"end\n" + | ||
"query EventsFromStream\n" + | ||
" $event : TestEvent() from entry-point FirstStream\n" + | ||
"end\n" + | ||
"query ZeroToNineteenSeconds\n" + | ||
" $event : TestEvent() from entry-point FirstStream\n" + | ||
" $result : TestEvent ( this after [0s, 19s] $event) from entry-point SecondStream\n" + | ||
"end\n"; | ||
|
||
final KieServices ks = KieServices.Factory.get(); | ||
KieFileSystem kfs = ks.newKieFileSystem(); | ||
KieModuleModel kmodule = ks.newKieModuleModel(); | ||
|
||
KieBaseModel baseModel = kmodule.newKieBaseModel("defaultKBase") | ||
.setDefault(true) | ||
.setEventProcessingMode(EventProcessingOption.STREAM); | ||
baseModel.newKieSessionModel("defaultKSession") | ||
.setDefault(true) | ||
.setClockType(ClockTypeOption.get("pseudo")); | ||
|
||
kfs.writeKModuleXML(kmodule.toXML()); | ||
kfs.write( ResourceFactory.newByteArrayResource(drl.getBytes()) | ||
.setTargetPath("org/drools/compiler/integrationtests/queries.drl") ); | ||
|
||
assertTrue(ks.newKieBuilder(kfs).buildAll().getResults().getMessages().isEmpty()); | ||
ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); | ||
|
||
firstEntryPoint = ksession.getEntryPoint("FirstStream"); | ||
secondEntryPoint = ksession.getEntryPoint("SecondStream"); | ||
clock = ksession.getSessionClock(); | ||
} | ||
|
||
@Test | ||
public void noResultTest() { | ||
QueryResults results = ksession.getQueryResults("EventsFromStream"); | ||
assertEquals(0, results.size()); | ||
} | ||
|
||
@Test | ||
public void withResultTest() { | ||
secondEntryPoint.insert(new TestEvent("minusOne")); | ||
clock.advanceTime(5, TimeUnit.SECONDS); | ||
|
||
firstEntryPoint.insert(new TestEvent("zero")); | ||
secondEntryPoint.insert(new TestEvent("one")); | ||
clock.advanceTime(10, TimeUnit.SECONDS); | ||
|
||
secondEntryPoint.insert(new TestEvent("two")); | ||
clock.advanceTime(5, TimeUnit.SECONDS); | ||
|
||
secondEntryPoint.insert(new TestEvent("three")); | ||
QueryResults results = ksession.getQueryResults("ZeroToNineteenSeconds"); | ||
|
||
assertEquals(3, results.size()); | ||
} | ||
|
||
@Test | ||
public void withNoResultTest() { | ||
secondEntryPoint.insert(new TestEvent("minusOne")); | ||
clock.advanceTime(5, TimeUnit.SECONDS); | ||
|
||
firstEntryPoint.insert(new TestEvent("zero")); | ||
secondEntryPoint.insert(new TestEvent("one")); | ||
clock.advanceTime(10, TimeUnit.SECONDS); | ||
|
||
secondEntryPoint.insert(new TestEvent("two")); | ||
// the following expires event "zero" and "one", causing the query to no longer match | ||
clock.advanceTime(10, TimeUnit.SECONDS); | ||
|
||
secondEntryPoint.insert(new TestEvent("three")); | ||
QueryResults results = ksession.getQueryResults("ZeroToNineteenSeconds"); | ||
|
||
assertEquals(0, results.size()); | ||
} | ||
|
||
@After | ||
public void cleanup() { | ||
|
||
if (ksession != null) { | ||
ksession.dispose(); | ||
} | ||
} | ||
|
||
public static class TestEvent { | ||
|
||
private final String name; | ||
|
||
public TestEvent(final String name) { | ||
this.name = name; | ||
} | ||
|
||
public String getName() { | ||
return this.name; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return "TestEvent[" + name + "]"; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters