@Override public void run() { for (int i = 0; i < maxCount; i++) { sender.enqueue(TEST_EVENT); } } };
@Inject(optional=true) void injectTransmitters(@Named(EVENT_NAME) final Map<String, NessEventTransmitter> availableTransmitters) { if (eventConfig != null) { final String [] transports = eventConfig.getTransports(); for (int i = 0; i < transports.length; i++) { if (availableTransmitters.containsKey(transports[i])) { addEventTransmitter(availableTransmitters.get(transports[i])); LOG.trace("Added %s as an event transport.", transports[i]); } else { LOG.warn("Event transport %s configured but not available.", transports[i]); } } } else { LOG.warn("Event config is null but transports were injected!"); } }
@Test public void testNoEventReceivers() { final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); for (int i = 0; i < 1000; i++) { sender.enqueue(TEST_EVENT); } }
@Test public void testSendAndReceive() throws Exception { final int maxCount = 1000; // Warm up the ObjectMapper. sender.enqueue(TEST_EVENT); Thread.sleep(100L); for (int i = 1; i < maxCount; i++) { Thread.sleep(4L); sender.enqueue(TEST_EVENT); } Thread.sleep(1000L); final NessEvent testEvent = receiver.getEvent(); Assert.assertNotNull(testEvent); Assert.assertEquals(TEST_EVENT, testEvent); Assert.assertEquals(maxCount, receiver.getCount()); } }
@Test public void testIgnoreEvent() { final CountingEventReceiver testEventReceiver = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); sender.enqueue(IGNORE_EVENT); final NessEvent testEvent = testEventReceiver.getEvent(); Assert.assertNull(testEvent); Assert.assertEquals(0, testEventReceiver.getCount()); }
@Test public void testSingleEventReceiver() { final CountingEventReceiver testEventReceiver = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); sender.enqueue(TEST_EVENT); final NessEvent testEvent = testEventReceiver.getEvent(); Assert.assertNotNull(testEvent); Assert.assertSame(TEST_EVENT, testEvent); Assert.assertEquals(1, testEventReceiver.getCount()); }
@Test public void testOneForYouOneForMe() { final CountingEventReceiver testEventReceiver1 = new CountingEventReceiver(TEST_EVENT_TYPE); final CountingEventReceiver testEventReceiver2 = new CountingEventReceiver(IGNORE_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver1); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver2); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); sender.enqueue(TEST_EVENT); sender.enqueue(IGNORE_EVENT); final NessEvent testEvent1 = testEventReceiver1.getEvent(); Assert.assertNotNull(testEvent1); Assert.assertSame(TEST_EVENT, testEvent1); Assert.assertEquals(1, testEventReceiver1.getCount()); final NessEvent testEvent2 = testEventReceiver2.getEvent(); Assert.assertNotNull(testEvent2); Assert.assertSame(IGNORE_EVENT, testEvent2); Assert.assertEquals(1, testEventReceiver2.getCount()); }
eventSender.enqueue(NessEvent.createEvent(null, NessEventType.getForName(null))); Thread.sleep(1000L); Assert.assertTrue(jmsEventTransport.isConnected());
@Test public void testLocalTransport() { final CountingEventReceiver testEventReceiver = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting("ness.event.transport", "local"), new Module() { @Override public void configure(final Binder binder) { binder.bind(TestEventTransmitter.class).in(Scopes.SINGLETON); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver); NessEventModule.bindEventTransmitter(binder, "test").to(TestEventTransmitter.class).in(Scopes.SINGLETON); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); final int maxCount = 1000; for (int i = 0; i < maxCount; i++) { sender.enqueue(TEST_EVENT); } final NessEvent testEvent = testEventReceiver.getEvent(); Assert.assertNotNull(testEvent); Assert.assertSame(TEST_EVENT, testEvent); Assert.assertEquals(maxCount, testEventReceiver.getCount()); Assert.assertEquals(0, testEventTransmitter.getCount()); }
@Test public void testCustomTransport() { final CountingEventReceiver testEventReceiver = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting("ness.event.transport", "test"), new Module() { @Override public void configure(final Binder binder) { binder.bind(TestEventTransmitter.class).in(Scopes.SINGLETON); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver); NessEventModule.bindEventTransmitter(binder, "test").to(TestEventTransmitter.class).in(Scopes.SINGLETON); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); final int maxCount = 1000; for (int i = 0; i < maxCount; i++) { sender.enqueue(TEST_EVENT); } final NessEvent testEvent = testEventReceiver.getEvent(); Assert.assertNotNull(testEvent); Assert.assertSame(TEST_EVENT, testEvent); Assert.assertEquals(maxCount, testEventReceiver.getCount()); Assert.assertEquals(maxCount, testEventTransmitter.getCount()); }
@Test public void testTwoTransports() { final CountingEventReceiver testEventReceiver = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting("ness.event.transport", "test\\, local"), new Module() { @Override public void configure(final Binder binder) { binder.bind(TestEventTransmitter.class).in(Scopes.SINGLETON); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver); NessEventModule.bindEventTransmitter(binder, "test").to(TestEventTransmitter.class).in(Scopes.SINGLETON); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); final int maxCount = 1000; for (int i = 0; i < maxCount; i++) { sender.enqueue(TEST_EVENT); } final NessEvent testEvent = testEventReceiver.getEvent(); Assert.assertNotNull(testEvent); Assert.assertSame(TEST_EVENT, testEvent); // Each event was transported twice. Assert.assertEquals(maxCount * 2, testEventReceiver.getCount()); // But only once by the test transport. Assert.assertEquals(maxCount, testEventTransmitter.getCount()); }
Assert.assertFalse(jmsEventTransport.isConnected()); Assert.assertNotNull(eventSender); eventSender.enqueue(NessEvent.createEvent(null, NessEventType.getForName(null))); Thread.sleep(1000L); Assert.assertTrue(jmsEventTransport.isConnected());
@Test public void testTwoEventReceivers() { final CountingEventReceiver testEventReceiver1 = new CountingEventReceiver(TEST_EVENT_TYPE); final CountingEventReceiver testEventReceiver2 = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver1); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver2); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); sender.enqueue(TEST_EVENT); final NessEvent testEvent1 = testEventReceiver1.getEvent(); Assert.assertNotNull(testEvent1); Assert.assertSame(TEST_EVENT, testEvent1); Assert.assertEquals(1, testEventReceiver1.getCount()); final NessEvent testEvent2 = testEventReceiver2.getEvent(); Assert.assertNotNull(testEvent2); Assert.assertSame(TEST_EVENT, testEvent2); Assert.assertEquals(1, testEventReceiver2.getCount()); }
@Test public void testLotsOfEvents() { final CountingEventReceiver testEventReceiver1 = new CountingEventReceiver(TEST_EVENT_TYPE); final CountingEventReceiver testEventReceiver2 = new CountingEventReceiver(TEST_EVENT_TYPE); final Injector injector = Guice.createInjector(Stage.PRODUCTION, ConfigModule.forTesting(), new Module() { @Override public void configure(final Binder binder) { NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver1); NessEventModule.bindEventReceiver(binder).toInstance(testEventReceiver2); binder.disableCircularProxies(); binder.requireExplicitBindings(); }}, new NessEventModule()); injector.injectMembers(this); int maxCount = 1000; for (int i = 0; i < maxCount; i++) { sender.enqueue(TEST_EVENT); } final NessEvent testEvent1 = testEventReceiver1.getEvent(); Assert.assertNotNull(testEvent1); Assert.assertSame(TEST_EVENT, testEvent1); Assert.assertEquals(maxCount, testEventReceiver1.getCount()); final NessEvent testEvent2 = testEventReceiver2.getEvent(); Assert.assertNotNull(testEvent2); Assert.assertSame(TEST_EVENT, testEvent2); Assert.assertEquals(maxCount, testEventReceiver2.getCount()); }