Files
VisualSapfor/src/TestingSystem/SAPFOR/SapforTestingPlanner.java

144 lines
5.7 KiB
Java
Raw Normal View History

2023-12-15 18:10:27 +03:00
package TestingSystem.SAPFOR;
import Common.Constants;
import Common.Current;
import Common.Global;
import Common.GlobalProperties;
import Common.Utils.Utils;
import Repository.Server.ServerCode;
import TestingSystem.Common.TasksPackageState;
import TestingSystem.Common.TestingPlanner;
import TestingSystem.SAPFOR.Json.SapforConfiguration_json;
import TestingSystem.SAPFOR.Json.SapforTest_json;
import TestingSystem.SAPFOR.Json.SapforTestingSet_json;
import TestingSystem.SAPFOR.SapforPackage.SapforPackage;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Date;
public class SapforTestingPlanner extends TestingPlanner<SapforPackage> {
File workspace;
@Override
protected ServerCode getActivePackagesCode() {
return ServerCode.GetFirstActiveSapforPackages;
}
@Override
protected ServerCode getCheckIfNeedsKillCode() {
return ServerCode.SapforPackageNeedsKill;
}
@Override
protected TasksPackageState getStateAfterStart() {
return TasksPackageState.RunningExecution;
}
@Override
protected void InitSessionCredentials() {
workspace = testingPackage.getLocalWorkspace();
}
@Override
protected void TestsSynchronize() throws Exception {
testingPackage.readJson();
//--
for (SapforTestingSet_json set_json : testingPackage.package_json.testingSets) {
File setWorkspace = new File(workspace, String.valueOf(set_json.id));
FileUtils.forceMkdir(setWorkspace);
//копирование тестов по конфигурациям.
for (SapforConfiguration_json configuration_json : set_json.configurations) {
//--
File configurationWorkspace = new File(setWorkspace, String.valueOf(configuration_json.id));
FileUtils.forceMkdir(configurationWorkspace);
//--->>>
for (SapforTest_json test_json : set_json.tests) {
File test_root = new File(configurationWorkspace, test_json.description);
Utils.CheckAndCleanDirectory(test_root);
FileUtils.copyDirectory(new File(Global.TestsDirectory, String.valueOf(test_json.id)), test_root);
}
}
}
}
@Override
protected void PackageWorkspaceCreation() throws Exception {
//копирование визуализатора
File visualiser = new File(workspace, "VisualSapfor.jar");
FileUtils.copyFile(new File(Global.Home, "TestingSystem.jar"), visualiser);
//создание настроек
GlobalProperties properties = new GlobalProperties(Global.properties);
properties.Mode = Current.Mode.Package;
Utils.jsonToFile(properties, new File(workspace, "properties"));
//подготовка пакетного режима. Запустит его уже очередь.
Utils.createScript(workspace, workspace, "start", "java -jar VisualSapfor.jar");
}
@Override
protected void PackageStart() throws Exception {
File script = new File(workspace, "start");
ProcessBuilder procBuilder = new ProcessBuilder(script.getAbsolutePath());
procBuilder.directory(workspace);
procBuilder.start();
//--->>
File started = new File(workspace, Constants.STARTED);
while (!started.exists()) {
Print("waiting for package start...");
Utils.sleep(1000);
}
File pid = new File(workspace, "PID");
testingPackage.PID = FileUtils.readFileToString(pid, Charset.defaultCharset());
}
@Override
protected boolean CheckNextState() throws Exception {
boolean progress_changed = false;
boolean state_changed = false;
//--
File workspace = testingPackage.getLocalWorkspace();
//--
File progress = new File(workspace, "progress");
if (progress.exists()) {
String s = FileUtils.readFileToString(progress);
int current_progress = Integer.parseInt(s);
if (current_progress != testingPackage.progress) {
Print("progress changed: " + current_progress);
testingPackage.progress = current_progress;
progress_changed = true;
}
}
//--
File done = new File(workspace, Constants.DONE);
File aborted = new File(workspace, Constants.ABORTED);
if (done.exists()) {
testingPackage.state = TasksPackageState.Analysis;
state_changed = true;
} else if (aborted.exists()) {
testingPackage.state = TasksPackageState.Aborted;
state_changed = true;
}
return progress_changed || state_changed;
}
@Override
protected void DownloadResults() throws Exception {
//не требуется.
}
@Override
protected void AnalyseResults() throws Exception {
//не требуется.
testingPackage.progress = 100;
}
@Override
protected void Kill() throws Exception {
File workspace = testingPackage.getLocalWorkspace();
//----
File interrupt_file = new File(workspace, Constants.INTERRUPT);
//----
FileUtils.writeStringToFile(interrupt_file, new Date().toString());
File aborted_file = new File(workspace, Constants.ABORTED);
do {
Print("waiting for interrupt...");
Thread.sleep(1000);
} while (!aborted_file.exists());
Print("coup de grace..");
String kill_command = "killall -SIGKILL " + testingPackage.PID;
Print(kill_command);
Process killer = Runtime.getRuntime().exec(kill_command);
killer.waitFor();
Print("done!");
}
//--
2023-12-15 18:10:27 +03:00
}