package com.vip.saturn.it.impl; import org.apache.curator.framework.CuratorFramework; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; 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.sharding.node.SaturnExecutorsNode; import com.vip.saturn.job.utils.SystemEnvProperties; /** * Created by xiaopeng.he on 2016/8/22. */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ExecutorCleanIT extends AbstractSaturnIT { @BeforeClass public static void setUp() throws Exception { stopExecutorList(); startNamespaceShardingManagerList(1); } @AfterClass public static void tearDown() throws Exception { stopExecutorList(); stopNamespaceShardingManagerList(); SystemEnvProperties.VIP_SATURN_EXECUTOR_CLEAN = false; } private void assertDelete(final String jobName, final String executorName) throws Exception { waitForFinish(new FinishCheck() { @Override public boolean docheck() { try { return !regCenter.isExisted(SaturnExecutorsNode.getExecutorNodePath(executorName)) && !regCenter.isExisted(SaturnExecutorsNode.getJobServersExecutorNodePath(jobName, executorName)) && !executorName.equals(regCenter.get(SaturnExecutorsNode.getJobConfigPreferListNodePath(jobName))); } catch (Exception e) { e.printStackTrace(); return false; } } }, 10); } private void assertNoDelete(final String jobName, final String executorName) throws Exception { waitForFinish(new FinishCheck() { @Override public boolean docheck() { try { return regCenter.isExisted(SaturnExecutorsNode.getExecutorNodePath(executorName)) && regCenter.isExisted(SaturnExecutorsNode.getJobServersExecutorNodePath(jobName, executorName)) && executorName.equals(regCenter.get(SaturnExecutorsNode.getJobConfigPreferListNodePath(jobName))); } catch (Exception e) { e.printStackTrace(); return false; } } }, 10); } private void assertNoDelete2(final String jobName, final String executorName) throws Exception { waitForFinish(new FinishCheck() { @Override public boolean docheck() { try { return regCenter.isExisted(SaturnExecutorsNode.getExecutorNodePath(executorName)) && regCenter.isExisted(SaturnExecutorsNode.getJobServersExecutorNodePath(jobName, executorName)); } catch (Exception e) { e.printStackTrace(); return false; } } }, 10); } @Test public void test_A_Clean() throws Exception { SystemEnvProperties.VIP_SATURN_EXECUTOR_CLEAN = true; startOneNewExecutorList(); final String executorName = saturnExecutorList.get(0).getExecutorName(); final JobConfiguration job = new JobConfiguration("test_A_Clean"); job.setCron("0/2 * * * * ?"); job.setJobType(JobType.JAVA_JOB.toString()); job.setJobClass(SimpleJavaJob.class.getCanonicalName()); job.setShardingTotalCount(1); job.setShardingItemParameters("0=0"); job.setPreferList(executorName); addJob(job); Thread.sleep(1000); enableJob(job.getJobName()); Thread.sleep(3 * 1000); stopExecutorList(); Thread.sleep(2000); assertDelete(job.getJobName(), executorName); } @Test public void test_B_NoClean() throws Exception { SystemEnvProperties.VIP_SATURN_EXECUTOR_CLEAN = false; startOneNewExecutorList(); final String executorName = saturnExecutorList.get(0).getExecutorName(); final JobConfiguration job = new JobConfiguration("test_B_NoClean"); job.setCron("0/2 * * * * ?"); job.setJobType(JobType.JAVA_JOB.toString()); job.setJobClass(SimpleJavaJob.class.getCanonicalName()); job.setShardingTotalCount(1); job.setShardingItemParameters("0=0"); job.setPreferList(executorName); addJob(job); Thread.sleep(1000); enableJob(job.getJobName()); Thread.sleep(3 * 1000); stopExecutorList(); Thread.sleep(1000); assertNoDelete(job.getJobName(), executorName); } @Test public void test_C_Clean_When_SessionTimeoutAndReconnect() throws Exception { SystemEnvProperties.VIP_SATURN_EXECUTOR_CLEAN = true; startOneNewExecutorList(); final String executorName = saturnExecutorList.get(0).getExecutorName(); final JobConfiguration job = new JobConfiguration("test_C_SessionTimeoutAndReconnect"); job.setCron("0/2 * * * * ?"); job.setJobType(JobType.JAVA_JOB.toString()); job.setJobClass(SimpleJavaJob.class.getCanonicalName()); job.setShardingTotalCount(1); job.setShardingItemParameters("0=0"); job.setPreferList(executorName); addJob(job); Thread.sleep(1000); enableJob(job.getJobName()); Thread.sleep(3 * 1000); killSession((CuratorFramework) getExecutorRegistryCenter(saturnExecutorList.get(0)).getRawClient()); assertDelete(job.getJobName(), executorName); Thread.sleep(40 * 1000); assertNoDelete2(job.getJobName(), executorName); // stopExecutorList(); } }