Java tutorial
/* * Copyright 2015-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package multibinder; import java.util.UUID; import org.hamcrest.CoreMatchers; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.stream.binder.Binder; import org.springframework.cloud.stream.binder.BinderFactory; import org.springframework.cloud.stream.binder.ExtendedConsumerProperties; import org.springframework.cloud.stream.binder.ExtendedProducerProperties; import org.springframework.cloud.stream.binder.kafka.KafkaConsumerProperties; import org.springframework.cloud.stream.binder.kafka.KafkaMessageChannelBinder; import org.springframework.cloud.stream.binder.kafka.KafkaProducerProperties; import org.springframework.cloud.stream.binder.kafka.config.KafkaBinderConfigurationProperties; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; import org.springframework.kafka.test.rule.KafkaEmbedded; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import static org.hamcrest.Matchers.arrayWithSize; import static org.hamcrest.Matchers.equalTo; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = MultibinderApplication.class) @WebAppConfiguration @DirtiesContext public class TwoKafkaBindersApplicationTest { @ClassRule public static KafkaEmbedded kafkaTestSupport1 = new KafkaEmbedded(1); @ClassRule public static KafkaEmbedded kafkaTestSupport2 = new KafkaEmbedded(1); @BeforeClass public static void setupEnvironment() { System.setProperty("kafkaBroker1", kafkaTestSupport1.getBrokersAsString()); System.setProperty("zk1", kafkaTestSupport1.getZookeeperConnectionString()); System.setProperty("kafkaBroker2", kafkaTestSupport2.getBrokersAsString()); System.setProperty("zk2", kafkaTestSupport2.getZookeeperConnectionString()); } @Autowired private BinderFactory<MessageChannel> binderFactory; @Test public void contextLoads() { Binder<MessageChannel, ?, ?> binder1 = binderFactory.getBinder("kafka1"); KafkaMessageChannelBinder kafka1 = (KafkaMessageChannelBinder) binder1; DirectFieldAccessor directFieldAccessor1 = new DirectFieldAccessor(kafka1); KafkaBinderConfigurationProperties configuration1 = (KafkaBinderConfigurationProperties) directFieldAccessor1 .getPropertyValue("configurationProperties"); Assert.assertThat(configuration1.getBrokers(), arrayWithSize(1)); Assert.assertThat(configuration1.getBrokers()[0], equalTo(kafkaTestSupport1.getBrokersAsString())); Binder<MessageChannel, ?, ?> binder2 = binderFactory.getBinder("kafka2"); KafkaMessageChannelBinder kafka2 = (KafkaMessageChannelBinder) binder2; DirectFieldAccessor directFieldAccessor2 = new DirectFieldAccessor(kafka2); KafkaBinderConfigurationProperties configuration2 = (KafkaBinderConfigurationProperties) directFieldAccessor2 .getPropertyValue("configurationProperties"); Assert.assertThat(configuration2.getBrokers(), arrayWithSize(1)); Assert.assertThat(configuration2.getBrokers()[0], equalTo(kafkaTestSupport2.getBrokersAsString())); } @Test public void messagingWorks() { DirectChannel dataProducer = new DirectChannel(); ((KafkaMessageChannelBinder) binderFactory.getBinder("kafka1")).bindProducer("dataIn", dataProducer, new ExtendedProducerProperties<>(new KafkaProducerProperties())); QueueChannel dataConsumer = new QueueChannel(); ((KafkaMessageChannelBinder) binderFactory.getBinder("kafka2")).bindConsumer("dataOut", UUID.randomUUID().toString(), dataConsumer, new ExtendedConsumerProperties<>(new KafkaConsumerProperties())); String testPayload = "testFoo" + UUID.randomUUID().toString(); dataProducer.send(MessageBuilder.withPayload(testPayload).build()); Message<?> receive = dataConsumer.receive(5000); Assert.assertThat(receive, Matchers.notNullValue()); Assert.assertThat(receive.getPayload(), CoreMatchers.equalTo(testPayload)); } }