package forklift.consumer; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import forklift.connectors.ConnectorException; import forklift.connectors.ForkliftMessage; import forklift.controller.KafkaController; import forklift.message.MessageStream; import forklift.message.KafkaMessage; import org.junit.Before; import org.junit.Test; public class KafkaTopicConsumerTests { private String topic; private KafkaController controller; private MessageStream messageStream; private KafkaTopicConsumer consumer; @Before public void setup() { this.topic = "testTopic"; this.controller = mock(KafkaController.class); when(controller.isRunning()).thenReturn(true); this.messageStream = mock(MessageStream.class); when(controller.getMessageStream()).thenReturn(this.messageStream); consumer = new KafkaTopicConsumer(topic, controller); } @Test public void receiveTimeoutTest() throws InterruptedException, ConnectorException { long timeout = 100; when(messageStream.nextRecord(this.topic, timeout)).thenReturn(null); ForkliftMessage result = consumer.receive(timeout); assertEquals(null, result); } @Test public void receiveMessageTest() throws InterruptedException, ConnectorException { KafkaMessage message = mock(KafkaMessage.class); long timeout = 100; when(messageStream.nextRecord(this.topic, timeout)).thenReturn(message); ForkliftMessage result = consumer.receive(timeout); assertEquals(message, result); } @Test(expected = ConnectorException.class) public void receiveWithControllerNotRunning() throws ConnectorException { when(this.controller.isRunning()).thenReturn(false); consumer.receive(100); } @Test public void addTopicTest() throws ConnectorException { consumer.receive(100); verify(controller).addTopic(this.topic); } @Test public void closeAndRemoveTopicTest() throws ConnectorException { consumer.close(); verify(controller).removeTopic(this.topic); } }