Search in sources :

Example 6 with TestChannelBinder

use of org.springframework.cloud.stream.binder.test.TestChannelBinder in project spring-cloud-stream by spring-cloud.

the class PollableConsumerTests method testErrors.

@Test
public void testErrors() {
    TestChannelBinder binder = createBinder();
    MessageConverterConfigurer configurer = context.getBean(MessageConverterConfigurer.class);
    DefaultPollableMessageSource pollableSource = new DefaultPollableMessageSource(this.messageConverter);
    configurer.configurePolledMessageSource(pollableSource, "foo");
    pollableSource.addInterceptor(new ChannelInterceptorAdapter() {

        @Override
        public Message<?> preSend(Message<?> message, MessageChannel channel) {
            return MessageBuilder.withPayload(((String) message.getPayload()).toUpperCase()).copyHeaders(message.getHeaders()).build();
        }
    });
    ExtendedConsumerProperties<Object> properties = new ExtendedConsumerProperties<>(null);
    properties.setMaxAttempts(2);
    properties.setBackOffInitialInterval(0);
    binder.bindPollableConsumer("foo", "bar", pollableSource, properties);
    final CountDownLatch latch = new CountDownLatch(1);
    context.getBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME, SubscribableChannel.class).subscribe(m -> {
        latch.countDown();
    });
    final AtomicInteger count = new AtomicInteger();
    assertThat(pollableSource.poll(received -> {
        count.incrementAndGet();
        throw new RuntimeException("test recoverer");
    })).isTrue();
    assertThat(count.get()).isEqualTo(2);
    Message<?> lastError = binder.getLastError();
    assertThat(lastError).isNotNull();
    assertThat(((Exception) lastError.getPayload()).getCause().getMessage()).isEqualTo("test recoverer");
}
Also used : ChannelInterceptorAdapter(org.springframework.messaging.support.ChannelInterceptorAdapter) Message(org.springframework.messaging.Message) GenericMessage(org.springframework.messaging.support.GenericMessage) CountDownLatch(java.util.concurrent.CountDownLatch) MessageChannel(org.springframework.messaging.MessageChannel) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MessageConverterConfigurer(org.springframework.cloud.stream.binding.MessageConverterConfigurer) TestChannelBinder(org.springframework.cloud.stream.binder.test.TestChannelBinder) SubscribableChannel(org.springframework.messaging.SubscribableChannel) Test(org.junit.Test)

Example 7 with TestChannelBinder

use of org.springframework.cloud.stream.binder.test.TestChannelBinder in project spring-cloud-stream by spring-cloud.

the class ContentTypeTckTests method _jsonToPojoWrongDefaultContentTypeProperty.

// Failure tests
@Test
public void _jsonToPojoWrongDefaultContentTypeProperty() {
    ApplicationContext context = new SpringApplicationBuilder(PojoToPojoStreamListener.class).web(WebApplicationType.NONE).run("--spring.cloud.stream.default.contentType=text/plain", "--spring.jmx.enabled=false");
    InputDestination source = context.getBean(InputDestination.class);
    TestChannelBinder binder = context.getBean(TestChannelBinder.class);
    String jsonPayload = "{\"name\":\"oleg\"}";
    source.send(new GenericMessage<>(jsonPayload.getBytes()));
    assertTrue(binder.getLastError().getPayload() instanceof MessageConversionException);
}
Also used : ApplicationContext(org.springframework.context.ApplicationContext) MessageConversionException(org.springframework.messaging.converter.MessageConversionException) SpringApplicationBuilder(org.springframework.boot.builder.SpringApplicationBuilder) TestChannelBinder(org.springframework.cloud.stream.binder.test.TestChannelBinder) InputDestination(org.springframework.cloud.stream.binder.test.InputDestination) Test(org.junit.Test)

Example 8 with TestChannelBinder

use of org.springframework.cloud.stream.binder.test.TestChannelBinder in project spring-cloud-stream by spring-cloud.

the class ContentTypeTckTests method _toStringDefaultContentTypePropertyUnknownContentType.

@Test
public void _toStringDefaultContentTypePropertyUnknownContentType() {
    ApplicationContext context = new SpringApplicationBuilder(StringToStringStreamListener.class).web(WebApplicationType.NONE).run("--spring.cloud.stream.default.contentType=foo/bar", "--spring.jmx.enabled=false");
    InputDestination source = context.getBean(InputDestination.class);
    TestChannelBinder binder = context.getBean(TestChannelBinder.class);
    String jsonPayload = "{\"name\":\"oleg\"}";
    source.send(new GenericMessage<>(jsonPayload.getBytes()));
    assertTrue(binder.getLastError().getPayload() instanceof MessageConversionException);
}
Also used : ApplicationContext(org.springframework.context.ApplicationContext) MessageConversionException(org.springframework.messaging.converter.MessageConversionException) SpringApplicationBuilder(org.springframework.boot.builder.SpringApplicationBuilder) TestChannelBinder(org.springframework.cloud.stream.binder.test.TestChannelBinder) InputDestination(org.springframework.cloud.stream.binder.test.InputDestination) Test(org.junit.Test)

Example 9 with TestChannelBinder

use of org.springframework.cloud.stream.binder.test.TestChannelBinder in project spring-cloud-stream by spring-cloud.

the class PollableConsumerTests method testEmbedded.

