-
Bug
-
Resolution: Done
-
Major
-
None
-
2017 Week 26-27
-
NEW
-
NEW
DataSource aren't corrctly bound to executor during runUntilHalt causing the following test case to not complete as expected
@Test(timeout = 10000L)
public void testReactiveOnUnitCreatingDataSource() throws Exception {
String drl1 =
"package org.drools.compiler.integrationtests\n" +
"unit " + getCanonicalSimpleName( AdultUnitCreatingDataSource.class ) + "\n" +
"import " + Person.class.getCanonicalName() + "\n" +
"import " + ReactiveAdultUnit.class.getCanonicalName() + "\n" +
"rule Adult when\n" +
" Person(age >= 18, $name : name) from persons\n" +
"then\n" +
" System.out.println($name + \" is adult\");" +
" list.add($name);\n" +
"end";
KieBase kbase = new KieHelper().addContent( drl1, ResourceType.DRL ).build();
RuleUnitExecutor executor = RuleUnitExecutor.create().bind( kbase );
DebugList<String> list = new DebugList<>();
executor.bindVariable( "list", list );
AdultUnitCreatingDataSource adultUnit = new AdultUnitCreatingDataSource(list);
adultUnit.insertPerson( new Person( "Mario", 42 ) );
Semaphore ready = new Semaphore( 0, true);
list.onItemAdded = ( l -> ready.release() );
new Thread( () -> executor.runUntilHalt( adultUnit ) ).start();
ready.acquire();
assertEquals( 1, list.size() );
assertEquals( "Mario", list.get(0) );
list.clear();
list.onItemAdded = ( l -> ready.release() );
adultUnit.insertPerson( new Person( "Sofia", 4 ) );
adultUnit.insertPerson( new Person( "Marilena", 44 ) );
ready.acquire();
assertEquals( 1, list.size() );
assertEquals( "Marilena", list.get(0) );
executor.halt();
}
public static class AdultUnitCreatingDataSource implements RuleUnit {
private final DataSource<Person> persons;
private final List<String> list;
public AdultUnitCreatingDataSource( List<String> list ) {
this.persons = DataSource.create();
this.list = list;
}
public DataSource<Person> getPersons() {
return persons;
}
public List<String> getList() {
return list;
}
public void insertPerson(Person person) {
persons.insert( person );
}
}