package Visual_DVM_2021.Passes.All; import Common.Current; import Common.Global; import Common.UI.UI; import GlobalData.Compiler.CompilerType; import GlobalData.Machine.MachineType; import GlobalData.User.UserState; import TestingSystem.Common.Group.Group; 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; import java.util.Date; import java.util.LinkedHashMap; import java.util.Vector; public class StartTests extends PublishServerAccountObject { public StartTests() { super(TasksPackage.class); } @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 createTasksCGT( TestingSystem.DVM.Configuration.Configuration configuration, Group group, Test test ) { Vector compilationTasks = new Vector<>(); for (String flags : configuration.getFlags()) { TestCompilationTask testCompilationTask = new TestCompilationTask( configuration, group, test, flags ); testCompilationTask.runTasks = new Vector<>(); Vector matrixes = configuration.getMatrixes(test.max_dim); Vector environments = configuration.getEnvironments(); for (String environmentSet : environments) { if (flags.trim().equalsIgnoreCase("-s")) { testCompilationTask.runTasks.add(new TestRunTask( configuration, group, test, "", flags, environmentSet, configuration.getParamsText() )); } else for (String matrix : matrixes) { testCompilationTask.runTasks.add(new TestRunTask( configuration, group, test, matrix, flags, environmentSet, configuration.getParamsText())); } } compilationTasks.add(testCompilationTask); } return compilationTasks; } protected boolean CreateTasks() { //--------- Vector configurations_lines = new Vector<>(); Vector 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; Vector 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()) { configurations_lines.add(configuration.getSummary()); groups_lines.add("Группы: "); for (Group group : server.db.groups.getCheckedItems()) { groups_lines.add(group.getSummary()); Vector groupTests = new Vector<>(); Vector checkedGroupTests = new Vector<>(); for (Test test : server.db.tests.Data.values()) { if (test.group_id==group.id) { 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> group_tasks = null; 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 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 summary_lines = new Vector<>(); summary_lines.addAll(configurations_lines); summary_lines.addAll(groups_lines); target.summary = "Задач на компиляцию: " + target.compilationTasksCount + "\n" + "Задач на запуск: " + target.runTasksCount + "\n" + String.join("\n", summary_lines); target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0; return !tasks.isEmpty(); } }