prevent tests to run twice during build, removed redundant tests and unused objects

This commit is contained in:
benjamin 2013-05-27 18:58:20 +02:00
parent b7c5804326
commit b25b9dae2c
19 changed files with 102 additions and 344 deletions

View File

@ -148,6 +148,10 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
<excludes>
<!-- exclude the suite which is a convenience class for running all tests from IDE or using scripts -->
<exclude>AllTests.java</exclude>
</excludes>
</configuration>
</plugin>

View File

@ -1,6 +1,5 @@
package net.engio.mbassy;
import net.engio.mbassy.bus.ListenerSubscriptionTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@ -19,9 +18,8 @@ import org.junit.runners.Suite;
SyncBusTest.SyncMessageBusTest.class,
FilterTest.class,
MetadataReaderTest.class,
ListenerSubscriptionTest.class,
MethodDispatchTest.class,
DeadEventTest.class,
DeadMessageTest.class,
SynchronizedHandlerTest.class,
SubscriptionManagerTest.class
})

View File

@ -1,50 +0,0 @@
package net.engio.mbassy;
import net.engio.mbassy.bus.BusConfiguration;
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.common.WeakConcurrentSet;
import net.engio.mbassy.common.DeadMessage;
import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.listener.Handler;
import org.junit.Test;
/**
* Verify correct behaviour in case of message publications that do not have any matching subscriptions
*
* @author bennidi
* Date: 1/18/13
*/
public class DeadEventTest extends MessageBusTest{
@Test
public void testDeadEvent(){
MBassador bus = getBus(BusConfiguration.Default());
DeadEventHandler deadEventHandler = new DeadEventHandler();
bus.subscribe(deadEventHandler);
assertEquals(0, deadEventHandler.getDeadEventCount());
bus.post(new Object()).now();
assertEquals(1, deadEventHandler.getDeadEventCount());
bus.post(323).now();
assertEquals(2, deadEventHandler.getDeadEventCount());
bus.publish("fkdfdk");
assertEquals(3, deadEventHandler.getDeadEventCount());
}
public class DeadEventHandler{
private WeakConcurrentSet deadEvents = new WeakConcurrentSet();
@Handler
public void handle(DeadMessage message){
deadEvents.add(message);
}
public int getDeadEventCount(){
return deadEvents.size();
}
}
}

View File

@ -0,0 +1,71 @@
package net.engio.mbassy;
import net.engio.mbassy.bus.BusConfiguration;
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.common.*;
import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.listeners.IMessageListener;
import net.engio.mbassy.common.ListenerFactory;
import net.engio.mbassy.listeners.MessagesListener;
import org.junit.Test;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Verify correct behaviour in case of message publications that do not have any matching subscriptions
*
* @author bennidi
* Date: 1/18/13
*/
public class DeadMessageTest extends MessageBusTest{
@Test
public void testDeadMessage(){
final MBassador bus = getBus(BusConfiguration.Default());
ListenerFactory listeners = new ListenerFactory()
.create(InstancesPerListener, IMessageListener.DefaultListener.class)
.create(InstancesPerListener, IMessageListener.AsyncListener.class)
.create(InstancesPerListener, IMessageListener.DisabledListener.class)
.create(InstancesPerListener, MessagesListener.DefaultListener.class)
.create(InstancesPerListener, MessagesListener.AsyncListener.class)
.create(InstancesPerListener, MessagesListener.DisabledListener.class)
.create(InstancesPerListener, DeadMessagHandler.class)
.create(InstancesPerListener, Object.class);
ConcurrentExecutor.runConcurrent(TestUtil.subscriber(bus, listeners), ConcurrentUnits);
Runnable publishUnhandledMessage = new Runnable() {
@Override
public void run() {
for(int i=0; i < IterationsPerThread; i++){
int variation = i % 3;
switch (variation){
case 0:bus.publish(new Object());break;
case 1:bus.publish(i);break;
case 2:bus.publish(String.valueOf(i));break;
}
}
}
};
ConcurrentExecutor.runConcurrent(publishUnhandledMessage, ConcurrentUnits);
assertEquals(InstancesPerListener * IterationsPerThread * ConcurrentUnits, DeadMessagHandler.deadMessages.get());
}
public static class DeadMessagHandler {
private static final AtomicInteger deadMessages = new AtomicInteger(0);
@Handler
public void handle(DeadMessage message){
deadMessages.incrementAndGet();
}
}
}

