Files
VisualSapfor/src/Visual_DVM_2021/Passes/All/StartTests.java

202 lines
9.3 KiB
Java
Raw Normal View History

package Visual_DVM_2021.Passes.All;
2023-09-17 22:13:42 +03:00
import Common.Current;
import Common.Global;
2023-09-17 22:13:42 +03:00
import Common.UI.UI;
import GlobalData.Compiler.CompilerType;
import GlobalData.Machine.MachineType;
import GlobalData.User.UserState;
import TestingSystem.Common.Group.Group;
2023-11-19 18:49:50 +03:00
import TestingSystem.Common.Test.Test;
import TestingSystem.DVM.Tasks.TestCompilationTask;
import TestingSystem.DVM.Tasks.TestRunTask;
import TestingSystem.DVM.TasksPackage.TasksPackage;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Server.PublishServerAccountObject;
2023-09-17 22:13:42 +03:00
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Vector;
public class StartTests extends PublishServerAccountObject<TasksPackage> {
public StartTests() {
super(TasksPackage.class);
}
2023-09-17 22:13:42 +03:00
@Override
protected int getTimeout() {
return 0;
}
@Override
public String getIconPath() {
return "/icons/Start.png";
}
@Override
protected boolean canStart(Object... args) throws Exception {
if (!Current.getAccount().CheckRegistered(Log)) {
return false;
}
if (Current.Check(Log, Current.Machine, Current.User, Current.Compiler)) {
if (!Current.getMachine().type.equals(MachineType.Server)) {
Log.Writeln_("Тестирование поддерживается только на одиночном удалённом сервере.");
return false;
}
if (!Current.getUser().state.equals(UserState.ready_to_work)) {
Log.Writeln_("Пользователь не готов к работе. Выполните инициализацию пользователя!");
return false;
}
if (!Current.getCompiler().type.equals(CompilerType.dvm)) {
Log.Writeln_("Тестирование поддерживается только для DVM компиляторов.");
return false;
}
if (!Current.getCompiler().versionLoaded)
passes.get(PassCode_2021.ShowCompilerVersion).Do(Current.getCompiler(), false);
if (!CreateTasks()) {
Log.Writeln_("Не удалось создать задачи.\n" +
"Для создания задач отметьте требуемые конфигурации,\n" +
"Отметьте группы, или отдельные тесты в отмеченной текущей группе");
return false;
}
//-
if (target.runTasksCount == 0) {
Log.Writeln_("Не будет создано ни одной задачи на запуск.");
return false;
}
//todo сюда же флаг нужно ли почтовое отправление.
if (UI.Question("Будет запущено:\n"
+ target.compilationTasksCount + " задач на компиляцию\n" +
+target.runTasksCount + " задач на запуск.\n" +
"Продолжить")) {
return true;
}
}
return false;
}
public static Vector<TestCompilationTask> createTasksCGT(
TestingSystem.DVM.Configuration.Configuration configuration,
2023-09-17 22:13:42 +03:00
Group group,
Test test
) {
Vector<TestCompilationTask> compilationTasks = new Vector<>();
2023-11-19 18:49:50 +03:00
for (String flags : configuration.getFlags()) {
2023-09-17 22:13:42 +03:00
TestCompilationTask testCompilationTask = new TestCompilationTask(
configuration,
group,
test,
flags
);
testCompilationTask.runTasks = new Vector<>();
2023-11-23 01:50:04 +03:00
Vector<String> matrixes = configuration.getMatrixes(test.max_dim);
2023-11-19 18:49:50 +03:00
Vector<String> environments = configuration.getEnvironments();
2023-09-17 22:13:42 +03:00
for (String environmentSet : environments) {
if (flags.trim().equalsIgnoreCase("-s")) {
testCompilationTask.runTasks.add(new TestRunTask(
configuration,
group,
test,
"",
flags,
environmentSet,
2023-11-19 18:49:50 +03:00
configuration.getParamsText()
2023-09-17 22:13:42 +03:00
));
} else
for (String matrix : matrixes) {
testCompilationTask.runTasks.add(new TestRunTask(
configuration,
group,
test,
matrix,
flags,
environmentSet,
2023-11-19 18:49:50 +03:00
configuration.getParamsText()));
2023-09-17 22:13:42 +03:00
}
}
compilationTasks.add(testCompilationTask);
}
return compilationTasks;
}
protected boolean CreateTasks() {
//---------
Vector<String> configurations_lines = new Vector<>();
Vector<String> groups_lines = new Vector<>();
//-----------
target = new TasksPackage();
target.StartDate = new Date().getTime();
//-
target.machine_name = Current.getMachine().name;
target.machine_address = Current.getMachine().address;
target.machine_port = Current.getMachine().port;
target.machine_type = Current.getMachine().type;
//-
target.user_name = Current.getUser().login;
target.user_password = Current.getUser().password;
target.user_workspace = Current.getUser().workspace;
target.dvm_drv = Current.getCompiler().call_command;
target.dvm_version = Current.getCompiler().getVersionInfo();
target.kernels = Global.properties.TestingKernels;
2023-09-17 22:13:42 +03:00
Vector<TestCompilationTask> tasks = new Vector<>();
//1, Проверяем выбраны ли конфиги.
if (server.db.configurations.getCheckedCount() == 0) {
Log.Writeln_("Не отмечена ни одна конфигурация тестирования.");
return false;
}
if (server.db.groups.getCheckedCount() > 0) {
//2 Проверяем выбраны ли группы.
configurations_lines.add("Конфигурации: ");
for (TestingSystem.DVM.Configuration.Configuration configuration : server.db.configurations.getCheckedItems()) {
2023-11-19 18:49:50 +03:00
configurations_lines.add(configuration.getSummary());
2023-09-17 22:13:42 +03:00
groups_lines.add("Группы: ");
for (Group group : server.db.groups.getCheckedItems()) {
2023-11-17 00:04:21 +03:00
groups_lines.add(group.getSummary());
2023-09-17 22:13:42 +03:00
Vector<Test> groupTests = new Vector<>();
Vector<Test> checkedGroupTests = new Vector<>();
for (Test test : server.db.tests.Data.values()) {
if (test.group_id==group.id) {
2023-09-17 22:13:42 +03:00
groupTests.add(test);
if (test.isSelected())
checkedGroupTests.add(test);
}
}
if (!groupTests.isEmpty()) {
if (checkedGroupTests.isEmpty()) {
for (Test test : groupTests)
tasks.addAll(createTasksCGT(configuration, group, test));
} else {
//добавляем только отмеченные.
for (Test test : checkedGroupTests) {
tasks.addAll(createTasksCGT(configuration, group, test));
}
}
}
}
}
}
//рассортировать по группам и тестам задачи.
for (TestCompilationTask task : tasks) {
target.compilationTasksCount++;
target.runTasksCount += task.runTasks.size();
LinkedHashMap<Integer, Vector<TestCompilationTask>> group_tasks = null;
2023-09-17 22:13:42 +03:00
if (target.sorted_tasks.containsKey(task.group_id))
group_tasks = target.sorted_tasks.get(task.group_id);
else {
group_tasks = new LinkedHashMap<>();
target.sorted_tasks.put(task.group_id, group_tasks);
}
Vector<TestCompilationTask> test_tasks = null;
if (group_tasks.containsKey(task.test_id))
test_tasks = group_tasks.get((task.test_id));
else {
test_tasks = new Vector<>();
group_tasks.put(task.test_id, test_tasks);
}
test_tasks.add(task);
}
Vector<String> summary_lines = new Vector<>();
summary_lines.addAll(configurations_lines);
summary_lines.addAll(groups_lines);
target.summary =
"Задач на компиляцию: " + target.compilationTasksCount + "\n" +
2023-09-17 22:13:42 +03:00
"Задач на запуск: " + target.runTasksCount + "\n" +
String.join("\n", summary_lines);
target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0;
2023-09-17 22:13:42 +03:00
return !tasks.isEmpty();
}
}