package resa.evaluation.scheduler; import backtype.storm.Config; import backtype.storm.scheduler.Topologies; import backtype.storm.utils.Utils; import junit.framework.TestCase; import org.apache.curator.framework.CuratorFramework; import resa.util.ResaConfig; import resa.util.TopologyHelper; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class TopologyListenerTest extends TestCase { private TopologyListener topologyListener; private Map<String, Object> conf = ResaConfig.create(true); private CuratorFramework zk; @Override protected void setUp() throws Exception { topologyListener = new TopologyListener(conf); conf.put(ResaConfig.ZK_ROOT_PATH, "/resa"); zk = Utils.newCuratorStarted(conf, (List<String>) conf.get(Config.STORM_ZOOKEEPER_SERVERS), conf.get(Config.STORM_ZOOKEEPER_PORT)); } public void testSynTopologies() throws Exception { Topologies topologies = TopologyHelper.getTopologyDetails(conf); System.out.println("total topology count: " + topologies.getTopologies().size()); topologyListener.synTopologies(topologies); Utils.sleep(10000); String topoId = TopologyHelper.getTopologyId("wc", conf); Map<String, Integer> newAssignment = Collections.singletonMap("split", 5); byte[] data = Utils.serialize(new HashMap<>(newAssignment)); if (zk.checkExists().forPath("/resa/" + topoId) == null) { zk.create().creatingParentsIfNeeded().forPath("/resa/" + topoId, data); System.out.println("Set assignment"); } Utils.sleep(1000); topologyListener.synTopologies(topologies); System.out.println("Reset assignment"); zk.setData().forPath("/resa/" + topoId, data); Utils.sleep(31000); TopologyHelper.killTopology("wc", 0, conf); Utils.sleep(10000); topologies = TopologyHelper.getTopologyDetails(conf); System.out.println("total topology count: " + topologies.getTopologies().size()); topologyListener.synTopologies(topologies); } }