package com.netflix.schlep.annotations;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.netflix.schlep.consumer.IncomingMessage;
import com.netflix.schlep.consumer.MessageConsumer;
import com.netflix.schlep.consumer.MessageConsumerManager;
import com.netflix.schlep.consumer.OneMessageConsumer;
import com.netflix.schlep.guice.SchlepModule;
public class ConsumerTest {
private static final Logger LOG = LoggerFactory.getLogger(ConsumerTest.class);
private static final String CONSUMER_ID = "foo";
@Singleton
public static class MyService {
private MessageConsumer consumer;
private CountDownLatch latch = new CountDownLatch(1);
@Inject
public MyService() {
}
@Consumer(name = CONSUMER_ID, autoStart=true)
public void fooConsume(IncomingMessage message) {
LOG.info(message.getContents(String.class));
latch.countDown();
}
public void waitForCompletion(long timeout, TimeUnit units) throws InterruptedException {
latch.await(timeout, units);
}
}
@Test
@Ignore
public void test() throws Exception {
Injector injector = Guice.createInjector(
new SchlepModule(),
new AbstractModule() {
@Override
protected void configure() {
bind(MyService.class);
}
});
MessageConsumerManager readerManager = injector.getInstance(MessageConsumerManager.class);
OneMessageConsumer consumer = new OneMessageConsumer(CONSUMER_ID);
readerManager.add(consumer);
MyService service = injector.getInstance(MyService.class);
service.waitForCompletion(1, TimeUnit.SECONDS);
Assert.assertEquals(1, consumer.getAckCount());
Assert.assertEquals(1, consumer.getOnNextCount());
}
}