package com.github.ddth.kafka.test; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import com.github.ddth.kafka.IKafkaMessageListener; import com.github.ddth.kafka.KafkaMessage; import junit.framework.Test; import junit.framework.TestSuite; public class KafkaClientTest extends BaseKafkaTest { public KafkaClientTest(String testName) { super(testName); } public static Test suite() { return new TestSuite(KafkaClientTest.class); } private final static String TOPIC = "test"; private final String CONSUMER_GROUP_ID = "mygroupid"; @org.junit.Test public void testNewInstance() throws Exception { assertNotNull(kafkaClient); } @org.junit.Test public void testSendSyncConsumeOneByOne() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content, content); KafkaMessage result = kafkaClient.sendMessage(msg); assertNotNull(result); } for (int i = 0, n = TEST_MSGS.size(); i < n; i++) { KafkaMessage msg = kafkaClient.consumeMessage(CONSUMER_GROUP_ID, true, TOPIC, 5000, TimeUnit.MILLISECONDS); String strMsg = msg.contentAsString(); assertTrue(TEST_MSGS.contains(strMsg)); TEST_MSGS.remove(strMsg); } } @org.junit.Test public void testSendAsyncConsumeOneByOne() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content, content); Future<KafkaMessage> result = kafkaClient.sendMessageAsync(msg); assertNotNull(result); } for (int i = 0, n = TEST_MSGS.size(); i < n; i++) { KafkaMessage msg = kafkaClient.consumeMessage(CONSUMER_GROUP_ID, true, TOPIC, 10000, TimeUnit.MILLISECONDS); String strMsg = msg.contentAsString(); assertTrue(TEST_MSGS.contains(strMsg)); TEST_MSGS.remove(strMsg); } } @org.junit.Test public void testSendSyncConsumeListenerAfter() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content); KafkaMessage result = kafkaClient.sendMessage(msg); assertNotNull(result); } final Set<String> RECEIVED_MSG = new HashSet<String>(); IKafkaMessageListener msgListener = new IKafkaMessageListener() { @Override public void onMessage(KafkaMessage message) { String msgStr = message != null ? message.contentAsString() : null; RECEIVED_MSG.add(msgStr); } }; kafkaClient.addMessageListener(CONSUMER_GROUP_ID, true, TOPIC, msgListener); long t = System.currentTimeMillis(); while (RECEIVED_MSG.size() < TEST_MSGS.size() && System.currentTimeMillis() - t < 30000) { Thread.sleep(1); } assertEquals(TEST_MSGS.size(), RECEIVED_MSG.size()); assertEquals(TEST_MSGS, RECEIVED_MSG); } @org.junit.Test public void testSendAsyncConsumeListenerAfter() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content); Future<KafkaMessage> result = kafkaClient.sendMessageAsync(msg); assertNotNull(result); } final Set<String> RECEIVED_MSG = new HashSet<String>(); IKafkaMessageListener msgListener = new IKafkaMessageListener() { @Override public void onMessage(KafkaMessage message) { String msgStr = message != null ? message.contentAsString() : null; RECEIVED_MSG.add(msgStr); } }; kafkaClient.addMessageListener(CONSUMER_GROUP_ID, true, TOPIC, msgListener); long t = System.currentTimeMillis(); while (RECEIVED_MSG.size() < TEST_MSGS.size() && System.currentTimeMillis() - t < 30000) { Thread.sleep(1); } assertEquals(TEST_MSGS.size(), RECEIVED_MSG.size()); assertEquals(TEST_MSGS, RECEIVED_MSG); } @org.junit.Test public void testSendSyncConsumeListenerBefore() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> RECEIVED_MSG = new HashSet<String>(); IKafkaMessageListener msgListener = new IKafkaMessageListener() { @Override public void onMessage(KafkaMessage message) { String msgStr = message != null ? message.contentAsString() : null; RECEIVED_MSG.add(msgStr); } }; kafkaClient.addMessageListener(CONSUMER_GROUP_ID, true, TOPIC, msgListener); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content); KafkaMessage result = kafkaClient.sendMessage(msg); assertNotNull(result); } long t = System.currentTimeMillis(); while (RECEIVED_MSG.size() < TEST_MSGS.size() && System.currentTimeMillis() - t < 30000) { Thread.sleep(1); } assertEquals(TEST_MSGS.size(), RECEIVED_MSG.size()); assertEquals(TEST_MSGS, RECEIVED_MSG); } @org.junit.Test public void testSendAsyncConsumeListenerBefore() throws Exception { createTopic(TOPIC); warnup(TOPIC, CONSUMER_GROUP_ID); final Set<String> RECEIVED_MSG = new HashSet<String>(); IKafkaMessageListener msgListener = new IKafkaMessageListener() { @Override public void onMessage(KafkaMessage message) { String msgStr = message != null ? message.contentAsString() : null; RECEIVED_MSG.add(msgStr); } }; kafkaClient.addMessageListener(CONSUMER_GROUP_ID, true, TOPIC, msgListener); final Set<String> TEST_MSGS = new HashSet<String>(Arrays.asList("message - 0", "message - 1", "message - 2", "message - 3", "message - 4", "message - 5", "message - 6", "message - 7", "message - 8", "message - 9")); for (String content : TEST_MSGS) { KafkaMessage msg = new KafkaMessage(TOPIC, content); Future<KafkaMessage> result = kafkaClient.sendMessageAsync(msg); assertNotNull(result); } long t = System.currentTimeMillis(); while (RECEIVED_MSG.size() < TEST_MSGS.size() && System.currentTimeMillis() - t < 30000) { Thread.sleep(1); } assertEquals(TEST_MSGS.size(), RECEIVED_MSG.size()); assertEquals(TEST_MSGS, RECEIVED_MSG); } }