View File

@ -9,7 +9,7 @@ import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listener.*;
import net.engio.mbassy.listeners.ListenerFactory;
import net.engio.mbassy.common.ListenerFactory;
import org.junit.Test;
import java.util.List;

View File

@ -7,7 +7,7 @@ import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.listeners.ExceptionThrowingListener;
import net.engio.mbassy.listeners.IMessageListener;
import net.engio.mbassy.listeners.ListenerFactory;
import net.engio.mbassy.common.ListenerFactory;
import net.engio.mbassy.listeners.MessagesListener;
import net.engio.mbassy.messages.MessageTypes;
import net.engio.mbassy.messages.MultipartMessage;

View File

@ -1,9 +1,6 @@
package net.engio.mbassy;
import net.engio.mbassy.common.AssertSupport;
import net.engio.mbassy.common.ConcurrentExecutor;
import net.engio.mbassy.common.SubscriptionValidator;
import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.common.*;
import net.engio.mbassy.listener.MetadataReader;
import net.engio.mbassy.listeners.*;
import net.engio.mbassy.messages.*;

View File

@ -2,6 +2,7 @@ package net.engio.mbassy;
import net.engio.mbassy.bus.*;
import net.engio.mbassy.common.ConcurrentExecutor;
import net.engio.mbassy.common.ListenerFactory;
import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.listeners.*;

View File

@ -1,108 +0,0 @@
package net.engio.mbassy.bus;
import net.engio.mbassy.common.MessageBusTest;
import net.engio.mbassy.common.TestUtil;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listeners.EventingTestBean;
import net.engio.mbassy.listeners.EventingTestBean2;
import net.engio.mbassy.listeners.EventingTestBean3;
import net.engio.mbassy.listeners.ListenerFactory;
import net.engio.mbassy.listeners.NonListeningBean;
import net.engio.mbassy.subscription.Subscription;
import org.junit.Test;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
/**
* Testing different scenarios of subscribing objects (listeners and non-listeners) to the message bus.
*
* @author bennidi
* Date: 1/9/13
*/
public class ListenerSubscriptionTest extends MessageBusTest{
// this is a single threaded test for subscribing and unsubscribing of a single listener
@Test
public void testSubscribeSimple() throws InterruptedException {
MBassador bus = getBus(new BusConfiguration());
List<Object> listeners = new LinkedList<Object>();
int listenerCount = 200000;
// subscribe a number of listeners to the bus
for (int i = 1; i <= listenerCount; i++) {
EventingTestBean listener = new EventingTestBean();
NonListeningBean nonListener = new NonListeningBean();
listeners.add(listener);
bus.subscribe(listener);
bus.subscribe(nonListener);
assertFalse(bus.unsubscribe(nonListener)); // these are not expected to be subscribed listeners
assertFalse(bus.unsubscribe(new EventingTestBean()));
}
// check the generated subscriptions for existence of all previously subscribed valid listeners
Collection<Subscription> testEventsubscriptions = bus.getSubscriptionsByMessageType(TestMessage.class);
assertEquals(1, testEventsubscriptions.size());
assertEquals(listenerCount, getNumberOfSubscribedListeners(testEventsubscriptions));
Collection<Subscription> subTestEventsubscriptions = bus.getSubscriptionsByMessageType(SubTestMessage.class);
assertEquals(3, subTestEventsubscriptions.size());
assertEquals(3 * listenerCount, getNumberOfSubscribedListeners(subTestEventsubscriptions));
// unsubscribe the listeners
for(Object listener : listeners){
assertTrue(bus.unsubscribe(listener)); // this listener is expected to exist
}
// no listener should be left
testEventsubscriptions = bus.getSubscriptionsByMessageType(TestMessage.class);
assertEquals(1, testEventsubscriptions.size());
assertEquals(0, getNumberOfSubscribedListeners(testEventsubscriptions));
subTestEventsubscriptions = bus.getSubscriptionsByMessageType(SubTestMessage.class);
assertEquals(3, subTestEventsubscriptions.size());
assertEquals(0, getNumberOfSubscribedListeners(subTestEventsubscriptions));
}
private int getNumberOfSubscribedListeners(Collection<Subscription> subscriptions) {
int listeners = 0;
for (Subscription sub : subscriptions) {
listeners += sub.size();
}
return listeners;
}
@Test
public void testConcurrentSubscription() throws Exception {
MBassador bus = getBus(new BusConfiguration());
ListenerFactory listenerFactory = new ListenerFactory()
.create(10000, EventingTestBean.class)
.create(10000, EventingTestBean2.class)
.create(10000, EventingTestBean3.class)
.create(10000, Object.class)
.create(10000, NonListeningBean.class);
List<Object> listeners = listenerFactory.getAll();
// this will subscribe the listeners concurrently to the bus
TestUtil.setup(bus, listeners, 10);
// check the generated subscriptions for existence of all previously subscribed valid listeners
Collection<Subscription> testEventsubscriptions = bus.getSubscriptionsByMessageType(TestMessage.class);
assertEquals(3, testEventsubscriptions.size());
assertEquals(30000, getNumberOfSubscribedListeners(testEventsubscriptions));
Collection<Subscription> subTestEventsubscriptions = bus.getSubscriptionsByMessageType(SubTestMessage.class);
assertEquals(10, subTestEventsubscriptions.size());
assertEquals(100000, getNumberOfSubscribedListeners(subTestEventsubscriptions));
}
}

