package org.radargun.stages.topology; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import org.radargun.DistStageAck; import org.radargun.StageResult; import org.radargun.traits.Lifecycle; import org.radargun.traits.TopologyHistory; import org.radargun.util.CacheStageRunner; import org.radargun.util.CacheTraitRepository; import org.radargun.utils.Utils; import org.testng.Assert; import org.testng.annotations.Test; /** * @author Matej Cimbora */ @Test(timeOut = 30000) public class WaitForTopologySettleTest { public void smokeTest() throws Exception { CacheStageRunner stageRunner = new CacheStageRunner(1); Lifecycle lifecycle = stageRunner.getTraitImpl(Lifecycle.class); lifecycle.start(); WaitForTopologySettleStage waitForTopologySettleStage = new WaitForTopologySettleStage(); waitForTopologySettleStage.period = 3000; CacheTraitRepository.TopologyHistory topologyHistory = (CacheTraitRepository.TopologyHistory) stageRunner.getTraitImpl(TopologyHistory.class); Assert.assertTrue(topologyHistory.getTopologyChangeHistory(null).isEmpty()); Assert.assertTrue(topologyHistory.getRehashHistory(null).isEmpty()); Assert.assertTrue(topologyHistory.getCacheStatusChangeHistory(null).isEmpty()); topologyHistory.triggerHistoryChanges(0, 1000, TimeUnit.MILLISECONDS); Utils.sleep(1000); List<DistStageAck> acks = new ArrayList<>(1); Thread stageThread = new Thread(() -> { try { acks.add(stageRunner.executeOnSlave(waitForTopologySettleStage, 0)); } catch (Exception e) { throw new IllegalStateException(e); } }); stageThread.start(); topologyHistory.stopHistoryChanges(); stageThread.join(10000); Assert.assertFalse(topologyHistory.getTopologyChangeHistory(null).isEmpty()); Assert.assertFalse(topologyHistory.getRehashHistory(null).isEmpty()); Assert.assertFalse(topologyHistory.getCacheStatusChangeHistory(null).isEmpty()); Assert.assertEquals(stageRunner.processAckOnMaster(waitForTopologySettleStage, acks), StageResult.SUCCESS); } }