KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
KieSession ksession = createKnowledgeSession(kbase);
ksession.setGlobal("totalHolder", new TotalHolder());
Father abraham = new Father("abraham", null, 100);
Father homer = new Father("homer", null, 20);
Father bart = new Father("bart", null, 3);
org.kie.api.runtime.rule.FactHandle abrahamHandle = ksession.insert(abraham);
org.kie.api.runtime.rule.FactHandle bartHandle = ksession.insert(bart);
ksession.fireAllRules();
assertEquals(0, ((TotalHolder) ksession.getGlobal("totalHolder")).getTotal());
bart.setFather(abraham);
ksession.update(bartHandle, bart);
ksession.fireAllRules();
assertEquals(100, ((TotalHolder) ksession.getGlobal("totalHolder")).getTotal());
bart.setFather(null);
ksession.update(bartHandle, bart);
ksession.fireAllRules();
assertEquals(0, ((TotalHolder) ksession.getGlobal("totalHolder")).getTotal());
bart.setFather(abraham);
ksession.update(bartHandle, bart);
ksession.fireAllRules();
assertEquals(100, ((TotalHolder) ksession.getGlobal("totalHolder")).getTotal());
org.kie.api.runtime.rule.FactHandle homerHandle = ksession.insert(homer);
homer.setFather(abraham);
ksession.update(homerHandle, homer);
bart.setFather(homer);
ksession.update(bartHandle, bart);
ksession.fireAllRules();
assertEquals(120, ((TotalHolder) ksession.getGlobal("totalHolder")).getTotal());
}