package forklift.integration; import forklift.Forklift; import forklift.connectors.ConnectorException; import forklift.connectors.ForkliftMessage; import forklift.consumer.Consumer; import forklift.decorators.OnMessage; import forklift.decorators.Queue; import forklift.exception.StartupException; import forklift.integration.server.TestServiceManager; import forklift.producers.ForkliftProducerI; import forklift.producers.ProducerException; import forklift.schemas.StateCode; import forklift.schemas.UserRegistered; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; public class AvroMessageTests extends BaseIntegrationTest { private static final Logger log = LoggerFactory.getLogger(AvroMessageTests.class); @After public void after() { serviceManager.stop(); } @Before public void setup() { serviceManager = new TestServiceManager(); serviceManager.start(); } @Test public void testComplexAvroMessageWithProperty() throws ProducerException, ConnectorException, InterruptedException, StartupException { Forklift forklift = serviceManager.newManagedForkliftInstance(""); int msgCount = 10; ForkliftProducerI producer = forklift.getConnector().getQueueProducer("forklift-avro-topic"); Map<String, String> producerProps = new HashMap<>(); producerProps.put("Eye", "producerProperty"); producer.setProperties(producerProps); for (int i = 0; i < msgCount; i++) { UserRegistered registered = new UserRegistered(); registered.setFirstName("John"); registered.setLastName("Doe"); registered.setEmail("test@test.com"); registered.setState(StateCode.MT); sentMessageIds.add(producer.send(registered)); } final Consumer c = new Consumer(AvroMessageTests.RegisteredAvroConsumer.class, forklift); // Shutdown the consumer after all the messages have been processed. c.setOutOfMessages((listener) -> { listener.shutdown(); }); // Start the consumer. c.listen(); messageAsserts(); } @Test public void testComplexAvroMessageWithoutProperty() throws ProducerException, ConnectorException, InterruptedException, StartupException { Forklift forklift = serviceManager.newManagedForkliftInstance(""); int msgCount = 10; ForkliftProducerI producer = forklift.getConnector().getQueueProducer("forklift-avro-topic"); for (int i = 0; i < msgCount; i++) { UserRegistered registered = new UserRegistered(); registered.setFirstName("John"); registered.setLastName("Doe"); registered.setEmail("test@test.com"); registered.setState(StateCode.MT); sentMessageIds.add(producer.send(registered)); } final Consumer c = new Consumer(AvroMessageTests.RegisteredAvroConsumer.class, forklift); // Shutdown the consumer after all the messages have been processed. c.setOutOfMessages((listener) -> { listener.shutdown(); }); // Start the consumer. c.listen(); messageAsserts(); } @Queue("forklift-avro-topic") public static class RegisteredAvroConsumer { @forklift.decorators.Message private ForkliftMessage forkliftMessage; @forklift.decorators.Message private UserRegistered value; @OnMessage public void onMessage() { if (value == null) { return; } System.out.println(Thread.currentThread().getName() + value.getState()); consumedMessageIds.add(forkliftMessage.getId()); } } }