public void TestConvertSimpler() { var searchDirectories = GetSearchDirectories("TestBinder"); IServiceProvider serviceProvider = CreateStreamsContainer(searchDirectories, "spring:cloud:stream:bindings:foo:contentType=text/plain").BuildServiceProvider(); var messageConverter = serviceProvider.GetService <ISmartMessageConverter>(); Assert.NotNull(messageConverter); var binder = serviceProvider.GetService <IBinder>() as AbstractPollableMessageSourceBinder; Assert.NotNull(binder); var configurer = serviceProvider.GetService <MessageConverterConfigurer>(); Assert.NotNull(configurer); var options = serviceProvider.GetService <IOptions <BindingServiceOptions> >(); options.Value.Bindings.TryGetValue("foo", out var bindingOptions); Assert.Equal("text/plain", bindingOptions.ContentType); var setter = binder.GetType().GetProperty("MessageSourceDelegate").GetSetMethod(); var messageSource = new TestMessageSource("foo"); setter.Invoke(binder, new object[] { messageSource }); var pollableSource = new DefaultPollableMessageSource(serviceProvider.GetService <IApplicationContext>(), messageConverter); configurer.ConfigurePolledMessageSource(pollableSource, "foo"); var properties = new ConsumerOptions() { MaxAttempts = 1, BackOffInitialInterval = 0 }; properties.PostProcess(); binder.BindConsumer("foo", "bar", pollableSource, properties); var handler = new TestConvertSimpleHandler(); Assert.True(pollableSource.Poll(handler, typeof(string))); Assert.IsType <string>(handler.Payload); var str = handler.Payload as string; Assert.Equal("foo", str); Assert.True(pollableSource.Poll(handler, typeof(string))); Assert.IsType <string>(handler.Payload); str = handler.Payload as string; Assert.Equal("foo", str); }
public void TestConvertSimple() { var searchDirectories = GetSearchDirectories("TestBinder"); IServiceProvider serviceProvider = CreateStreamsContainer(searchDirectories).BuildServiceProvider(); var messageConverter = serviceProvider.GetService <ISmartMessageConverter>(); Assert.NotNull(messageConverter); var binder = serviceProvider.GetService <IBinder>() as AbstractPollableMessageSourceBinder; Assert.NotNull(binder); var configurer = serviceProvider.GetService <MessageConverterConfigurer>(); Assert.NotNull(configurer); var setter = binder.GetType().GetProperty("MessageSourceDelegate").GetSetMethod(); var messageSource = new TestMessageSource("{\"foo\":\"bar\"}"); setter.Invoke(binder, new object[] { messageSource }); var pollableSource = new DefaultPollableMessageSource(serviceProvider.GetService <IApplicationContext>(), messageConverter); configurer.ConfigurePolledMessageSource(pollableSource, "foo"); var properties = new ConsumerOptions() { MaxAttempts = 2, BackOffInitialInterval = 0 }; properties.PostProcess(); binder.BindConsumer("foo", "bar", pollableSource, properties); var handler = new TestConvertSimpleHandler(); Assert.True(pollableSource.Poll(handler, typeof(FooType))); Assert.IsType <FooType>(handler.Payload); var fooType = handler.Payload as FooType; Assert.Equal("bar", fooType.Foo); Assert.True(pollableSource.Poll(handler, typeof(FooType))); Assert.IsType <FooType>(handler.Payload); fooType = handler.Payload as FooType; Assert.Equal("bar", fooType.Foo); }
public void TestEmbedded() { var searchDirectories = GetSearchDirectories("TestBinder"); IServiceProvider serviceProvider = CreateStreamsContainer( searchDirectories, "spring:cloud:stream:bindings:foo:consumer:headerMode=" + HeaderMode.EmbeddedHeaders.ToString()).BuildServiceProvider(); var messageConverter = serviceProvider.GetService <ISmartMessageConverter>(); Assert.NotNull(messageConverter); var binder = serviceProvider.GetService <IBinder>() as AbstractPollableMessageSourceBinder; Assert.NotNull(binder); var configurer = serviceProvider.GetService <MessageConverterConfigurer>(); Assert.NotNull(configurer); var setter = binder.GetType().GetProperty("MessageSourceDelegate").GetSetMethod(); var messageSource = new TestFuncMessageSource(() => { var original = new MessageValues( Encoding.UTF8.GetBytes("foo"), new Dictionary <string, object>() { { MessageHeaders.CONTENT_TYPE, "application/octet-stream" } }); var payload = new byte[0]; try { payload = EmbeddedHeaderUtils.EmbedHeaders(original, MessageHeaders.CONTENT_TYPE); } catch (Exception e) { Assert.NotNull(e); } return(Message.Create <byte[]>(payload)); }); setter.Invoke(binder, new object[] { messageSource }); var options = serviceProvider.GetService <IOptions <BindingServiceOptions> >(); options.Value.Bindings.TryGetValue("foo", out var bindingOptions); Assert.Equal(HeaderMode.EmbeddedHeaders, bindingOptions.Consumer.HeaderMode); var pollableSource = new DefaultPollableMessageSource(serviceProvider.GetService <IApplicationContext>(), messageConverter); configurer.ConfigurePolledMessageSource(pollableSource, "foo"); pollableSource.AddInterceptor(new TestEmbededChannelInterceptor()); binder.BindConsumer("foo", "bar", pollableSource, bindingOptions.Consumer); var handler = new TestConvertSimpleHandler(); Assert.True(pollableSource.Poll(handler)); Assert.IsType <string>(handler.Payload); var str = handler.Payload as string; Assert.Equal("FOO", str); handler.Message.Headers.TryGetValue(MessageHeaders.CONTENT_TYPE, out var contentType); Assert.Equal("application/octet-stream", contentType.ToString()); }