package com.vip.saturn.it.impl; import com.vip.saturn.it.AbstractSaturnIT; import com.vip.saturn.it.JobType; import com.vip.saturn.it.job.SimpleJavaJob; import com.vip.saturn.job.executor.Main; import com.vip.saturn.job.internal.config.JobConfiguration; import com.vip.saturn.job.internal.sharding.ShardingNode; import com.vip.saturn.job.internal.storage.JobNodePath; import com.vip.saturn.job.sharding.node.SaturnExecutorsNode; import com.vip.saturn.job.utils.ItemUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; /** * @author hebelala */ public class ShardingWithChangingLeaderIT extends AbstractSaturnIT { @BeforeClass public static void setUp() throws Exception { } @AfterClass public static void tearDown() throws Exception { } @Test public void test_A_StopNamespaceShardingManagerLeader() throws Exception { String jobName = "test_A_StopNamespaceShardingManagerLeader"; final JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setCron("* * 1 * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingTotalCount(1); jobConfiguration.setShardingItemParameters("0=0"); addJob(jobConfiguration); Thread.sleep(1000); Main executor = startOneNewExecutorList(); Thread.sleep(1000); startNamespaceShardingManagerList(2); Thread.sleep(1000); assertThat(regCenter.get(SaturnExecutorsNode.LEADER_HOSTNODE_PATH)).isEqualTo("127.0.0.1-0"); stopNamespaceShardingManager(0); Thread.sleep(1000); assertThat(regCenter.get(SaturnExecutorsNode.LEADER_HOSTNODE_PATH)).isEqualTo("127.0.0.1-1"); enableJob(jobConfiguration.getJobName()); Thread.sleep(1000); runAtOnce(jobName); Thread.sleep(1000); waitForFinish(new FinishCheck() { @Override public boolean docheck() { if (isNeedSharding(jobConfiguration)) { return false; } return true; } }, 10); List<Integer> items = ItemUtils.toItemList( regCenter.getDirectly(JobNodePath.getNodeFullPath(jobName, ShardingNode.getShardingNode(executor.getExecutorName())))); assertThat(items).contains(0); disableJob(jobName); removeJob(jobName); stopExecutorList(); stopNamespaceShardingManagerList(); Thread.sleep(2000); forceRemoveJob(jobName); } }