/*
* 2012-3 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.overlord.rtgov.tests.epn.jbossas.embedded;
import static org.junit.Assert.*;
import org.junit.Test;
import org.overlord.rtgov.epn.EPNManager;
import org.overlord.rtgov.epn.Network;
import org.overlord.rtgov.epn.Node;
import org.overlord.rtgov.tests.epn.Child;
import org.overlord.rtgov.tests.epn.NetworkLoader;
import org.overlord.rtgov.tests.epn.Obj1;
import org.overlord.rtgov.tests.epn.Obj2;
public class NetworkLoaderTest {
@Test
public void testLoadNetwork() {
NetworkLoader tl=new NetworkLoader();
Network net=tl.loadNetwork();
if (net == null) {
fail("Failed to load network");
}
}
protected EPNManager getEPNManager() {
EPNManager ret=null;
try {
Class<?> cls=
NetworkLoaderTest.class.getClassLoader().loadClass("org.overlord.rtgov.epn.embedded.EmbeddedEPNManager");
ret = (EPNManager)cls.newInstance();
} catch(Exception e) {
fail("Failed to get EPNManager: "+e);
}
return(ret);
}
@Test
public void testTransformation() {
NetworkLoader tl=new NetworkLoader();
Network net=tl.loadNetwork();
java.util.List<java.io.Serializable> events=new java.util.Vector<java.io.Serializable>();
Obj1 o1=new Obj1(5);
events.add(o1);
EPNManager mgr=getEPNManager();
try {
mgr.register(net);
} catch(Exception e) {
fail("Failed to register network: "+e);
}
try {
mgr.publish(NetworkLoader.TEST_SUBJECT, events);
Thread.sleep(1000);
} catch(Exception e) {
fail("Failed to process events: "+e);
}
// Check that event was transformed into Obj2 at ChildA (due to predicate)
Node childAnode=net.getNode(NetworkLoader.CHILD_A);
if (childAnode == null) {
fail("Failed to get child A");
}
Child childA=(Child)childAnode.getEventProcessor();
if (childA.events().size() != 1) {
fail("Child A does not have 1 event: "+childA.events().size());
}
if (!(childA.events().get(0) instanceof Obj2)) {
fail("Child A event is not correct type");
}
if (((Obj2)childA.events().get(0)).getValue() != 5) {
fail("Child A event has wrong value: "+((Obj2)childA.events().get(0)).getValue());
}
}
@Test
public void testPredicates() {
NetworkLoader tl=new NetworkLoader();
Network net=tl.loadNetwork();
java.util.List<java.io.Serializable> events=new java.util.Vector<java.io.Serializable>();
Obj1 o1=new Obj1(15);
Obj1 o2=new Obj1(5);
Obj1 o3=new Obj1(12);
events.add(o1);
events.add(o2);
events.add(o3);
EPNManager mgr=getEPNManager();
try {
mgr.register(net);
} catch(Exception e) {
fail("Failed to register network: "+e);
}
try {
mgr.publish(NetworkLoader.TEST_SUBJECT, events);
Thread.sleep(1000);
} catch(Exception e) {
fail("Failed to process events: "+e);
}
Node childAnode=net.getNode(NetworkLoader.CHILD_A);
Node childBnode=net.getNode(NetworkLoader.CHILD_B);
if (childAnode == null) {
fail("Failed to get child A");
}
if (childBnode == null) {
fail("Failed to get child B");
}
Child childA=(Child)childAnode.getEventProcessor();
Child childB=(Child)childBnode.getEventProcessor();
if (childA.events().size() != 1) {
fail("Child A does not have 1 event: "+childA.events().size());
}
if (childB.events().size() != 2) {
fail("Child B does not have 2 events: "+childB.events().size());
}
if (childA.retries().size() != 0) {
fail("Child A should have no retries: "+childA.retries().size());
}
if (childB.retries().size() != 0) {
fail("Child B should have no retries: "+childB.retries().size());
}
}
@Test
public void testRetries() {
NetworkLoader tl=new NetworkLoader();
Network net=tl.loadNetwork();
java.util.List<java.io.Serializable> events=new java.util.Vector<java.io.Serializable>();
Obj1 o1=new Obj1(15);
Obj1 o2=new Obj1(5);
Obj1 o3=new Obj1(12);
events.add(o1);
events.add(o2);
events.add(o3);
EPNManager mgr=getEPNManager();
try {
mgr.register(net);
} catch(Exception e) {
fail("Failed to register network: "+e);
}
Node childAnode=net.getNode(NetworkLoader.CHILD_A);
Node childBnode=net.getNode(NetworkLoader.CHILD_B);
if (childAnode == null) {
fail("Failed to get child A");
}
if (childBnode == null) {
fail("Failed to get child B");
}
Child childA=(Child)childAnode.getEventProcessor();
Child childB=(Child)childBnode.getEventProcessor();
Obj2 rej3=new Obj2(o3.getValue());
childB.reject(rej3);
try {
mgr.publish(NetworkLoader.TEST_SUBJECT, events);
Thread.sleep(1000);
} catch(Exception e) {
fail("Failed to process events: "+e);
}
if (childA.events().size() != 1) {
fail("Child A does not have 1 event: "+childA.events().size());
}
if (childB.events().size() != 2) {
fail("Child B does not have 2 events: "+childB.events().size());
}
if (childA.retries().size() != 0) {
fail("Child A should have no retries: "+childA.retries().size());
}
if (childB.retries().size() != 1) {
fail("Child B should have 1 retries: "+childB.retries().size());
}
if (!childB.retries().contains(rej3)) {
fail("Child B retry event is wrong");
}
}
}