package org.atomnuke;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.atomnuke.atom.model.Entry;
import org.atomnuke.atom.model.Feed;
import org.atomnuke.atom.model.builder.FeedBuilder;
import org.atomnuke.sink.AtomSink;
import org.atomnuke.plugin.env.NopInstanceEnvironment;
import org.atomnuke.sink.AtomSinkException;
import org.atomnuke.sink.AtomSinkResult;
import org.atomnuke.sink.SinkResult;
import org.atomnuke.plugin.context.InstanceContextImpl;
import org.atomnuke.source.AtomSource;
import org.atomnuke.source.AtomSourceException;
import org.atomnuke.source.result.AtomSourceResult;
import org.atomnuke.source.result.AtomSourceResultImpl;
import org.atomnuke.task.atom.AtomTask;
import org.atomnuke.task.context.AtomTaskContext;
import org.atomnuke.lifecycle.InitializationException;
import org.atomnuke.util.TimeValue;
import org.junit.Test;
/**
*
* @author zinic
*/
public class NukeKernelTest {
@Test
public void nukeShakedownTest() throws Exception {
final NukeKernel nukeKernel = new NukeKernel();
final AtomicLong eventsProcessed = new AtomicLong(0);
final AtomSource source = new AtomSource() {
@Override
public AtomSourceResult poll() throws AtomSourceException {
return new AtomSourceResultImpl(new FeedBuilder().build());
}
@Override
public void init(AtomTaskContext tc) throws InitializationException {
}
@Override
public void destroy() {
}
};
final AtomSink sink = new AtomSink() {
@Override
public SinkResult entry(Entry entry) throws AtomSinkException {
eventsProcessed.incrementAndGet();
return AtomSinkResult.ok();
}
@Override
public SinkResult feedPage(Feed page) throws AtomSinkException {
eventsProcessed.incrementAndGet();
return AtomSinkResult.ok();
}
@Override
public void init(AtomTaskContext tc) throws InitializationException {
}
@Override
public void destroy() {
}
};
for (int taskId = 1; taskId <= 30; taskId++) {
final AtomTask task = nukeKernel.follow(source, new TimeValue(10 * taskId, TimeUnit.MICROSECONDS));
task.addSink(new InstanceContextImpl<AtomSink>(NopInstanceEnvironment.getInstance(), sink));
}
nukeKernel.start();
Thread.sleep(1000);
nukeKernel.destroy();
System.out.println("Processed " + eventsProcessed.get() + " feed events in one second.");
}
}