2023-09-26 22:57:18 +03:00
|
|
|
|
package SapforTestingSystem.SapforTestingPlaner;
|
2023-09-30 00:18:44 +03:00
|
|
|
|
import Common.Global;
|
|
|
|
|
|
import Common.Utils.Utils;
|
|
|
|
|
|
import SapforTestingSystem.Json.SapforPackage_json;
|
|
|
|
|
|
import SapforTestingSystem.Json.SapforScenario_json;
|
2023-09-30 22:02:58 +03:00
|
|
|
|
import SapforTestingSystem.PerformSapforTask;
|
|
|
|
|
|
import SapforTestingSystem.SapforTask.SapforTask;
|
2023-09-26 22:57:18 +03:00
|
|
|
|
import SapforTestingSystem.ThreadsPlanner.ThreadsPlanner;
|
2023-09-30 00:18:44 +03:00
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
2023-09-30 22:02:58 +03:00
|
|
|
|
import java.util.Vector;
|
2023-09-26 22:57:18 +03:00
|
|
|
|
public class SapforTestingPlanner extends ThreadsPlanner {
|
2023-09-30 18:19:31 +03:00
|
|
|
|
SapforScenario_json scenario_json = null;
|
2023-09-30 22:02:58 +03:00
|
|
|
|
Vector<SapforTask> tasks = new Vector<>();
|
2023-09-30 00:18:44 +03:00
|
|
|
|
public SapforTestingPlanner() throws Exception {
|
2023-09-30 01:58:18 +03:00
|
|
|
|
super(Global.properties.threadsTimeout, Global.properties.threadsNum);
|
2023-09-30 18:19:31 +03:00
|
|
|
|
scenario_json = (SapforScenario_json) Utils.jsonFromFile(new File(Global.Home, "scenario.txt"), SapforScenario_json.class);
|
2023-09-30 00:18:44 +03:00
|
|
|
|
//формирование списка задач.
|
2023-09-30 22:02:58 +03:00
|
|
|
|
File sapfor_drv = new File(Global.Home, scenario_json.sapfor_drv);
|
2023-09-30 00:18:44 +03:00
|
|
|
|
for (SapforPackage_json sapforPackage_json : scenario_json.packages) {
|
|
|
|
|
|
for (String testName : scenario_json.tests) {
|
2023-09-30 22:02:58 +03:00
|
|
|
|
//--- чтобы было можно на нее сослаться после выполнения всех нитей.
|
|
|
|
|
|
SapforTask task = new SapforTask();
|
|
|
|
|
|
tasks.add(task);
|
|
|
|
|
|
//---
|
|
|
|
|
|
addThread(() -> new PerformSapforTask().Do(
|
|
|
|
|
|
sapfor_drv,
|
|
|
|
|
|
sapforPackage_json,
|
|
|
|
|
|
testName,
|
|
|
|
|
|
task
|
|
|
|
|
|
));
|
2023-09-30 00:18:44 +03:00
|
|
|
|
}
|
2023-09-26 22:57:18 +03:00
|
|
|
|
}
|
2023-09-30 18:19:31 +03:00
|
|
|
|
interruptThread.start();
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void Interrupt() throws Exception {
|
2023-09-30 22:02:58 +03:00
|
|
|
|
System.out.println("killing " + scenario_json.sapfor_drv + "...");
|
|
|
|
|
|
String kill_command = Global.isWindows ? ("taskkill /FI \"IMAGENAME eq " + scenario_json.sapfor_drv + "\" /F /T") :
|
2023-09-30 18:19:31 +03:00
|
|
|
|
("killall -SIGKILL " + scenario_json.sapfor_drv);
|
|
|
|
|
|
Process killer = Runtime.getRuntime().exec(kill_command);
|
|
|
|
|
|
killer.waitFor();
|
|
|
|
|
|
System.out.println("done!");
|
|
|
|
|
|
//todo для надежности сделать еще один kill с внешнего процесса.
|
|
|
|
|
|
// может быть гонка, что нить успеет запустить процесс уже после интеррупта.
|
2023-09-26 22:57:18 +03:00
|
|
|
|
}
|
2023-09-30 20:56:59 +03:00
|
|
|
|
@Override
|
|
|
|
|
|
protected void finalize() {
|
|
|
|
|
|
System.exit(0);
|
|
|
|
|
|
}
|
2023-09-26 22:57:18 +03:00
|
|
|
|
}
|