package SapforTestingSystem.SapforTestingPlaner; import Common.Global; import Common.Utils.Utils; import SapforTestingSystem.Json.SapforPackage_json; import SapforTestingSystem.Json.SapforScenario_json; import SapforTestingSystem.SapforTest.SapforTest; import SapforTestingSystem.ThreadsPlanner.ThreadsPlanner; import java.io.File; import java.nio.file.Paths; public class SapforTestingPlanner extends ThreadsPlanner { SapforScenario_json scenario_json = null; 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); //формирование списка задач. for (SapforPackage_json sapforPackage_json : scenario_json.packages) { for (String testName : scenario_json.tests) { addThread(() -> { try { new SapforTest( new File(Global.Home, scenario_json.sapfor_drv), Paths.get(Global.Home, sapforPackage_json.id, testName).toFile(), sapforPackage_json.flags, sapforPackage_json.codes).Do(); } catch (Exception exception) { Global.Log.PrintException(exception); } }); } } 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); } }