use of net.dempsy.lifecycle.annotation.Activation in project Dempsy by Dempsy.
the class TestContainer method createAndGet.
private TestProcessor createAndGet(final String foo) throws Exception {
cache = new HashMap<>();
final TestAdaptor adaptor = context.getBean(TestAdaptor.class);
assertNotNull(adaptor.dispatcher);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage(foo));
assertTrue(poll(o -> container.getProcessorCount() > 0));
Thread.sleep(100);
assertEquals("did not create MP", 1, container.getProcessorCount());
assertTrue(poll(cache, c -> c.get(foo) != null));
final TestProcessor mp = cache.get(foo);
assertNotNull("MP not associated with expected key", mp);
assertEquals("activation count, 1st message", 1, mp.activationCount);
assertEquals("invocation count, 1st message", 1, mp.invocationCount);
return mp;
}
use of net.dempsy.lifecycle.annotation.Activation in project Dempsy by Dempsy.
the class TestContainer method testMessageDispatch.
@Test
public void testMessageDispatch() throws Exception {
cache = new ConcurrentHashMap<>();
final TestAdaptor adaptor = context.getBean(TestAdaptor.class);
assertNotNull(adaptor.dispatcher);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage("foo"));
assertTrue(poll(o -> container.getProcessorCount() > 0));
Thread.sleep(100);
assertEquals("did not create MP", 1, container.getProcessorCount());
assertTrue(poll(cache, c -> c.get("foo") != null));
final TestProcessor mp = cache.get("foo");
assertNotNull("MP not associated with expected key", mp);
assertEquals("activation count, 1st message", 1, mp.activationCount);
assertEquals("invocation count, 1st message", 1, mp.invocationCount);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage("foo"));
assertTrue(poll(mp, o -> o.invocationCount > 1));
Thread.sleep(100);
assertEquals("activation count, 2nd message", 1, mp.activationCount);
assertEquals("invocation count, 2nd message", 2, mp.invocationCount);
}
use of net.dempsy.lifecycle.annotation.Activation in project Dempsy by Dempsy.
the class TestContainer method testEvictableWithBusyMp.
@Test
public void testEvictableWithBusyMp() throws Throwable {
final TestProcessor mp = createAndGet("foo");
// now we're going to cause the processing to be held up.
mp.latch = new CountDownLatch(1);
// allow eviction
mp.evict.set(true);
// sending it a message will now cause it to hang up while processing
final TestAdaptor adaptor = context.getBean(TestAdaptor.class);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage("foo"));
final TestProcessor prototype = context.getBean(TestProcessor.class);
// keep track of the cloneCount for later checking
final int tmpCloneCount = prototype.cloneCount.intValue();
// invocation count should go to 2
assertTrue(poll(mp, o -> o.invocationCount == 2));
// now kick off the evict in a separate thread since we expect it to hang
// until the mp becomes unstuck.
// this will allow us to see the evict pass complete
final AtomicBoolean evictIsComplete = new AtomicBoolean(false);
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
container.evict();
evictIsComplete.set(true);
}
});
thread.start();
// now check to make sure eviction doesn't complete.
// just a little to give any mistakes a change to work themselves through
Thread.sleep(100);
// make sure eviction didn't finish
assertFalse(evictIsComplete.get());
// this lets it go
mp.latch.countDown();
// wait until the eviction completes
assertTrue(poll(evictIsComplete, o -> o.get()));
Thread.sleep(100);
assertEquals("activation count, 2nd message", 1, mp.activationCount);
assertEquals("invocation count, 2nd message", 2, mp.invocationCount);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage("foo"));
assertTrue(poll(o -> prototype.cloneCount.intValue() > tmpCloneCount));
Thread.sleep(1000);
assertEquals("Clone count, 2nd message", tmpCloneCount + 1, prototype.cloneCount.intValue());
}
use of net.dempsy.lifecycle.annotation.Activation in project Dempsy by Dempsy.
the class TestContainer method testFeedbackLoop.
@Test
public void testFeedbackLoop() throws Exception {
cache = new ConcurrentHashMap<>();
final TestAdaptor adaptor = context.getBean(TestAdaptor.class);
assertNotNull(adaptor.dispatcher);
adaptor.dispatcher.dispatchAnnotated(new MyMessage("foo"));
assertTrue(poll(o -> container.getProcessorCount() > 0));
Thread.sleep(100);
assertEquals("did not create MP", 1, container.getProcessorCount());
assertTrue(poll(cache, c -> c.get("foo") != null));
final TestProcessor mp = cache.get("foo");
assertNotNull("MP not associated with expected key", mp);
assertTrue(poll(mp, o -> o.invocationCount > 1));
assertEquals("activation count, 1st message", 1, mp.activationCount);
assertEquals("invocation count, 1st message", 2, mp.invocationCount);
adaptor.dispatcher.dispatchAnnotated(new ContainerTestMessage("foo"));
assertTrue(poll(mp, o -> o.invocationCount > 2));
Thread.sleep(100);
assertEquals("activation count, 2nd message", 1, mp.activationCount);
assertEquals("invocation count, 2nd message", 3, mp.invocationCount);
}
Aggregations