Search in sources :

Example 86 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class DateComparisonTest method testDateComparisonAfter.

@Test
public void testDateComparisonAfter() throws Exception {
    String str = "";
    str += "package org.drools.compiler;\n";
    str += "global java.util.List results;\n";
    str += "rule \"test date greater than\"\n";
    str += "     when\n";
    str += "         $c : Cheese(type == \"Yesterday\")\n";
    str += "         Cheese(type == \"Tomorrow\", $c.usedBy before usedBy)\n";
    str += "     then\n";
    str += "         results.add( \"test date greater than\" );\n";
    str += "end\n";
    str += "rule \"test date less than\"\n";
    str += "    when\n";
    str += "        $c : Cheese(type == \"Tomorrow\")\n";
    str += "        Cheese(type == \"Yesterday\", $c.usedBy after usedBy);\n";
    str += "    then\n";
    str += "        results.add( \"test date less than\" );\n";
    str += "end\n";
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession();
    List<String> results = new ArrayList<String>();
    ksession.setGlobal("results", results);
    // go !
    Cheese yesterday = new Cheese("Yesterday");
    yesterday.setUsedBy(yesterday());
    Cheese tomorrow = new Cheese("Tomorrow");
    tomorrow.setUsedBy(tomorrow());
    ksession.insert(yesterday);
    ksession.insert(tomorrow);
    ksession.fireAllRules();
    assertEquals(2, results.size());
    assertTrue(results.contains("test date greater than"));
    assertTrue(results.contains("test date less than"));
}
Also used : ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) Test(org.junit.Test)

Example 87 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class DslTest method checkDSLExpanderTest.

private void checkDSLExpanderTest(KnowledgeBuilder kbuilder) throws IOException, ClassNotFoundException {
    assertFalse(kbuilder.hasErrors());
    final String err = kbuilder.getErrors().toString();
    assertEquals("", err);
    assertEquals(0, kbuilder.getErrors().size());
    // the compiled package
    final Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages();
    assertEquals(2, pkgs.size());
    InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addPackages(pkgs);
    kbase = SerializationHelper.serializeObject(kbase);
    KieSession session = createKnowledgeSession(kbase);
    session.insert(new Person("Bob", "http://foo.bar"));
    session.insert(new Cheese("stilton", 42));
    final List messages = new ArrayList();
    session.setGlobal("messages", messages);
    session.fireAllRules();
    assertEquals(1, messages.size());
}
Also used : KiePackage(org.kie.api.definition.KiePackage) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) ArrayList(java.util.ArrayList) List(java.util.List) Person(org.drools.compiler.Person) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase)

Example 88 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class EnableAuditLogCommandTest method testEnableAuditLogCommand.

@Test
public void testEnableAuditLogCommand() throws Exception {
    String str = "";
    str += "package org.drools.compiler.integrationtests \n";
    str += "import " + Cheese.class.getCanonicalName() + " \n";
    str += "rule StringRule \n";
    str += " when \n";
    str += " $c : Cheese() \n";
    str += " then \n";
    str += " System.out.println($c); \n";
    str += "end \n";
    KieSession kSession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession();
    List<Command> commands = new ArrayList<Command>();
    commands.add(CommandFactory.newEnableAuditLog(auditFileDir, auditFileName));
    commands.add(CommandFactory.newInsert(new Cheese()));
    commands.add(CommandFactory.newFireAllRules());
    kSession.execute(CommandFactory.newBatchExecution(commands));
    kSession.dispose();
    File file = new File(auditFileDir + File.separator + auditFileName + ".log");
    assertTrue(file.exists());
}
Also used : Command(org.kie.api.command.Command) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) Cheese(org.drools.compiler.Cheese) KieSession(org.kie.api.runtime.KieSession) File(java.io.File) Test(org.junit.Test)

Example 89 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class DynamicRulesTest method testJBRULES_2206.

