2023-12-15 18:10:27 +03:00
|
|
|
|
package TestingSystem.SAPFOR;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import Common.Constants;
|
|
|
|
|
|
import Common.Current;
|
|
|
|
|
|
import Common.Global;
|
|
|
|
|
|
import Common.GlobalProperties;
|
|
|
|
|
|
import Common.Utils.Utils;
|
2024-05-08 00:06:43 +03:00
|
|
|
|
import ProjectData.LanguageName;
|
|
|
|
|
|
import Repository.RepositoryRefuseException;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import Repository.Server.ServerCode;
|
2024-05-08 00:06:43 +03:00
|
|
|
|
import Repository.Server.ServerExchangeUnit_2021;
|
2023-12-17 19:19:59 +03:00
|
|
|
|
import TestingSystem.Common.TasksPackageState;
|
2023-12-25 00:33:14 +03:00
|
|
|
|
import TestingSystem.Common.TestingPlanner;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import TestingSystem.SAPFOR.Json.SapforConfiguration_json;
|
|
|
|
|
|
import TestingSystem.SAPFOR.Json.SapforTest_json;
|
2023-12-25 00:33:14 +03:00
|
|
|
|
import TestingSystem.SAPFOR.Json.SapforTestingSet_json;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import TestingSystem.SAPFOR.SapforPackage.SapforPackage;
|
2024-05-07 01:06:47 +03:00
|
|
|
|
import TestingSystem.SAPFOR.ServerSapfor.ServerSapfor;
|
2024-05-08 00:06:43 +03:00
|
|
|
|
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforState;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import org.apache.commons.io.FileUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
|
import java.nio.charset.Charset;
|
2024-05-08 00:06:43 +03:00
|
|
|
|
import java.nio.file.Paths;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
public class SapforTestingPlanner extends TestingPlanner<SapforPackage> {
|
|
|
|
|
|
File workspace;
|
2024-05-07 01:06:47 +03:00
|
|
|
|
ServerSapfor sapfor;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
@Override
|
2024-03-21 19:02:08 +03:00
|
|
|
|
protected ServerCode getActivePackagesCode() {
|
|
|
|
|
|
return ServerCode.GetFirstActiveSapforPackages;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
@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();
|
|
|
|
|
|
//--
|
2023-12-25 00:33:14 +03:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void PackageWorkspaceCreation() throws Exception {
|
|
|
|
|
|
//копирование визуализатора
|
|
|
|
|
|
File visualiser = new File(workspace, "VisualSapfor.jar");
|
|
|
|
|
|
FileUtils.copyFile(new File(Global.Home, "TestingSystem.jar"), visualiser);
|
|
|
|
|
|
//создание настроек
|
2024-04-24 22:23:50 +03:00
|
|
|
|
GlobalProperties properties = new GlobalProperties(Global.properties);
|
2023-12-16 03:57:01 +03:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
2023-12-25 00:33:14 +03:00
|
|
|
|
File pid = new File(workspace, "PID");
|
2023-12-16 03:57:01 +03:00
|
|
|
|
testingPackage.PID = FileUtils.readFileToString(pid, Charset.defaultCharset());
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected boolean CheckNextState() throws Exception {
|
2024-02-16 23:49:04 +03:00
|
|
|
|
boolean progress_changed = false;
|
|
|
|
|
|
boolean state_changed = false;
|
|
|
|
|
|
//--
|
2023-12-16 03:57:01 +03:00
|
|
|
|
File workspace = testingPackage.getLocalWorkspace();
|
2024-02-16 23:49:04 +03:00
|
|
|
|
//--
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//--
|
2023-12-16 03:57:01 +03:00
|
|
|
|
File done = new File(workspace, Constants.DONE);
|
|
|
|
|
|
File aborted = new File(workspace, Constants.ABORTED);
|
|
|
|
|
|
if (done.exists()) {
|
|
|
|
|
|
testingPackage.state = TasksPackageState.Analysis;
|
2024-02-16 23:49:04 +03:00
|
|
|
|
state_changed = true;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
} else if (aborted.exists()) {
|
|
|
|
|
|
testingPackage.state = TasksPackageState.Aborted;
|
2024-02-16 23:49:04 +03:00
|
|
|
|
state_changed = true;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
2024-02-16 23:49:04 +03:00
|
|
|
|
return progress_changed || state_changed;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void DownloadResults() throws Exception {
|
|
|
|
|
|
//не требуется.
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void AnalyseResults() throws Exception {
|
|
|
|
|
|
//не требуется.
|
2023-12-18 15:55:13 +03:00
|
|
|
|
testingPackage.progress = 100;
|
2023-12-16 03:57:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
@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!");
|
|
|
|
|
|
}
|
2024-03-21 19:02:08 +03:00
|
|
|
|
//--
|
2024-05-05 23:20:12 +03:00
|
|
|
|
@Override
|
|
|
|
|
|
public void perform() throws Exception {
|
2024-05-08 00:06:43 +03:00
|
|
|
|
compileSapfor();
|
2024-05-05 23:20:12 +03:00
|
|
|
|
super.perform();
|
|
|
|
|
|
}
|
2024-05-07 01:06:47 +03:00
|
|
|
|
public void getServerSapforForCompilation() throws Exception {
|
|
|
|
|
|
sapfor= (ServerSapfor) ServerCommand(ServerCode.GetSapforForCompilation);
|
|
|
|
|
|
}
|
2024-05-08 00:06:43 +03:00
|
|
|
|
void UpdateSapforState(ServerSapforState state_in) throws Exception {
|
|
|
|
|
|
sapfor.state = state_in;
|
|
|
|
|
|
ServerCommand(ServerCode.EditObject, sapfor);
|
|
|
|
|
|
}
|
|
|
|
|
|
public void compileSapfor() throws Exception {
|
2024-05-07 01:06:47 +03:00
|
|
|
|
sapfor = null;
|
|
|
|
|
|
getServerSapforForCompilation();
|
|
|
|
|
|
if (sapfor != null) {
|
2024-05-08 00:06:43 +03:00
|
|
|
|
//--
|
|
|
|
|
|
File testingSystemHome = new File(Global.Home);
|
|
|
|
|
|
File repo = new File(testingSystemHome, "Repo");
|
|
|
|
|
|
File repoSapforHome = Paths.get(repo.getAbsolutePath(), Constants.SAPFOR_REPOSITORY_BIN).toFile();
|
|
|
|
|
|
File repo_bin = new File(repoSapforHome, "Sapfor_F");
|
|
|
|
|
|
File repo_out = new File(repoSapforHome, Constants.out_file);
|
|
|
|
|
|
File repo_err = new File(repoSapforHome, Constants.err_file);
|
|
|
|
|
|
//--
|
|
|
|
|
|
System.out.println("Синхронизация ветви DVM...");
|
|
|
|
|
|
Utils.startScript(repo, repo, "dvm_checkout",
|
|
|
|
|
|
"svn checkout " +
|
|
|
|
|
|
Constants.REPOSITORY_AUTHENTICATION +
|
|
|
|
|
|
" " + Constants.DVM_REPOSITORY + " 1>dvm_out.txt 2>dvm_err.txt\n").waitFor();
|
|
|
|
|
|
System.out.println("Синхронизация ветви SAPFOR...");
|
|
|
|
|
|
Utils.startScript(repo, repo, "spf_checkout",
|
|
|
|
|
|
"svn checkout " +
|
|
|
|
|
|
Constants.REPOSITORY_AUTHENTICATION +
|
|
|
|
|
|
" " + Constants.SAPFOR_REPOSITORY + " 1>spf_out.txt 2>spf_err.txt\n").waitFor();
|
|
|
|
|
|
if (repo_bin.exists())
|
|
|
|
|
|
FileUtils.forceDelete(repo_bin);
|
|
|
|
|
|
//--
|
|
|
|
|
|
System.out.println("Сборка SAPFOR...");
|
|
|
|
|
|
Utils.startScript(repoSapforHome, repoSapforHome, "build_sapfor",
|
|
|
|
|
|
"cmake ../ 1>" +
|
|
|
|
|
|
Constants.out_file +
|
|
|
|
|
|
" 2>" +
|
|
|
|
|
|
Constants.err_file +
|
|
|
|
|
|
"\nmake -j 14 1>>" +
|
|
|
|
|
|
Constants.out_file +
|
|
|
|
|
|
" 2>>" +
|
|
|
|
|
|
Constants.err_file +
|
|
|
|
|
|
"\n").waitFor();
|
|
|
|
|
|
//--
|
|
|
|
|
|
System.out.println("DONE");
|
|
|
|
|
|
System.out.println("Result file is " + Utils.Brackets(repo_bin.getAbsolutePath()));
|
|
|
|
|
|
//---
|
|
|
|
|
|
System.out.println("Обработка результатов");
|
|
|
|
|
|
//---
|
|
|
|
|
|
File sapforsDirectory = new File(testingSystemHome, "Sapfors");
|
|
|
|
|
|
File sapforHome = new File(sapforsDirectory, Utils.getDateName("sapfor"));
|
|
|
|
|
|
sapforHome.mkdir();
|
|
|
|
|
|
File sapforOut = new File(sapforHome, Constants.out_file);
|
|
|
|
|
|
File sapforErr = new File(sapforHome, Constants.err_file);
|
|
|
|
|
|
//--
|
|
|
|
|
|
System.out.println(repo_bin.getAbsolutePath());
|
|
|
|
|
|
System.out.println(repo_out.getAbsolutePath());
|
|
|
|
|
|
System.out.println(repo_err.getAbsolutePath());
|
|
|
|
|
|
System.out.println("====================");
|
|
|
|
|
|
//--
|
|
|
|
|
|
if (repo_out.exists())
|
|
|
|
|
|
FileUtils.copyFile(repo_out, sapforOut);
|
|
|
|
|
|
if (repo_err.exists())
|
|
|
|
|
|
FileUtils.copyFile(repo_err, sapforErr);
|
|
|
|
|
|
///-----
|
|
|
|
|
|
//---
|
|
|
|
|
|
if (repo_bin.exists()) {
|
|
|
|
|
|
System.out.println("assembly found!");
|
|
|
|
|
|
// response = new ServerExchangeUnit_2021(ServerCode.OK);
|
|
|
|
|
|
//создать папку. Для того чтобы скопировать из репозитория.
|
|
|
|
|
|
File sapforBin = new File(sapforHome, "Sapfor_F");
|
|
|
|
|
|
FileUtils.copyFile(repo_bin, sapforBin);
|
|
|
|
|
|
sapforBin.setExecutable(true, false);
|
|
|
|
|
|
// //-->>>
|
|
|
|
|
|
/*
|
|
|
|
|
|
ServerSapfor serverSapfor = new ServerSapfor();
|
|
|
|
|
|
serverSapfor.home_path = sapforHome.getAbsolutePath();
|
|
|
|
|
|
serverSapfor.call_command = sapforBin.getAbsolutePath();
|
|
|
|
|
|
serverSapfor.languageName = LanguageName.fortran;
|
|
|
|
|
|
serverSapfor.buildDate = new Date().getTime();
|
|
|
|
|
|
response.object = serverSapfor;
|
|
|
|
|
|
serverSapfor.version = String.valueOf(current_version);
|
|
|
|
|
|
*/
|
|
|
|
|
|
//---
|
|
|
|
|
|
// EmailSapforAssembly(current_version, true);
|
|
|
|
|
|
//---
|
|
|
|
|
|
UpdateSapforState(ServerSapforState.Done);
|
|
|
|
|
|
}
|
2024-05-05 23:20:12 +03:00
|
|
|
|
|
2024-05-08 00:06:43 +03:00
|
|
|
|
else {
|
|
|
|
|
|
UpdateSapforState(ServerSapforState.DoneWithErrors);
|
|
|
|
|
|
//---
|
|
|
|
|
|
// EmailSapforAssembly(current_version, false);
|
|
|
|
|
|
//---
|
|
|
|
|
|
// throw new RepositoryRefuseException("Бинарный файл SAPFOR не найден!");
|
|
|
|
|
|
}
|
2024-05-07 01:06:47 +03:00
|
|
|
|
}
|
2024-05-05 23:20:12 +03:00
|
|
|
|
}
|
2023-12-15 18:10:27 +03:00
|
|
|
|
}
|