@Test
public void testSubmitInactiveTopology() throws Exception {
try (LocalCluster cluster = new LocalCluster.Builder()
.withSimulatedTime()
.withDaemonConf(Collections.singletonMap(Config.TOPOLOGY_ENABLE_MESSAGE_TIMEOUTS, true))
.build()) {
FeederSpout feeder = new FeederSpout(new Fields("field1"));
AckFailMapTracker tracker = new AckFailMapTracker();
feeder.setAckFailDelegate(tracker);
Map<String, SpoutDetails> spoutMap = new HashMap<>();
spoutMap.put("1", Thrift.prepareSpoutDetails(feeder));
spoutMap.put("2", Thrift.prepareSpoutDetails(new OpenTrackedSpout()));
Map<String, BoltDetails> boltMap = new HashMap<>();
boltMap.put("3", Thrift.prepareBoltDetails(Collections.singletonMap(Utils.getGlobalStreamId("1", null), Thrift.prepareGlobalGrouping()), new PrepareTrackedBolt()));
boltPrepared = false;
spoutOpened = false;
StormTopology topology = Thrift.buildTopology(spoutMap, boltMap);
cluster.submitTopologyWithOpts("test", Collections.singletonMap(Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS, 10), topology, new SubmitOptions(TopologyInitialStatus.INACTIVE));
cluster.advanceClusterTime(11);
feeder.feed(new Values("a"), 1);
cluster.advanceClusterTime(9);
assertThat(boltPrepared, is(false));
assertThat(spoutOpened, is(false));
cluster.getNimbus().activate("test");
cluster.advanceClusterTime(12);
assertAcked(tracker, 1);
assertThat(boltPrepared, is(true));
assertThat(spoutOpened, is(true));
}
}