постепенный перевод на сервер механизма тестирования.

This commit is contained in:
2023-10-04 00:25:36 +03:00
parent 2deecd47bf
commit 1cbd4eb393
16 changed files with 324 additions and 101 deletions

View File

@@ -1,7 +1,9 @@
package TestingSystem;
import Common.Current;
import Common.Database.DBObject;
import Common.Database.rDBObject;
import Common.Global;
import Common.GlobalProperties;
import Common.Utils.Utils;
import GlobalData.Machine.Machine;
import GlobalData.RemoteFile.RemoteFile;
@@ -9,13 +11,16 @@ import GlobalData.Tasks.TaskState;
import GlobalData.User.User;
import ProjectData.LanguageName;
import ProjectData.Project.db_project_info;
import Repository.Component.Component;
import Repository.Component.Sapfor.Sapfor_F;
import Repository.RepositoryRefuseException;
import Repository.RepositoryServer;
import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021;
import SapforTestingSystem.ServerSapfor.ServerSapfor;
import SapforTestingSystem.Json.PackageModeScenario_json;
import SapforTestingSystem.Json.SapforConfiguration_json;
import SapforTestingSystem.SapforConfiguration.SapforConfiguration;
import SapforTestingSystem.SapforConfiguration.SapforConfigurationInterface;
import SapforTestingSystem.SapforScenario.SapforScenario;
import SapforTestingSystem.SapforServerScenario_info;
import TestingSystem.Group.Group;
import TestingSystem.Group.GroupInterface;
import TestingSystem.Tasks.TestCompilationTask;
@@ -26,7 +31,6 @@ import TestingSystem.TasksPackageToKill.TasksPackageToKill;
import TestingSystem.Test.Test;
import TestingSystem.Test.TestInterface;
import TestingSystem.Test.TestType;
import Visual_DVM_2021.Passes.All.BuildComponent;
import Visual_DVM_2021.Passes.All.DownloadRepository;
import Visual_DVM_2021.Passes.All.UnzipFolderPass;
import Visual_DVM_2021.Passes.All.ZipFolderPass;
@@ -294,54 +298,69 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
groups.sort(Comparator.comparing(o -> o.description));
return groups;
}
public ServerSapfor InstallSapforForTesting() throws Exception {
Sapfor_F sapfor_f = new Sapfor_F();
public void StartSapforTests(SapforServerScenario_info scenario_info) throws Exception {
//--
PackageModeScenario_json scenario_json = new PackageModeScenario_json();
for (String test_id : scenario_info.testsIds)
scenario_json.tests.add(db.tests.get(test_id).description);
//создание объекта набора задач и его папки
SapforScenario scenario = new SapforScenario(); //?может быть все же поменять ключ на сгенерированный из даты.
db.Insert(scenario);
//создании рабочего пространства для пакетного режима
File scenarioWorkspace = new File(Global.ScenariosDirectory, String.valueOf(scenario.id));
Utils.CheckAndCleanDirectory(scenarioWorkspace);
scenario.workspace = scenarioWorkspace.getAbsolutePath();
//копирование тестов по конфигурациям.
for (String configuration_id : scenario_info.configurationsIds) {
SapforConfiguration configuration = db.sapforConfigurations.get(configuration_id);
//--
SapforConfiguration_json package_json = new SapforConfiguration_json();
package_json.id = String.valueOf(configuration_id);
package_json.flags = SapforConfigurationInterface.getFlags(configuration);
package_json.codes.addAll(SapforConfigurationInterface.getPassCodes(configuration));
//--->>
scenario_json.packages.add(package_json);
//-->>
File configurationWorkspace = new File(scenarioWorkspace, configuration_id);
FileUtils.forceMkdir(configurationWorkspace);
for (String test_id : scenario_info.testsIds) {
Test test = db.tests.get(test_id);
File test_root = new File(configurationWorkspace, test.description);
Utils.CheckAndCleanDirectory(test_root);
FileUtils.copyDirectory(new File(Global.TestsDirectory, test.id), test_root);
}
}
//копирование SAPFOR
File sapfor = new File(scenario.workspace, Utils.getDateName("SAPFOR_F"));
FileUtils.copyFile(new File(db.serverSapfors.get(scenario_info.sapforId).call_command), sapfor);
if (!sapfor.setExecutable(true))
throw new RepositoryRefuseException("Не удалось сделать файл " + sapfor.getName() + " исполняемым!");
scenario_json.sapfor_drv = sapfor.getName();
//--->>
DownloadRepository downloadRepository = new DownloadRepository(){
@Override
public PassCode_2021 code() {
return PassCode_2021.DownloadRepository;
}
@Override
protected boolean needsAnimation() {
return false;
}
};
BuildComponent buildComponent = new BuildComponent() {
@Override
public PassCode_2021 code() {
return PassCode_2021.BuildComponent;
}
@Override
protected boolean needsAnimation() {
return false;
}
@Override
protected PassCode_2021 necessary() {
return null; //тут схема с проходами не работает. возможно для сервера сделать урезанный список?
}
@Override
protected boolean canStart(Object... args) throws Exception {
target = (Component) args[0];
return true;
}
};
if (!downloadRepository.Do())
throw new RepositoryRefuseException("Не удалось загрузить репозиторий.");
if (!buildComponent.Do(sapfor_f))
throw new RepositoryRefuseException("Не удалось собрать версию SAPFOR.");
//-->>
//реализовать локально. вернуть готовый объект.
return null;
//копирование визуализатора
File visualiser = new File(scenario.workspace, "VisualSapfor.jar");
FileUtils.copyFile(new File(Global.Home, "TestingSystem.jar"), visualiser);
//создание настроек
GlobalProperties properties = new GlobalProperties();
properties.Mode = Current.Mode.Scenario;
properties.threadsNum = Global.properties.threadsNum; //брать из настроек сервера же.
properties.threadsTimeout = Global.properties.threadsTimeout;
Utils.jsonToFile(properties, new File(scenario.workspace, "properties"));
//создание инструкции
File scenario_file = new File(scenario.workspace, "scenario");
Utils.jsonToFile(scenario_json, scenario_file);
//запуск пакетного режима.
Utils.startScript_(scenarioWorkspace, scenarioWorkspace, "start", "java -jar VisualSapfor.jar");
}
@Override
protected void Session() throws Exception {
DBObject dbObject = null;
SapforServerScenario_info scenario = null;
Test test = null;
switch (code) {
case InstallSapforForTesting:
Print("Установка SAPFOR для тестирования");
InstallSapforForTesting();
case StartSapforTests:
Print("Запуск тестирования SAPFOR");
StartSapforTests((SapforServerScenario_info) request.object);
response = new ServerExchangeUnit_2021(ServerCode.OK);
break;
case SynchronizeTests: