/** * Test KafkaOutputOperator (i.e. an output adapter for Kafka, aka producer). This module sends * data into an ActiveMQ message bus. * * <p>[Generate tuple] ==> [send tuple through Kafka output adapter(i.e. producer) into Kafka * message bus] ==> [receive data in outside Kaka listener (i.e consumer)] * * @throws Exception */ @Test @SuppressWarnings({"SleepWhileInLoop", "empty-statement"}) public void testKafkaOutputOperator() throws Exception { // Setup a message listener to receive the message KafkaConsumer listener = new KafkaConsumer("topic1"); new Thread(listener).start(); // Malhar module to send message // Create DAG for testing. LocalMode lma = LocalMode.newInstance(); DAG dag = lma.getDAG(); // Create ActiveMQStringSinglePortOutputOperator StringGeneratorInputOperator generator = dag.addOperator("TestStringGenerator", StringGeneratorInputOperator.class); KafkaStringSinglePortOutputOperator node = dag.addOperator("Kafka message producer", KafkaStringSinglePortOutputOperator.class); // Set configuration parameters for Kafka node.setTopic("topic1"); // Connect ports dag.addStream("Kafka message", generator.outputPort, node.inputPort) .setLocality(Locality.CONTAINER_LOCAL); // Create local cluster final LocalMode.Controller lc = lma.getController(); lc.runAsync(); Thread.sleep(2000); lc.shutdown(); // Check values send vs received Assert.assertEquals("Number of emitted tuples", tupleCount, listener.holdingBuffer.size()); logger.debug(String.format("Number of emitted tuples: %d", listener.holdingBuffer.size())); Assert.assertEquals( "First tuple", "testString 1", listener.getMessage(listener.holdingBuffer.peek())); listener.close(); }