/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.wordpress.salaboy;
import org.junit.Ignore;
import org.drools.runtime.rule.FactHandle;
import org.drools.SystemEventListenerFactory;
import org.drools.grid.conf.GridPeerServiceConfiguration;
import org.drools.grid.conf.impl.GridPeerConfiguration;
import org.drools.grid.impl.MultiplexSocketServerImpl;
import org.drools.grid.io.impl.MultiplexSocketServiceCongifuration;
import org.drools.grid.remote.mina.MinaAcceptorFactoryService;
import org.drools.grid.service.directory.impl.CoreServicesLookupConfiguration;
import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
import org.drools.grid.timer.impl.CoreServicesSchedulerConfiguration;
import java.util.HashMap;
import org.drools.grid.ConnectionFactoryService;
import org.drools.grid.GridConnection;
import org.drools.grid.SocketService;
import org.drools.grid.impl.GridImpl;
import org.drools.grid.service.directory.WhitePages;
import junit.framework.Assert;
import org.drools.common.DefaultFactHandle;
import java.util.Map;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactoryService;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactoryService;
import org.drools.builder.ResourceType;
import org.drools.grid.Grid;
import org.drools.grid.GridNode;
import org.drools.grid.GridServiceDescription;
import org.drools.io.impl.ByteArrayResource;
import org.drools.runtime.StatefulKnowledgeSession;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author salaboy
*/
public class DroolsGridServiceTest {
private Map<String, GridServiceDescription> coreServicesMap;
protected Grid grid1;
protected GridNode remoteN1;
public DroolsGridServiceTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
this.coreServicesMap = new HashMap();
createRemoteNode();
}
@After
public void tearDown() {
remoteN1.dispose();
grid1.get(SocketService.class).close();
}
@Ignore
public void helloIgnore() {
StatefulKnowledgeSession ksession = createSession();
ksession.setGlobal("myGlobalObj", new MyObject("myglobalObj"));
FactHandle handle = ksession.insert(new MyObject("obj1"));
Assert.assertNotNull(handle);
Assert.assertEquals(true, ((DefaultFactHandle)handle).isDisconnected());
int fired = ksession.fireAllRules();
Assert.assertEquals(fired, 1);
}
@Test
public void hello(){}
protected StatefulKnowledgeSession createSession(){
KnowledgeBuilder kbuilder = remoteN1.get( KnowledgeBuilderFactoryService.class ).newKnowledgeBuilder();
assertNotNull( kbuilder );
String rule = "package test\n"
+ "import com.wordpress.salaboy.MyObject;\n"
+ "global MyObject myGlobalObj;\n"
+ "rule \"test\""
+ " when"
+ " $o: MyObject()"
+ " then"
+ " System.out.println(\"My Global Object -> \"+myGlobalObj.getName());"
+ " System.out.println(\"Rule Fired! ->\"+$o.getName());"
+ " end";
kbuilder.add( new ByteArrayResource( rule.getBytes() ),
ResourceType.DRL );
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if ( errors != null && errors.size() > 0 ) {
for ( KnowledgeBuilderError error : errors ) {
System.out.println( "Error: " + error.getMessage() );
}
fail("KnowledgeBase did not build");
}
KnowledgeBase kbase = remoteN1.get( KnowledgeBaseFactoryService.class ).newKnowledgeBase();
assertNotNull( kbase );
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
return session;
}
private void createRemoteNode(){
grid1 = new GridImpl( new HashMap<String, Object>() );
configureGrid1( grid1,
8000,
null );
Grid grid2 = new GridImpl( new HashMap<String, Object>() );
configureGrid1( grid2,
-1,
grid1.get( WhitePages.class ) );
GridNode n1 = grid1.createGridNode( "n1" );
grid1.get( SocketService.class ).addService( "n1", 8000, n1 );
GridServiceDescription<GridNode> n1Gsd = grid2.get( WhitePages.class ).lookup( "n1" );
GridConnection<GridNode> conn = grid2.get( ConnectionFactoryService.class ).createConnection( n1Gsd );
remoteN1 = conn.connect();
}
private void configureGrid1(Grid grid,
int port,
WhitePages wp) {
//Local Grid Configuration, for our client
GridPeerConfiguration conf = new GridPeerConfiguration();
//Configuring the Core Services White Pages
GridPeerServiceConfiguration coreSeviceWPConf = new CoreServicesLookupConfiguration( coreServicesMap );
conf.addConfiguration( coreSeviceWPConf );
//Configuring the Core Services Scheduler
GridPeerServiceConfiguration coreSeviceSchedulerConf = new CoreServicesSchedulerConfiguration();
conf.addConfiguration( coreSeviceSchedulerConf );
//Configuring the WhitePages
WhitePagesLocalConfiguration wplConf = new WhitePagesLocalConfiguration();
wplConf.setWhitePages( wp );
conf.addConfiguration( wplConf );
if ( port >= 0 ) {
//Configuring the SocketService
MultiplexSocketServiceCongifuration socketConf = new MultiplexSocketServiceCongifuration( new MultiplexSocketServerImpl( "127.0.0.1",
new MinaAcceptorFactoryService(),
SystemEventListenerFactory.getSystemEventListener(),
grid) );
socketConf.addService( WhitePages.class.getName(), wplConf.getWhitePages(), port );
conf.addConfiguration( socketConf );
}
conf.configure( grid );
}
}