Files
VisualSapfor/src/SapforTestingSystem/SapforTestingPlaner/SapforTestingPlanner.java

52 lines
2.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package SapforTestingSystem.SapforTestingPlaner;
import Common.Global;
import Common.Utils.Utils;
import SapforTestingSystem.Json.SapforPackage_json;
import SapforTestingSystem.Json.SapforScenario_json;
import SapforTestingSystem.PerformSapforTask;
import SapforTestingSystem.SapforTask.SapforTask;
import SapforTestingSystem.ThreadsPlanner.ThreadsPlanner;
import java.io.File;
import java.util.Vector;
public class SapforTestingPlanner extends ThreadsPlanner {
SapforScenario_json scenario_json = null;
Vector<SapforTask> tasks = new Vector<>();
public SapforTestingPlanner() throws Exception {
super(Global.properties.threadsTimeout, Global.properties.threadsNum);
scenario_json = (SapforScenario_json) Utils.jsonFromFile(new File(Global.Home, "scenario.txt"), SapforScenario_json.class);
//формирование списка задач.
File sapfor_drv = new File(Global.Home, scenario_json.sapfor_drv);
for (SapforPackage_json sapforPackage_json : scenario_json.packages) {
for (String testName : scenario_json.tests) {
//--- чтобы было можно на нее сослаться после выполнения всех нитей.
SapforTask task = new SapforTask();
tasks.add(task);
//---
addThread(() -> new PerformSapforTask().Do(
sapfor_drv,
sapforPackage_json,
testName,
task
));
}
}
interruptThread.start();
}
@Override
public void Interrupt() throws Exception {
System.out.println("killing " + scenario_json.sapfor_drv + "...");
String kill_command = Global.isWindows ? ("taskkill /FI \"IMAGENAME eq " + scenario_json.sapfor_drv + "\" /F /T") :
("killall -SIGKILL " + scenario_json.sapfor_drv);
Process killer = Runtime.getRuntime().exec(kill_command);
killer.waitFor();
System.out.println("done!");
//todo для надежности сделать еще один kill с внешнего процесса.
// может быть гонка, что нить успеет запустить процесс уже после интеррупта.
}
@Override
protected void finalize() {
System.exit(0);
}
}