View File

@ -1,4 +1,4 @@
package net.engio.mbassy.listeners;
package net.engio.mbassy.common;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;

View File

@ -24,6 +24,7 @@ public abstract class MessageBusTest<Bus extends ISyncMessageBus> extends Assert
protected static final int processingTimeInMS = 6000;
protected static final int InstancesPerListener = 5000;
protected static final int ConcurrentUnits = 10;
protected static final int IterationsPerThread = 100;
protected static final IPublicationErrorHandler TestFailingHandler = new IPublicationErrorHandler() {
@Override

View File

@ -1,6 +1,5 @@
package net.engio.mbassy.common;
import net.engio.mbassy.listeners.ListenerFactory;
import net.engio.mbassy.subscription.Subscription;
import net.engio.mbassy.subscription.SubscriptionManager;

View File

@ -1,7 +1,6 @@
package net.engio.mbassy.common;
import net.engio.mbassy.bus.ISyncMessageBus;
import net.engio.mbassy.listeners.ListenerFactory;
import net.engio.mbassy.subscription.SubscriptionManager;
import java.util.Iterator;

View File

@ -1,51 +0,0 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.dispatch.HandlerInvocation;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listener.*;
import net.engio.mbassy.subscription.SubscriptionContext;
/**
* Basic bean that defines some event handlers to be used for different unit testting scenarios
*
* @author bennidi
* Date: 11/22/12
*/
public class EventingTestBean {
// every event of type TestEvent or any subtype will be delivered
// to this listener
@Handler
public void handleTestEvent(TestMessage message) {
message.counter.incrementAndGet();
}
// this handler will be invoked asynchronously
@Handler(priority = 0, delivery = Invoke.Asynchronously, invocation = HandleSubTestEventInvocation.class)
public void handleSubTestEvent(SubTestMessage message) {
message.counter.incrementAndGet();
}
// this handler will receive events of type SubTestEvent
// or any subtabe and that passes the given filter
@Handler(
priority = 10,
delivery = Invoke.Synchronously,
filters = {@Filter(Filters.RejectAll.class), @Filter(Filters.AllowAll.class)})
public void handleFiltered(SubTestMessage message) {
message.counter.incrementAndGet();
}
public static class HandleSubTestEventInvocation extends HandlerInvocation<EventingTestBean, SubTestMessage> {
public HandleSubTestEventInvocation(SubscriptionContext context) {
super(context);
}
@Override
public void invoke(EventingTestBean listener, SubTestMessage message) {
listener.handleSubTestEvent(message);
}
}
}

View File

@ -1,22 +0,0 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.listener.Invoke;
import net.engio.mbassy.listener.Listener;
import net.engio.mbassy.listener.References;
/**
* @author bennidi
* Date: 11/22/12
*/
@Listener(references = References.Strong)
public class EventingTestBean2 extends EventingTestBean{
// redefine the configuration for this handler
@Handler(delivery = Invoke.Synchronously)
public void handleSubTestEvent(SubTestMessage message) {
super.handleSubTestEvent(message);
}
}

View File

@ -1,23 +0,0 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.listener.Invoke;
import net.engio.mbassy.listener.Listener;
import net.engio.mbassy.listener.References;
/**
* @author bennidi
* Date: 11/22/12
*/
@Listener(references = References.Strong)
public class EventingTestBean3 extends EventingTestBean2{
// this handler will be invoked asynchronously
@Handler(priority = 0, delivery = Invoke.Synchronously)
public void handleSubTestEventAgain(SubTestMessage message) {
message.counter.incrementAndGet();
}
}

View File

@ -1,44 +0,0 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.messages.TestMessage2;
import net.engio.mbassy.listener.*;
import net.engio.mbassy.listener.Invoke;
import net.engio.mbassy.subscription.MessageEnvelope;
/**
* Todo: Add javadoc
*
* @author bennidi
* Date: 12/12/12
*/
public class MultiEventHandler {
@Handler(delivery = Invoke.Synchronously)
@Enveloped(messages = {TestMessage.class, TestMessage2.class})
public void handleEvents(MessageEnvelope envelope) {
if(TestMessage.class.isAssignableFrom(envelope.getMessage().getClass())){
TestMessage message = envelope.getMessage();
message.counter.incrementAndGet();
}
if(envelope.getMessage().getClass().equals(TestMessage2.class)){
TestMessage2 message = envelope.getMessage();
message.counter.incrementAndGet();
}
}
@Handler(delivery = Invoke.Synchronously, filters = @Filter(Filters.RejectSubtypes.class))
@Enveloped(messages = {TestMessage.class, TestMessage2.class})
public void handleSuperTypeEvents(MessageEnvelope envelope) {
if(TestMessage.class.isAssignableFrom(envelope.getMessage().getClass())){
TestMessage message = envelope.getMessage();
message.counter.incrementAndGet();
}
if(envelope.getMessage().getClass().equals(TestMessage2.class)){
TestMessage2 message = envelope.getMessage();
message.counter.incrementAndGet();
}
}
}

View File

@ -1,34 +0,0 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.messages.SubTestMessage;
import net.engio.mbassy.messages.TestMessage;
import net.engio.mbassy.listener.Handler;
/**
* This bean overrides all the handlers defined in its superclass. Since it does not specify any annotations
* it should not be considered a message listener
*
* @author bennidi
* Date: 11/22/12
*/
public class NonListeningBean extends EventingTestBean{
@Override
@Handler(enabled = false)
public void handleTestEvent(TestMessage message) {
message.counter.incrementAndGet(); // should never be called
}
@Override
@Handler(enabled = false)
public void handleSubTestEvent(SubTestMessage message) {
message.counter.incrementAndGet(); // should never be called
}
@Override
@Handler(enabled = false)
public void handleFiltered(SubTestMessage message) {
message.counter.incrementAndGet(); // should never be called
}
}

View File

@ -0,0 +1,20 @@
package net.engio.mbassy.listeners;
import net.engio.mbassy.common.DeadMessage;
import net.engio.mbassy.listener.Handler;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class ObjectListener {
private List handledMessages = Collections.synchronizedList(new LinkedList());
@Handler
public void handle(Object message){
handledMessages.add(message);
}
}