@Test
public void testEmbedded() {
    TestChannelBinder binder = createBinder();
    MessageConverterConfigurer configurer = context.getBean(MessageConverterConfigurer.class);
    binder.setMessageSourceDelegate(() -> {
        MessageValues original = new MessageValues("foo".getBytes(), Collections.singletonMap(MessageHeaders.CONTENT_TYPE, "application/octet-stream"));
        byte[] payload = new byte[0];
        try {
            payload = EmbeddedHeaderUtils.embedHeaders(original, MessageHeaders.CONTENT_TYPE);
        } catch (Exception e) {
            fail(e.getMessage());
        }
        return new GenericMessage<>(payload);
    });
    ExtendedConsumerProperties<Object> properties = new ExtendedConsumerProperties<>(null);
    properties.setHeaderMode(HeaderMode.embeddedHeaders);
    DefaultPollableMessageSource pollableSource = new DefaultPollableMessageSource(this.messageConverter);
    configurer.configurePolledMessageSource(pollableSource, "foo");
    pollableSource.addInterceptor(new ChannelInterceptorAdapter() {

        @Override
        public Message<?> preSend(Message<?> message, MessageChannel channel) {
            return MessageBuilder.withPayload(new String((byte[]) message.getPayload()).toUpperCase()).copyHeaders(message.getHeaders()).build();
        }
    });
    binder.bindPollableConsumer("foo", "bar", pollableSource, properties);
    assertThat(pollableSource.poll(received -> {
        assertThat(received.getPayload()).isEqualTo("FOO");
        assertThat(received.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo("application/octet-stream");
    })).isTrue();
}
Also used : ChannelInterceptorAdapter(org.springframework.messaging.support.ChannelInterceptorAdapter) Message(org.springframework.messaging.Message) GenericMessage(org.springframework.messaging.support.GenericMessage) GenericMessage(org.springframework.messaging.support.GenericMessage) MessageChannel(org.springframework.messaging.MessageChannel) MessageConverterConfigurer(org.springframework.cloud.stream.binding.MessageConverterConfigurer) TestChannelBinder(org.springframework.cloud.stream.binder.test.TestChannelBinder) Test(org.junit.Test)

Example 10 with TestChannelBinder

use of org.springframework.cloud.stream.binder.test.TestChannelBinder in project spring-cloud-stream by spring-cloud.

the class PollableConsumerTests method testConvertSimple.

@Test
public void testConvertSimple() {
    TestChannelBinder binder = createBinder();
    MessageConverterConfigurer configurer = context.getBean(MessageConverterConfigurer.class);
    binder.setMessageSourceDelegate(() -> new GenericMessage<>("{\"foo\":\"bar\"}".getBytes()));
    DefaultPollableMessageSource pollableSource = new DefaultPollableMessageSource(this.messageConverter);
    configurer.configurePolledMessageSource(pollableSource, "foo");
    ExtendedConsumerProperties<Object> properties = new ExtendedConsumerProperties<>(null);
    properties.setMaxAttempts(1);
    properties.setBackOffInitialInterval(0);
    binder.bindPollableConsumer("foo", "bar", pollableSource, properties);
    final AtomicReference<Object> payload = new AtomicReference<>();
    assertThat(pollableSource.poll(received -> {
        payload.set(received.getPayload());
    }, new ParameterizedTypeReference<Foo>() {
    })).isTrue();
    assertThat(payload.get()).isInstanceOf(Foo.class);
    assertThat(((Foo) payload.get()).getFoo()).isEqualTo("bar");
    // test the cache for coverage
    assertThat(pollableSource.poll(received -> {
        payload.set(received.getPayload());
    }, new ParameterizedTypeReference<Foo>() {
    })).isTrue();
    assertThat(payload.get()).isInstanceOf(Foo.class);
    assertThat(((Foo) payload.get()).getFoo()).isEqualTo("bar");
}
Also used : MessageConverterConfigurer(org.springframework.cloud.stream.binding.MessageConverterConfigurer) AtomicReference(java.util.concurrent.atomic.AtomicReference) TestChannelBinder(org.springframework.cloud.stream.binder.test.TestChannelBinder) Test(org.junit.Test)

Aggregations

TestChannelBinder (org.springframework.cloud.stream.binder.test.TestChannelBinder)11 Test (org.junit.Test)10 MessageConverterConfigurer (org.springframework.cloud.stream.binding.MessageConverterConfigurer)8 AtomicReference (java.util.concurrent.atomic.AtomicReference)4 Message (org.springframework.messaging.Message)4 MessageChannel (org.springframework.messaging.MessageChannel)4 ChannelInterceptorAdapter (org.springframework.messaging.support.ChannelInterceptorAdapter)4 GenericMessage (org.springframework.messaging.support.GenericMessage)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)3 SpringApplicationBuilder (org.springframework.boot.builder.SpringApplicationBuilder)3 CountDownLatch (java.util.concurrent.CountDownLatch)2 InputDestination (org.springframework.cloud.stream.binder.test.InputDestination)2 ApplicationContext (org.springframework.context.ApplicationContext)2 SubscribableChannel (org.springframework.messaging.SubscribableChannel)2 MessageConversionException (org.springframework.messaging.converter.MessageConversionException)2 List (java.util.List)1 Map (java.util.Map)1 BindingProperties (org.springframework.cloud.stream.config.BindingProperties)1 BindingServiceProperties (org.springframework.cloud.stream.config.BindingServiceProperties)1