/*
* 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.jee;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Test;
import org.junit.runner.RunWith;
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;
import static org.junit.Assert.*;
@RunWith(Arquillian.class)
public class NetworkLoaderTest {
@Inject
org.overlord.rtgov.epn.EPNManager _epnManager;
@Deployment
public static WebArchive createDeployment() {
String rtgovversion=System.getProperty("rtgov.version");
String jacksonversion=System.getProperty("jackson.version");
return ShrinkWrap.create(WebArchive.class)
.addClass(org.overlord.rtgov.tests.epn.Child.class)
.addClass(org.overlord.rtgov.tests.epn.ChildPredicate.class)
.addClass(org.overlord.rtgov.tests.epn.NetworkLoader.class)
.addClass(org.overlord.rtgov.tests.epn.Obj1.class)
.addClass(org.overlord.rtgov.tests.epn.Obj2.class)
.addClass(org.overlord.rtgov.tests.epn.Root.class)
.addAsResource("networks/TestNetwork.json")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsManifestResource("rtgov-epn-hornetq-jms.xml")
.addAsLibraries(
Maven.resolver().resolve("org.overlord.rtgov.event-processor-network:epn-core:"+rtgovversion).withoutTransitivity().asSingleFile(),
Maven.resolver().resolve("org.overlord.rtgov.event-processor:ep-core:"+rtgovversion).withoutTransitivity().asSingleFile(),
Maven.resolver().resolve("org.overlord.rtgov.event-processor-network:epn-container-jee:"+rtgovversion).withoutTransitivity().asSingleFile(),
Maven.resolver().resolve("org.overlord.rtgov.common:rtgov-common:"+rtgovversion).withoutTransitivity().asSingleFile(),
Maven.resolver().resolve("com.fasterxml.jackson.core:jackson-core:"+jacksonversion).withoutTransitivity().asSingleFile(),
Maven.resolver().resolve("com.fasterxml.jackson.core:jackson-databind:"+jacksonversion).withoutTransitivity().asSingleFile()
);
}
@Test
public void checkEPNManagerAvailable() {
if (_epnManager == null) {
fail("EPN Manager has not been set");
}
}
@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);
try {
_epnManager.register(net);
} catch(Exception e) {
fail("Failed to register network: "+e);
}
try {
_epnManager.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());
}
try {
_epnManager.unregister(NetworkLoader.TEST_NETWORK, null);
} catch(Exception e) {
fail("Failed to unregister network: "+e);
}
}
@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);
try {
_epnManager.register(net);
} catch(Exception e) {
fail("Failed to register network: "+e);
}
try {
_epnManager.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());
}
try {
_epnManager.unregister(NetworkLoader.TEST_NETWORK, null);
} catch(Exception e) {
fail("Failed to unregister network: "+e);
}
}
@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);
try {
_epnManager.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);
if (childA.events().size() != 0) {
fail("Child A does not have 0 event: "+childA.events().size()+" "+childA.events());
}
if (childB.events().size() != 0) {
fail("Child B does not have 0 events: "+childB.events().size()+" "+childB.events());
}
try {
_epnManager.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()+" "+childA.events());
}
if (childB.events().size() != 2) {
fail("Child B does not have 2 events: "+childB.events().size()+" "+childB.events());
}
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");
}
try {
_epnManager.unregister(NetworkLoader.TEST_NETWORK, null);
} catch(Exception e) {
fail("Failed to unregister network: "+e);
}
}
}