/**
* vips Inc. Copyright (c) 2016 All Rights Reserved.
*/
package com.vip.saturn.it.impl;
import static org.assertj.core.api.Assertions.fail;
import java.io.File;
import org.apache.commons.exec.OS;
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.SaturnAutoBasic.FinishCheck;
import com.vip.saturn.job.executor.Main;
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 com.vip.saturn.job.utils.ScriptPidUtils;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ZUpgradeIT extends AbstractSaturnIT {
public static String LONG_TIME_SH_PATH;
@BeforeClass
public static void setUp() throws Exception {
startNamespaceShardingManagerList(1);
File file1 = new File("src/test/resources/script/normal/longtime.sh");
LONG_TIME_SH_PATH = file1.getAbsolutePath();
}
@AfterClass
public static void tearDown() throws Exception {
stopExecutorList();
stopNamespaceShardingManagerList();
}
@Test
public void test_A() throws Exception {
if (!OS.isFamilyUnix()) {
return;
}
startOneNewExecutorList();
final int shardCount = 3;
final String jobName = "upgradeITJob";
JobConfiguration jobConfiguration = new JobConfiguration(jobName);
jobConfiguration.setCron("0 0 1 * * ?");
jobConfiguration.setJobType(JobType.SHELL_JOB.toString());
jobConfiguration.setShardingTotalCount(shardCount);
jobConfiguration.setShardingItemParameters(
"0=sh " + LONG_TIME_SH_PATH + ",1=sh " + LONG_TIME_SH_PATH + ",2=sh " + LONG_TIME_SH_PATH);
addJob(jobConfiguration);
Thread.sleep(1000);
enableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
runAtOnce(jobName);
Thread.sleep(2000);
stopExecutor(0);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
for (int i = 0; i < saturnExecutorList.size(); i++) {
Main saturnContainer = saturnExecutorList.get(i);
for (int j = 0; j < shardCount; j++) {
long pid = ScriptPidUtils.getFirstPidFromFile(saturnContainer.getExecutorName(), jobName, ""+j);
if (pid > 0 && ScriptPidUtils.isPidRunning(pid)) {
return false;
}
}
}
return true;
}
}, 10);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
removeJob(jobConfiguration.getJobName());
Thread.sleep(2000);
forceRemoveJob(jobName);
}
@Test
public void test_B() throws Exception {
if (!OS.isFamilyUnix()) {
return;
}
startOneNewExecutorList();
final int shardCount = 3;
final String jobName = "upgradeITJob2";
JobConfiguration jobConfiguration = new JobConfiguration(jobName);
jobConfiguration.setCron("0 0 1 * * ?");
jobConfiguration.setJobType(JobType.SHELL_JOB.toString());
jobConfiguration.setShardingTotalCount(shardCount);
jobConfiguration.setShardingItemParameters(
"0=sh " + LONG_TIME_SH_PATH + ",1=sh " + LONG_TIME_SH_PATH + ",2=sh " + LONG_TIME_SH_PATH);
addJob(jobConfiguration);
Thread.sleep(1000);
enableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
runAtOnce(jobName);
Thread.sleep(1000);
disableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
stopExecutor(0);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
for (int i = 0; i < saturnExecutorList.size(); i++) {
Main saturnContainer = saturnExecutorList.get(i);
if (saturnContainer != null && isOnline(saturnContainer.getExecutorName())) {
return false;
}
}
return true;
}
}, 10);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
for (int i = 0; i < saturnExecutorList.size(); i++) {
Main saturnContainer = saturnExecutorList.get(i);
for (int j = 0; j < shardCount; j++) {
long pid = ScriptPidUtils.getFirstPidFromFile(saturnContainer.getExecutorName(), jobName, ""+j);
if (pid <= 0 || !ScriptPidUtils.isPidRunning(pid)) {
fail(pid + "should running");
}
}
}
startOneNewExecutorList();
Thread.sleep(2000);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
for (int j = 0; j < shardCount; j++) {
if (!regCenter
.isExisted(JobNodePath.getNodeFullPath(jobName, ExecutionNode.getRunningNode(j)))) {
return false;
}
}
return true;
}
}, 10);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
disableJob(jobConfiguration.getJobName());
Thread.sleep(1000);
forceStopJob(jobName);
Thread.sleep(1000);
try {
waitForFinish(new FinishCheck() {
@Override
public boolean docheck() {
for (int j = 0; j < shardCount; j++) {
if (!regCenter
.isExisted(JobNodePath.getNodeFullPath(jobName, ExecutionNode.getCompletedNode(j)))) {
return false;
}
}
return true;
}
}, 10);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
removeJob(jobConfiguration.getJobName());
Thread.sleep(2000);
forceRemoveJob(jobName);
}
}