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; import java.util.Vector; public class SapforTestingPlanner extends TestingPlanner { 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!"); } //-- }