@Test public void testStatelessWithCommands() throws Exception { File f1 = fileManager.write("rule1.drl", createDefaultRule("rule1")); File f2 = fileManager.write("rule2.drl", createDefaultRule("rule2")); String xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <add> "; xml += " <resource source='" + f1.getParentFile().toURI().toURL() + "' type='DRL' />"; xml += " </add> "; xml += "</change-set>"; File fxml = fileManager.write("changeset", "changeset.xml", xml); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeAgent kagent = this.createKAgent(kbase); applyChangeSet(kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL())); StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.execute(new InsertObjectCommand("hello")); assertEquals(2, list.size()); assertTrue(list.contains("rule1")); assertTrue(list.contains("rule2")); }
@Test public void testModifyFileUrl() throws Exception { fileManager.write("rule1.drl", createDefaultRule("rule1")); fileManager.write("rule2.drl", createDefaultRule("rule2")); String xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <add> "; xml += " <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />"; xml += " <resource source='http://localhost:" + this.getPort() + "/rule2.drl' type='DRL' />"; xml += " </add> "; xml += "</change-set>"; File fxml = fileManager.write("changeset.xml", xml); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeAgent kagent = createKAgent(kbase); applyChangeSet(kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL())); StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule1")); assertTrue(list.contains("rule2")); list.clear(); this.fileManager.write("rule1.drl", createDefaultRule("rule3")); scan(kagent); ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule3")); assertTrue(list.contains("rule2")); kagent.dispose(); }
@Test public void testModifyDirectory() throws IOException, InterruptedException { // adds 2 files to a dir and executes then adds one and removes one and // detects changes File f1 = fileManager.write("rule1.drl", createDefaultRule("rule1")); File f2 = fileManager.write("rule2.drl", createDefaultRule("rule2")); String xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <add> "; xml += " <resource source='" + f1.getParentFile().toURI().toURL() + "' type='DRL' />"; xml += " </add> "; xml += "</change-set>"; File fxml = fileManager.write("changeset", "changeset.xml", xml); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeAgent kagent = this.createKAgent(kbase); applyChangeSet(kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL())); StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule1")); assertTrue(list.contains("rule2")); list.clear(); fileManager.write("rule3.drl", createDefaultRule("rule3")); fileManager.deleteFile(f1); scan(kagent); ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule2")); assertTrue(list.contains("rule3")); kagent.dispose(); }
@Test public void testOldSchoolPackageUrl() throws Exception { String rule1 = this.createDefaultRule("rule1"); String rule2 = this.createDefaultRule("rule2"); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()), ResourceType.DRL); kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); } KnowledgeBuilderImpl kbi = (KnowledgeBuilderImpl) kbuilder; writePackage(kbi.getPackageBuilder().getPackage(), fileManager.newFile("pkgold.pkg")); String xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <add> "; xml += " <resource source='http://localhost:" + this.getPort() + "/pkgold.pkg' type='PKG' />"; xml += " </add> "; xml += "</change-set>"; File fxml = fileManager.write("changeset.xml", xml); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeAgent kagent = this.createKAgent(kbase); applyChangeSet(kagent, ResourceFactory.newUrlResource(fxml.toURI().toURL())); StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule1")); assertTrue(list.contains("rule2")); kagent.dispose(); }
@Test @Ignore public void testDeletePackageUrl() throws Exception { String rule1 = this.createDefaultRule("rule1", "org.drools.test1"); String rule2 = this.createDefaultRule("rule2", "org.drools.test2"); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()), ResourceType.DRL); kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); } Map<String, KnowledgePackage> map = new HashMap<String, KnowledgePackage>(); for (KnowledgePackage pkg : kbuilder.getKnowledgePackages()) { map.put(pkg.getName(), pkg); } writePackage((KnowledgePackage) map.get("org.drools.test1"), fileManager.newFile("pkg1.pkg")); writePackage((KnowledgePackage) map.get("org.drools.test2"), fileManager.newFile("pkg2.pkg")); String xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <add> "; xml += " <resource source='http://localhost:" + this.getPort() + "/pkg1.pkg' type='PKG' />"; xml += " <resource source='http://localhost:" + this.getPort() + "/pkg2.pkg' type='PKG' />"; xml += " </add> "; xml += "</change-set>"; KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeAgent kagent = this.createKAgent(kbase, false); applyChangeSet(kagent, ResourceFactory.newByteArrayResource(xml.getBytes())); StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); List<String> list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(2, list.size()); assertTrue(list.contains("rule1")); assertTrue(list.contains("rule2")); list.clear(); xml = ""; xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'"; xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'"; xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >"; xml += " <remove> "; xml += " <resource source='http://localhost:" + this.getPort() + "/pkg2.pkg' type='PKG' />"; xml += " </remove> "; xml += "</change-set>"; applyChangeSet(kagent, xml); ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession(); list = new ArrayList<String>(); ksession.setGlobal("list", list); ksession.fireAllRules(); ksession.dispose(); assertEquals(1, list.size()); assertTrue(list.contains("rule1")); kagent.dispose(); }