/*
* Author: cbedford
* Date: 11/2/13
* Time: 5:58 PM
*/
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.testng.annotations.*;
import org.testng.TestNG;
import org.testng.TestListenerAdapter;
import static org.easymock.EasyMock.*;
import org.slf4j.*;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ConcurrentLinkedQueue;
public class VerifyItemsFromFeedAreSentToMockKafkaProducer {
private static String TOPIC = "someTopic";
private static String MESSAGE = "i-am-a-message";
private static class TestItemProvider implements IFeedItemProvider {
ConcurrentLinkedQueue<String> itemQueue = new ConcurrentLinkedQueue<String>();
@Override
public Runnable getRunnableTask() {
return new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
itemQueue.offer(MESSAGE);
}
};
}
@Override
public Object getNextItemIfAvailable() {
return itemQueue.poll();
}
}
@Test(enabled = true)
public void testEqualsOfKeyedMessage() {
KeyedMessage<String, String>
data1 =
new KeyedMessage<String, String>("foo", "bar");
KeyedMessage<String, String>
data2 =
new KeyedMessage<String, String>(
new String("foo".getBytes()), new String("bar".getBytes()));
assert data1.equals(data2);
}
@Test(enabled = true)
public void testItemsProducedByFeedProviderAreSentToKafka() {
Capture<KeyedMessage<String, String>> capturedArgument =
new Capture<KeyedMessage<String, String>> ();
@SuppressWarnings("unchecked")
Producer<String, String> producer = createMock(Producer.class);
producer.send(capture(capturedArgument));
expectLastCall();
ExternalFeedToKafkaAdapterSpout spout =
EasyMock.createMockBuilder(ExternalFeedToKafkaAdapterSpout.class).
addMockedMethod("setupProducer").createMock();
expect(spout.setupProducer()).andReturn(producer);
replay(producer);
replay(spout);
verifyNextTupleReceivesItemFromProviderAndSendsToKafkaProducer(spout);
verify(producer);
verify(spout);
KeyedMessage<String, String> got = capturedArgument.getValue();
assert got.message().contains(MESSAGE);
}
private void verifyNextTupleReceivesItemFromProviderAndSendsToKafkaProducer(
ExternalFeedToKafkaAdapterSpout spout)
{
spout.setFeedProvider(new TestItemProvider());
spout.setTopicName(TOPIC);
spout.open(null, null, null);
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace(); // do something more meaningful here?
}
spout.nextTuple();
}
}
}