package com.vip.saturn.it.impl;
import static org.assertj.core.api.Assertions.fail;
import java.util.Collection;
import com.vip.saturn.it.job.SimpleJavaJob;
import org.junit.*;
import org.junit.runners.MethodSorters;
import com.vip.saturn.it.AbstractSaturnIT;
import com.vip.saturn.it.JobType;
import com.vip.saturn.it.job.LongtimeJavaJob;
import com.vip.saturn.job.basic.ShutdownHandler;
import com.vip.saturn.job.internal.config.JobConfiguration;
import com.vip.saturn.job.utils.SystemEnvProperties;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ShutdownGracefullyIT extends AbstractSaturnIT {
@BeforeClass
public static void setUp() throws Exception {
startNamespaceShardingManagerList(1);
}
@AfterClass
public static void tearDown() throws Exception {
// stopExecutorList();
stopNamespaceShardingManagerList();
}
@Before
public void before() {
LongtimeJavaJob.statusMap.clear();
}
@After
public void after() {
LongtimeJavaJob.statusMap.clear();
}
@Test
public void test_A_JavaJob() throws Exception {
SystemEnvProperties.VIP_SATURN_SHUTDOWN_TIMEOUT = 40;
startExecutorList(1);
final int shardCount = 3;
final String jobName = "timeoutITJobJava";
for (int i = 0; i < shardCount; i++) {
String key = jobName + "_" + i;
LongtimeJavaJob.JobStatus status = new LongtimeJavaJob.JobStatus();
status.runningCount = 0;
status.sleepSeconds = 30;
status.finished = false;
status.timeout = false;
LongtimeJavaJob.statusMap.put(key, status);
}
JobConfiguration jobConfiguration = new JobConfiguration(jobName);
jobConfiguration.setCron("0 0 1 * * ?");
jobConfiguration.setJobType(JobType.JAVA_JOB.toString());
jobConfiguration.setJobClass(LongtimeJavaJob.class.getCanonicalName());
jobConfiguration.setShardingTotalCount(shardCount);
jobConfiguration.setShardingItemParameters("0=0,1=1,2=2");
addJob(jobConfiguration);
Thread.sleep(1000);
enableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
runAtOnce(jobName);
new ShutdownHandler(false).handle(null);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
Collection<LongtimeJavaJob.JobStatus> values = LongtimeJavaJob.statusMap.values();
for (LongtimeJavaJob.JobStatus status : values) {
if (!status.finished) {
return false;
}
}
return true;
}
}, 10);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
@Test
public void test_B_JavaJob() throws Exception {
SystemEnvProperties.VIP_SATURN_SHUTDOWN_TIMEOUT = 70;
startExecutorList(1);
final int shardCount = 3;
final String jobName = "gracefulShutdownItJobJava";
for (int i = 0; i < shardCount; i++) {
String key = jobName + "_" + i;
LongtimeJavaJob.JobStatus status = new LongtimeJavaJob.JobStatus();
status.runningCount = 0;
status.sleepSeconds = 62;
status.finished = false;
status.timeout = false;
LongtimeJavaJob.statusMap.put(key, status);
}
JobConfiguration jobConfiguration = new JobConfiguration(jobName);
jobConfiguration.setCron("0 0 1 * * ?");
jobConfiguration.setJobType(JobType.JAVA_JOB.toString());
jobConfiguration.setJobClass(LongtimeJavaJob.class.getCanonicalName());
jobConfiguration.setShardingTotalCount(shardCount);
jobConfiguration.setShardingItemParameters("0=0,1=1,2=2");
addJob(jobConfiguration);
Thread.sleep(1000);
enableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
runAtOnce(jobName);
new ShutdownHandler(false).handle(null);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
Collection<LongtimeJavaJob.JobStatus> values = LongtimeJavaJob.statusMap.values();
for (LongtimeJavaJob.JobStatus status : values) {
if (!status.finished) {
return false;
}
}
return true;
}
}, 5);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}