@Test(timeout = 10000)
public void testJBRULES_2206() {
    KieBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
    ((RuleBaseConfiguration) config).setRuleBaseUpdateHandler(null);
    InternalKnowledgeBase kbase = (InternalKnowledgeBase) getKnowledgeBase(config);
    KieSession session = createKnowledgeSession(kbase);
    AgendaEventListener ael = mock(AgendaEventListener.class);
    session.addEventListener(ael);
    for (int i = 0; i < 5; i++) {
        session.insert(new Cheese());
    }
    kbase.addPackages(loadKnowledgePackages("test_JBRULES_2206_1.drl"));
    ((InternalAgenda) session.getAgenda()).evaluateEagerList();
    // two matching rules were added, so 2 activations should have been created
    verify(ael, times(2)).matchCreated(any(MatchCreatedEvent.class));
    int fireCount = session.fireAllRules();
    // both should have fired
    assertEquals(2, fireCount);
    kbase.addPackages(loadKnowledgePackages("test_JBRULES_2206_2.drl"));
    ((InternalAgenda) session.getAgenda()).evaluateEagerList();
    // one rule was overridden and should activate
    verify(ael, times(3)).matchCreated(any(MatchCreatedEvent.class));
    fireCount = session.fireAllRules();
    // that rule should fire again
    assertEquals(1, fireCount);
    session.dispose();
}
Also used : KieBaseConfiguration(org.kie.api.KieBaseConfiguration) RuleBaseConfiguration(org.drools.core.RuleBaseConfiguration) InternalAgenda(org.drools.core.common.InternalAgenda) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) EntryPoint(org.kie.api.runtime.rule.EntryPoint) Test(org.junit.Test)

Example 90 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class DynamicRulesTest method testDynamicRuleAdditions.

@Test(timeout = 10000)
public void testDynamicRuleAdditions() throws Exception {
    InternalKnowledgeBase kbase = (InternalKnowledgeBase) SerializationHelper.serializeObject(loadKnowledgeBase("test_Dynamic1.drl"));
    KieSession workingMemory = createKnowledgeSession(kbase);
    workingMemory.setGlobal("total", new Integer(0));
    final List<?> list = new ArrayList<Object>();
    workingMemory.setGlobal("list", list);
    // Adding person in advance. There is no Person() object
    // type node in memory yet, but the rule engine is supposed
    // to handle that correctly
    final PersonInterface bob = new Person("bob", "stilton");
    bob.setStatus("Not evaluated");
    workingMemory.insert(bob);
    final Cheese stilton = new Cheese("stilton", 5);
    workingMemory.insert(stilton);
    final Cheese cheddar = new Cheese("cheddar", 5);
    workingMemory.insert(cheddar);
    workingMemory.fireAllRules();
    assertEquals(1, list.size());
    assertEquals("stilton", list.get(0));
    Collection<KiePackage> kpkgs = SerializationHelper.serializeObject(loadKnowledgePackages("test_Dynamic2.drl"));
    kbase.addPackages(kpkgs);
    workingMemory.fireAllRules();
    assertEquals(5, list.size());
    assertEquals("stilton", list.get(0));
    assertTrue("cheddar".equals(list.get(1)) || "cheddar".equals(list.get(2)));
    assertTrue("stilton".equals(list.get(1)) || "stilton".equals(list.get(2)));
    list.clear();
    kpkgs = SerializationHelper.serializeObject(loadKnowledgePackages("test_Dynamic3.drl"));
    kbase.addPackages(kpkgs);
    // Package 3 has a rule working on Person instances.
    // As we added person instance in advance, rule should fire now
    workingMemory.fireAllRules();
    assertEquals("Rule from package 3 should have been fired", "match Person ok", bob.getStatus());
    assertEquals(1, list.size());
    assertEquals(bob, list.get(0));
    kpkgs = SerializationHelper.serializeObject(loadKnowledgePackages("test_Dynamic4.drl"));
    kbase.addPackages(kpkgs);
    workingMemory.fireAllRules();
    kbase = SerializationHelper.serializeObject(kbase);
    assertEquals("Rule from package 4 should have been fired", "Who likes Stilton ok", bob.getStatus());
    assertEquals(2, list.size());
    assertEquals(bob, list.get(1));
}
Also used : PersonInterface(org.drools.compiler.PersonInterface) KiePackage(org.kie.api.definition.KiePackage) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) Person(org.drools.compiler.Person) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Test(org.junit.Test)

Aggregations

Cheese (org.drools.compiler.Cheese)222 Test (org.junit.Test)204 KieSession (org.kie.api.runtime.KieSession)195 ArrayList (java.util.ArrayList)152 KieBase (org.kie.api.KieBase)138 List (java.util.List)100 Person (org.drools.compiler.Person)92 FactHandle (org.kie.api.runtime.rule.FactHandle)53 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)36 KiePackage (org.kie.api.definition.KiePackage)22 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)21 InternalFactHandle (org.drools.core.common.InternalFactHandle)20 Cheesery (org.drools.compiler.Cheesery)14 IteratorToList (org.drools.compiler.integrationtests.IteratorToList)14 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)13 HashMap (java.util.HashMap)10 Command (org.kie.api.command.Command)8 ExecutionResults (org.kie.api.runtime.ExecutionResults)8 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)7 PackageDescr (org.drools.compiler.lang.descr.PackageDescr)7