@Test(expected = MessageDeliveryException.class) public void removeConsumerLastTargetCausesDeliveryException() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target); try { dispatcher.dispatch(new GenericMessage<>("test1")); } catch (Exception e) { // ignore } assertEquals(1, counter.get()); dispatcher.removeHandler(target); dispatcher.dispatch(new GenericMessage<>("test2")); }
UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target1 = new CountingTestEndpoint(counter, false); MessageHandler target2 = new CountingTestEndpoint(counter, false); MessageHandler target3 = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target1); dispatcher.addHandler(target2);
@Test public void removeConsumerBeforeSend() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target1 = new CountingTestEndpoint(counter, false); MessageHandler target2 = new CountingTestEndpoint(counter, false); MessageHandler target3 = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.addHandler(target3); dispatcher.removeHandler(target2); try { dispatcher.dispatch(new GenericMessage<>("test")); } catch (Exception e) { // ignore } assertEquals(2, counter.get()); }
@Test public void allHandlersReturnFalse() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target1 = new CountingTestEndpoint(counter, false); MessageHandler target2 = new CountingTestEndpoint(counter, false); MessageHandler target3 = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.addHandler(target3); try { assertFalse(dispatcher.dispatch(new GenericMessage<>("test"))); } catch (Exception e) { // ignore } assertEquals("each target should have been invoked", 3, counter.get()); }
@Test public void noDuplicateSubscriptions() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target); dispatcher.addHandler(target); try { dispatcher.dispatch(new GenericMessage<>("test")); } catch (Exception e) { // ignore } assertEquals("target should not have duplicate subscriptions", 1, counter.get()); }
@Test public void firstHandlerReturnsTrue() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target1 = new CountingTestEndpoint(counter, true); MessageHandler target2 = new CountingTestEndpoint(counter, false); MessageHandler target3 = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.addHandler(target3); assertTrue(dispatcher.dispatch(new GenericMessage<>("test"))); assertEquals("only the first target should have been invoked", 1, counter.get()); }
@Test public void middleHandlerReturnsTrue() { UnicastingDispatcher dispatcher = new UnicastingDispatcher(); final AtomicInteger counter = new AtomicInteger(); MessageHandler target1 = new CountingTestEndpoint(counter, false); MessageHandler target2 = new CountingTestEndpoint(counter, true); MessageHandler target3 = new CountingTestEndpoint(counter, false); dispatcher.addHandler(target1); dispatcher.addHandler(target2); dispatcher.addHandler(target3); assertTrue(dispatcher.dispatch(new GenericMessage<>("test"))); assertEquals("first two targets should have been invoked", 2, counter.get()); }