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 org.apache.commons.exec.OS; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; import java.io.File; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class LocalModeIT extends AbstractSaturnIT { public static String NORMAL_SH_PATH; @BeforeClass public static void setUp() throws Exception { startNamespaceShardingManagerList(1); startExecutorList(2); File file1 = new File("src/test/resources/script/normal/normal_0.sh"); NORMAL_SH_PATH = file1.getAbsolutePath(); } @AfterClass public static void tearDown() throws Exception { stopExecutorList(); stopNamespaceShardingManagerList(); } @Test public void test_A() throws Exception { if (!OS.isFamilyUnix()) { return; } final JobConfiguration jobConfiguration = new JobConfiguration("shLocalModeJob"); jobConfiguration.setCron("*/2 * * * * ?"); jobConfiguration.setJobType(JobType.SHELL_JOB.toString()); jobConfiguration.setProcessCountIntervalSeconds(1); jobConfiguration.setShardingItemParameters("*=sh " + NORMAL_SH_PATH); jobConfiguration.setLocalMode(true); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobConfiguration.getJobName()); Thread.sleep(1000); startOneNewExecutorList(); Thread.sleep(1000); waitForFinish(new FinishCheck(){ @Override public boolean docheck() { for(Main executor:saturnExecutorList){ String count = getJobNode(jobConfiguration, "servers/" + executor.getExecutorName() + "/processSuccessCount"); System.out.println("count:"+count+";executor:"+executor.getExecutorName()); if(count == null) return false; int times = Integer.parseInt(count); if(times <= 0) return false; } return true; } },10); disableJob(jobConfiguration.getJobName()); removeJob(jobConfiguration.getJobName()); Thread.sleep(1000); forceRemoveJob(jobConfiguration.getJobName()); } @Test public void test_B() throws Exception { int shardCount = 3; String jobName = "javaLocalModeJob"; for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; SimpleJavaJob.statusMap.put(key, 0); } final JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setCron("0/1 * * * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setProcessCountIntervalSeconds(1); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingItemParameters("*=0"); jobConfiguration.setLocalMode(true); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobConfiguration.getJobName()); Thread.sleep(1 * 1000); waitForFinish(new FinishCheck() { @Override public boolean docheck() { for (Main executor : saturnExecutorList) { String count = getJobNode(jobConfiguration, "servers/" + executor.getExecutorName() + "/processSuccessCount"); System.out.println("count:" + count + ";executor:" + executor.getExecutorName()); if (count == null) return false; int times = Integer.parseInt(count); if (times <= 0) return false; } return true; } }, 60); disableJob(jobName); removeJob(jobConfiguration.getJobName()); Thread.sleep(1000); forceRemoveJob(jobName); } @Test public void test_C_withPreferList() throws Exception { int shardCount = 3; String jobName = "javaLocalModeWithPreferListJob"; for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; SimpleJavaJob.statusMap.put(key, 0); } final Main preferExecutor = saturnExecutorList.get(0); final JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setCron("0/1 * * * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setProcessCountIntervalSeconds(1); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingItemParameters("*=0"); jobConfiguration.setLocalMode(true); jobConfiguration.setPreferList(preferExecutor.getExecutorName()); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobConfiguration.getJobName()); Thread.sleep(1 * 1000); waitForFinish(new FinishCheck() { @Override public boolean docheck() { String count0 = getJobNode(jobConfiguration, "servers/" + preferExecutor.getExecutorName() + "/processSuccessCount"); System.out.println("count:" + count0 + ";executor:" + preferExecutor.getExecutorName()); if (count0 == null) return false; int times0 = Integer.parseInt(count0); if (times0 <= 0) return false; for (int i = 1; i < saturnExecutorList.size(); i++) { Main executor = saturnExecutorList.get(i); String count = getJobNode(jobConfiguration, "servers/" + executor.getExecutorName() + "/processSuccessCount"); System.out.println("count:" + count + ";executor:" + executor.getExecutorName()); if (count != null) { int times = Integer.parseInt(count); if (times != 0) return false; } } return true; } }, 30); disableJob(jobName); removeJob(jobConfiguration.getJobName()); Thread.sleep(1000); forceRemoveJob(jobName); } }