package com.vip.saturn.it.impl; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import java.util.Calendar; import java.util.TimeZone; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Test; import com.vip.saturn.it.AbstractSaturnIT; import com.vip.saturn.it.JobType; import com.vip.saturn.it.job.SimpleJavaJob; import com.vip.saturn.job.internal.config.JobConfiguration; import com.vip.saturn.job.internal.execution.ExecutionNode; import com.vip.saturn.job.internal.storage.JobNodePath; import org.junit.runners.MethodSorters; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class UpdateConfigIT extends AbstractSaturnIT { @BeforeClass public static void setUp() throws Exception { startNamespaceShardingManagerList(1); startExecutorList(1); } @AfterClass public static void tearDown() throws Exception { stopExecutorList(); stopNamespaceShardingManagerList(); } @Test public void updateCron() throws InterruptedException { int shardCount = 1; String jobName = "updateConfigITJob"; for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; SimpleJavaJob.statusMap.put(key, 0); } JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setTimeZone(TimeZone.getDefault().getID()); jobConfiguration.setCron("0/2 * * * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingTotalCount(shardCount); jobConfiguration.setShardingItemParameters("0=0"); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobName); Thread.sleep(3 * 1000); disableJob(jobName); Thread.sleep(2 * 1000); for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; assertThat(SimpleJavaJob.statusMap.get(key)).isGreaterThanOrEqualTo(1); } updateJobNode(jobConfiguration, "config/cron", "0/1 * * * * ?"); Thread.sleep(1000); enableJob(jobName); Thread.sleep(2 * 1000); for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; assertThat(SimpleJavaJob.statusMap.get(key)).isGreaterThanOrEqualTo(2); } SimpleJavaJob.statusMap.clear(); disableJob(jobName); Thread.sleep(1000); removeJob(jobName); Thread.sleep(2000); } @Test public void updatePauseDate() throws InterruptedException { int shardCount = 1; String jobName = "updatePauseDate"; for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; SimpleJavaJob.statusMap.put(key, 0); } JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setTimeZone(TimeZone.getDefault().getID()); jobConfiguration.setCron("0/1 * * * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingTotalCount(shardCount); jobConfiguration.setShardingItemParameters("0=0"); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobName); Thread.sleep(2 * 1000); disableJob(jobName); Thread.sleep(2 * 1000); for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; assertThat(SimpleJavaJob.statusMap.get(key)).isGreaterThanOrEqualTo(1); } for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; SimpleJavaJob.statusMap.put(key, 0); } int month = Calendar.getInstance().get(Calendar.MONTH) + 1; String pauseDate = month + "/" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "-" + month + "/" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH); String pauseTime = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ":00" + "-" + Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ":59"; updateJobNode(jobConfiguration, "config/pausePeriodDate", pauseDate); updateJobNode(jobConfiguration, "config/pausePeriodTime", pauseTime); Thread.sleep(1000); enableJob(jobConfiguration.getJobName()); Thread.sleep(2 * 1000); for (int i = 0; i < shardCount; i++) { String key = jobName + "_" + i; assertThat(SimpleJavaJob.statusMap.get(key)).isEqualTo(0); } SimpleJavaJob.statusMap.clear(); disableJob(jobName); removeJob(jobName); Thread.sleep(2000); } /** * 作业配置正常显示日志时,zk的jobLog会有执行日志的IT * * @throws InterruptedException */ @Test public void updateShowNormalLog() throws InterruptedException { final int shardCount = 1; final String jobName = "updateShowNormalLog"; JobConfiguration jobConfiguration = new JobConfiguration(jobName); jobConfiguration.setTimeZone(TimeZone.getDefault().getID()); jobConfiguration.setCron("0/1 * * * * ?"); jobConfiguration.setJobType(JobType.JAVA_JOB.toString()); jobConfiguration.setJobClass(SimpleJavaJob.class.getCanonicalName()); jobConfiguration.setShardingTotalCount(shardCount); jobConfiguration.setShardingItemParameters("0=0"); addJob(jobConfiguration); Thread.sleep(1000); enableJob(jobName); Thread.sleep(2 * 1000); for (int i = 0; i < shardCount; i++) { String path = JobNodePath.getNodeFullPath(jobName, ExecutionNode.getJobLog(i)); assertThat(regCenter.isExisted(path)).isEqualTo(false); } disableJob(jobName); Thread.sleep(2 * 1000); updateJobNode(jobConfiguration, "config/showNormalLog", "true"); Thread.sleep(1 * 1000); enableJob(jobConfiguration.getJobName()); Thread.sleep(2000); doReport(jobConfiguration); try { waitForFinish(new FinishCheck() { @Override public boolean docheck() { for (int i = 0; i < shardCount; i++) { String path = JobNodePath.getNodeFullPath(jobName, ExecutionNode.getJobLog(i)); if (regCenter.isExisted(path)) { assertThat(regCenter.getDirectly(path)).isNotEmpty(); continue; } return false; } return true; } }, 10); } catch (Exception e) { e.printStackTrace(); fail(e.getMessage()); } disableJob(jobName); removeJob(jobName); Thread.sleep(2000); } }