package stormapplied.heatmap.topology;
import backtype.storm.Config;
import backtype.storm.ILocalCluster;
import backtype.storm.testing.*;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import com.google.code.geocoder.model.LatLng;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Map;
import static backtype.storm.Testing.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static stormapplied.heatmap.topology.StormTopologyBuilder.*;
public class TopologyTest {
private static final String FEEDER_SPOUT_ID = "feeder-spout";
@Test
public void verifyProperValuesAreEmittedByEachBolt() {
MkClusterParam clusterParam = new MkClusterParam();
clusterParam.setSupervisors(1);
withSimulatedTimeLocalCluster(clusterParam, new TestJob() {
@Override
public void run(ILocalCluster cluster) {
MockedSources mockedSources = new MockedSources();
mockedSources.addMockData(CHECKINS_ID, new Values(1382904793783L, "287 Hudson St New York NY 10013"));
Config config = new Config();
config.setDebug(true);
CompleteTopologyParam topologyParam = new CompleteTopologyParam();
topologyParam.setMockedSources(mockedSources);
topologyParam.setStormConf(config);
LatLng latLng = new LatLng("40.725612", "-74.00791599999999");
ArrayList<LatLng> latLngList = new ArrayList<LatLng>();
latLngList.add(latLng);
Map result = completeTopology(cluster, StormTopologyBuilder.build(), topologyParam);
assertTrue(multiseteq(new Values(new Values(1382904793783L, "287 Hudson St New York NY 10013")), readTuples(result, CHECKINS_ID)));
assertTrue(multiseteq(new Values(new Values(1382904793783L, latLng)), readTuples(result, GEOCODE_LOOKUP_ID)));
assertTrue(multiseteq(new Values(new Values(92193652L, latLngList)), readTuples(result, HEATMAP_BUILDER_ID)));
assertTrue(multiseteq(new Values(), readTuples(result, PERSISTOR_ID)));
}
});
}
@Test
public void verifySpoutTuplesAreFullyAcked() {
withTrackedCluster(new TestJob() {
@Override
public void run(ILocalCluster cluster) throws Exception {
AckTracker ackTracker = new AckTracker();
FeederSpout feederSpout = new FeederSpout(new Fields("time", "address"));
feederSpout.setAckFailDelegate(ackTracker);
TrackedTopology trackedTopology = mkTrackedTopology(cluster, StormTopologyBuilder.buildWithSpout(FEEDER_SPOUT_ID, feederSpout));
cluster.submitTopology("test-acking", new Config(), trackedTopology.getTopology());
feederSpout.feed(new Values(1382904793783L, "287 Hudson St New York NY 10013"));
feederSpout.feed(new Values(1382904793783L, "287 Hudson St New York NY 10013"));
feederSpout.feed(new Values(1382904793783L, "287 Hudson St New York NY 10013"));
feederSpout.feed(new Values(1382904793783L, "287 Hudson St New York NY 10013"));
trackedWait(trackedTopology, 4);
assertEquals(4, ackTracker.getNumAcks());
ackTracker.resetNumAcks();
feederSpout.feed(new Values(1382904793783L, "287 Hudson St New York NY 10013"));
trackedWait(trackedTopology, 1);
assertEquals(1, ackTracker.getNumAcks());
ackTracker.resetNumAcks();
}
});
}
}