@Test
public void requestResponseCylce() throws InterruptedException {
PartitionProcessor processor = givenAPartionProcessor();
EmptyMessage payload = EmptyMessage.getDefaultInstance();
OrangeContext context = new OrangeContext();
ConsumerRecord<String, byte[]> aRecord;
Message sentRequest = Messages.requestFor(Topic.defaultServiceInbox("com.sixt.service.cruft"), Topic.serviceInbox("com.sixt.service.cruft", "trashcan"), "requestKey", payload, context);
aRecord = simulateKafkaInTheLoop(sentRequest, 10);
processor.enqueue(aRecord);
getTestHandler(processor).onMessageCalled.await();
Message receivedRequest = getTestHandler(processor).lastMessage;
OrangeContext receivedContext = getTestHandler(processor).lastContext;
Message sentReply = Messages.replyTo(receivedRequest, payload, receivedContext);
aRecord = simulateKafkaInTheLoop(sentReply, 20);
processor.enqueue(aRecord);
getTestHandler(processor).blockReturnFromOnMessage.countDown();
shortSleep();
Message receivedReply = getTestHandler(processor).lastMessage;
assertEquals(2, getTestHandler(processor).handledMessages.size());
assertEquals(sentRequest.getMetadata().getReplyTo(), receivedReply.getMetadata().getTopic());
assertEquals(sentRequest.getMetadata().getMessageId(), receivedReply.getMetadata().getRequestCorrelationId());
assertEquals(context.getCorrelationId(), receivedReply.getMetadata().getCorrelationId());
processor.waitForHandlersToTerminate(1);
}