@Before public void init() { this.channelMock = mock(PollableChannel.class); this.endpoint = new PollingConsumer(this.channelMock, this.consumer); this.taskScheduler.setPoolSize(5); this.endpoint.setErrorHandler(this.errorHandler); this.endpoint.setTaskScheduler(this.taskScheduler); this.endpoint.setTrigger(this.trigger); this.endpoint.setBeanFactory(mock(BeanFactory.class)); this.endpoint.setReceiveTimeout(-1); this.endpoint.afterPropertiesSet(); this.taskScheduler.afterPropertiesSet(); }
@Before public void initialize() { stream = new ByteArrayOutputStream(); handler = new ByteStreamWritingMessageHandler(stream); this.channel = new QueueChannel(10); this.endpoint = new PollingConsumer(channel, handler); scheduler = new ThreadPoolTaskScheduler(); this.endpoint.setTaskScheduler(scheduler); scheduler.afterPropertiesSet(); trigger.reset(); endpoint.setTrigger(trigger); endpoint.setBeanFactory(mock(BeanFactory.class)); }
@Before public void initialize() { writer = new StringWriter(); handler = new CharacterStreamWritingMessageHandler(writer); this.channel = new QueueChannel(10); trigger.reset(); this.endpoint = new PollingConsumer(channel, handler); scheduler = new ThreadPoolTaskScheduler(); this.endpoint.setTaskScheduler(scheduler); scheduler.afterPropertiesSet(); trigger.reset(); endpoint.setTrigger(trigger); endpoint.setBeanFactory(mock(BeanFactory.class)); }
@Test public void ensurePollerTaskStops() throws Exception { final CountDownLatch latch = new CountDownLatch(1); QueueChannel channel = new QueueChannel(); channel.send(new GenericMessage<>("foo")); //Has to be an explicit implementation - Mockito cannot mock/spy lambdas MessageHandler handler = Mockito.spy(new MessageHandler() { @Override public void handleMessage(Message<?> message) throws MessagingException { latch.countDown(); } }); PollingConsumer consumer = new PollingConsumer(channel, handler); consumer.setTrigger(new PeriodicTrigger(0)); consumer.setErrorHandler(errorHandler); consumer.setTaskScheduler(taskScheduler); consumer.setBeanFactory(mock(BeanFactory.class)); consumer.afterPropertiesSet(); consumer.start(); assertTrue(latch.await(2, TimeUnit.SECONDS)); Mockito.verify(handler, times(1)).handleMessage(Mockito.any(Message.class)); consumer.stop(); Mockito.reset(handler); for (int i = 0; i < 10; i++) { channel.send(new GenericMessage<>("foo")); } Mockito.verify(handler, atMost(1)).handleMessage(Mockito.any(Message.class)); }
@Test public void singleNonStringObject() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(1); TestObject testObject = new TestObject("foo"); channel.send(new GenericMessage<TestObject>(testObject)); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foo", writer.toString()); }
@Test public void maxMessagesPerTaskSameAsMessageCount() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); channel.send(new GenericMessage<String>("foo"), 0); channel.send(new GenericMessage<String>("bar"), 0); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foobar", writer.toString()); }
@Test public void maxMessagesPerTaskExceedsMessageCountWithAppendedNewLines() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(10); endpoint.setReceiveTimeout(0); handler.setShouldAppendNewLine(true); channel.send(new GenericMessage<String>("foo"), 0); channel.send(new GenericMessage<String>("bar"), 0); endpoint.start(); trigger.await(); endpoint.stop(); String newLine = System.getProperty("line.separator"); assertEquals("foo" + newLine + "bar" + newLine, writer.toString()); }
pollingConsumer.setTrigger(this.pollerMetadata.getTrigger()); pollingConsumer.setAdviceChain(this.pollerMetadata.getAdviceChain()); pollingConsumer.setMaxMessagesPerPoll(this.pollerMetadata.getMaxMessagesPerPoll());
@Test public void twoStringsWithNewLines() { handler.setShouldAppendNewLine(true); endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(1); channel.send(new GenericMessage<String>("foo"), 0); channel.send(new GenericMessage<String>("bar"), 0); endpoint.start(); trigger.await(); endpoint.stop(); String newLine = System.getProperty("line.separator"); assertEquals("foo" + newLine, writer.toString()); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foo" + newLine + "bar" + newLine, writer.toString()); }
@Test public void twoNonStringObjectWithNewLines() { handler.setShouldAppendNewLine(true); endpoint.setReceiveTimeout(0); endpoint.setMaxMessagesPerPoll(2); endpoint.setTrigger(trigger); TestObject testObject1 = new TestObject("foo"); TestObject testObject2 = new TestObject("bar"); channel.send(new GenericMessage<TestObject>(testObject1), 0); channel.send(new GenericMessage<TestObject>(testObject2), 0); endpoint.start(); trigger.await(); endpoint.stop(); String newLine = System.getProperty("line.separator"); assertEquals("foo" + newLine + "bar" + newLine, writer.toString()); }
@Test public void twoStringsAndNoNewLinesByDefault() { endpoint.setMaxMessagesPerPoll(1); endpoint.setTrigger(trigger); channel.send(new GenericMessage<String>("foo"), 0); channel.send(new GenericMessage<String>("bar"), 0); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foo", writer.toString()); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foobar", writer.toString()); }
@Test public void twoNonStringObjectWithOutNewLines() { endpoint.setReceiveTimeout(0); endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); TestObject testObject1 = new TestObject("foo"); TestObject testObject2 = new TestObject("bar"); channel.send(new GenericMessage<TestObject>(testObject1), 0); channel.send(new GenericMessage<TestObject>(testObject2), 0); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foobar", writer.toString()); }
@Test public void maxMessagesPerTaskLessThanMessageCount() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result = stream.toByteArray(); assertEquals(6, result.length); assertEquals(1, result[0]); }
@Test public void testStreamWriteBetweenDispatches() throws IOException { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); endpoint.setReceiveTimeout(0); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result1 = stream.toByteArray(); assertEquals(6, result1.length); stream.write(new byte[] {123}); stream.flush(); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result2 = stream.toByteArray(); assertEquals(10, result2.length); assertEquals(1, result2[0]); assertEquals(123, result2[6]); assertEquals(7, result2[7]); }
@Test public void testStreamResetBetweenDispatches() { endpoint.setMaxMessagesPerPoll(2); endpoint.setTrigger(trigger); endpoint.setReceiveTimeout(0); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result1 = stream.toByteArray(); assertEquals(6, result1.length); stream.reset(); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result2 = stream.toByteArray(); assertEquals(3, result2.length); assertEquals(7, result2[0]); }
@Test public void maxMessagesPerTaskExceedsMessageCount() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(5); endpoint.setReceiveTimeout(0); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result = stream.toByteArray(); assertEquals(9, result.length); assertEquals(1, result[0]); }
@Test public void maxMessagesPerTaskSameAsMessageCount() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(3); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result = stream.toByteArray(); assertEquals(9, result.length); assertEquals(1, result[0]); assertEquals(9, result[8]); }
@Test public void testMaxMessagesExceedsMessageCountWithMultipleDispatches() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(5); endpoint.setReceiveTimeout(0); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result1 = stream.toByteArray(); assertEquals(9, result1.length); assertEquals(1, result1[0]); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result2 = stream.toByteArray(); assertEquals(9, result2.length); assertEquals(1, result2[0]); }
@Test public void testMaxMessagesLessThanMessageCountWithMultipleDispatches() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); endpoint.setReceiveTimeout(0); channel.send(new GenericMessage<byte[]>(new byte[] {1, 2, 3}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {4, 5, 6}), 0); channel.send(new GenericMessage<byte[]>(new byte[] {7, 8, 9}), 0); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result1 = stream.toByteArray(); assertEquals(6, result1.length); assertEquals(1, result1[0]); trigger.reset(); endpoint.start(); trigger.await(); endpoint.stop(); byte[] result2 = stream.toByteArray(); assertEquals(9, result2.length); assertEquals(1, result2[0]); assertEquals(7, result2[6]); }
@Test public void subscription() throws Exception { TestApplicationContext context = TestUtils.createTestApplicationContext(); SynchronousQueue<String> queue = new SynchronousQueue<>(); TestBean testBean = new TestBean(queue); QueueChannel channel = new QueueChannel(); context.registerChannel("channel", channel); Message<String> message = new GenericMessage<>("testing"); channel.send(message); assertNull(queue.poll()); MethodInvokingMessageHandler handler = new MethodInvokingMessageHandler(testBean, "foo"); handler.setBeanFactory(context); PollingConsumer endpoint = new PollingConsumer(channel, handler); endpoint.setTrigger(new PeriodicTrigger(10)); context.registerEndpoint("testEndpoint", endpoint); context.refresh(); String result = queue.poll(2000, TimeUnit.MILLISECONDS); assertNotNull(result); assertEquals("testing", result); context.close(); }