черновик сравнения задач.

This commit is contained in:
2023-10-24 23:19:13 +03:00
parent e45cf5659d
commit 37c7bbda44
3 changed files with 66 additions and 10 deletions

2
.idea/workspace.xml generated
View File

@@ -8,8 +8,6 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment=""> <list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/SapforTestingSystem/PackageModeSupervisor/PackageModeSupervisor.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/SapforTestingSystem/PackageModeSupervisor/PackageModeSupervisor.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/SapforTestingSystem/SapforTask/SapforTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/SapforTestingSystem/SapforTask/SapforTask.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/SapforTestingSystem/SapforTask/SapforTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/SapforTestingSystem/SapforTask/SapforTask.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/TestingServer.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/TestingServer.java" afterDir="false" />
</list> </list>

View File

@@ -6,7 +6,10 @@ import GlobalData.Tasks.TaskState;
import SapforTestingSystem.Json.SapforVersion_json; import SapforTestingSystem.Json.SapforVersion_json;
import com.google.gson.annotations.Expose; import com.google.gson.annotations.Expose;
import com.sun.org.glassfish.gmbal.Description; import com.sun.org.glassfish.gmbal.Description;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.nio.charset.Charset;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
public class SapforTask extends DBObject { public class SapforTask extends DBObject {
@@ -81,10 +84,48 @@ public class SapforTask extends DBObject {
} }
return String.join("", versionsLines); return String.join("", versionsLines);
} }
public static boolean compareVersionsFiles(SapforVersion_json version1, SapforVersion_json version2, List<String> files) throws Exception {
for (String fileName : files) {
File file1 = new File(version1.version, fileName);
if (!file1.exists()) return false;
File file2 = new File(version2.version, fileName);
if (!file2.exists()) return false;
String text1 = FileUtils.readFileToString(file1, Charset.defaultCharset());
String text2 = FileUtils.readFileToString(file2, Charset.defaultCharset());
if (!text1.equals(text2))
return false;
}
return true;
}
//должны совпасть им теста, флаги, и коды //должны совпасть им теста, флаги, и коды
public boolean isComparable(SapforTask task) throws Exception { public boolean isComparable(SapforTask task) throws Exception {
return test_description.equalsIgnoreCase(task.test_description) && return test_description.equalsIgnoreCase(task.test_description) &&
flags.equalsIgnoreCase(task.flags) && flags.equalsIgnoreCase(task.flags) &&
codes.equalsIgnoreCase(task.codes); codes.equalsIgnoreCase(task.codes);
} }
public boolean Compare(SapforTask task, Vector<String> comparisonLog) throws Exception {
//1. сравнить списки файлов. без учета порядка.
if (files.size() != task.files.size())
return false;
for (String file1 : files) {
if (!task.files.contains(file1)) {
return false;
}
}
//2. сравнить состояния.
if (!state.equals(task.state))
return false;
//3. сравнить цепочки версий (?)
if (!getVersionsChain().equalsIgnoreCase(task.getVersionsChain()))
return false;
//4. сравнить версии. уже знаем что порядок преобразований идентичен и набор файлов одинаков.
// первая всегда исходная. поэтому не берется.
for (int i = 1; i < versions.size(); ++i) {
SapforVersion_json version1 = versions.get(i);
SapforVersion_json version2 = task.versions.get(i);
//--
if (!compareVersionsFiles(version1, version2, files)) return false;
}
return false;
}
} }

View File

@@ -314,30 +314,47 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
return (SapforTasksResults_json) Utils.jsonFromFile( return (SapforTasksResults_json) Utils.jsonFromFile(
results_file, SapforTasksResults_json.class); results_file, SapforTasksResults_json.class);
} }
public String CompareSapforPackages(SapforTasksPackage package1, SapforTasksPackage package2) throws Exception {
String res = "";
//надо в другое место.
public Vector<String> CompareSapforPackages(SapforTasksPackage package1, SapforTasksPackage package2) throws Exception {
Vector<String> comparisonLog = new Vector<>();
// чтобы сравнивать. должен быть идентичный список тестов. (без учета последовательности) // чтобы сравнивать. должен быть идентичный список тестов. (без учета последовательности)
// идентичный набор проходов (с учетом последовательности) // идентичный набор проходов (с учетом последовательности)
//идентичный набор флагов (?) без учета последовательности. //идентичный набор флагов (?) без учета последовательности.
// то есть должны отличаться только тестируемые версии САПФОР. // то есть должны отличаться только тестируемые версии САПФОР.
SapforTasksResults_json results1_json = getSapforPackageResults(package1); SapforTasksResults_json results1_json = getSapforPackageResults(package1);
SapforTasksResults_json results2_json = getSapforPackageResults(package2); SapforTasksResults_json results2_json = getSapforPackageResults(package2);
if (results1_json.tasks.size()!=results2_json.tasks.size()) if (results1_json.tasks.size() != results2_json.tasks.size()) {
throw new RepositoryRefuseException("В пакетах разное число задач."); comparisonLog.add("Количество задач в пакетах не совпадает.");
comparisonLog.add(package1.id + ": " + results1_json.tasks.size() + "/" + package2.id + ": " + results2_json.tasks.size());
return comparisonLog;
}
//подходит если все задачи из первого пакета содержатся во втором, и размер одинаковый. //подходит если все задачи из первого пакета содержатся во втором, и размер одинаковый.
Vector<SapforTask> sortedTasks2 = new Vector<>();
for (SapforTask task1 : results1_json.tasks) { for (SapforTask task1 : results1_json.tasks) {
//на //на
boolean match = false; boolean match = false;
for (SapforTask task2: results2_json.tasks){ for (SapforTask task2 : results2_json.tasks) {
if (task1.isComparable(task2)) { if (task1.isComparable(task2)) {
match = true; match = true;
sortedTasks2.add(task2);
break; break;
} }
} }
if (!match) if (!match) {
throw new RepositoryRefuseException("Задачи в пакетах не совпадают!"); comparisonLog.add("Найдена не совпадающая задача.");
return comparisonLog;
}
} }
return "";
for (SapforTask task1: results1_json.tasks){
for (SapforTask task2: sortedTasks2){
task1.Compare(task2, comparisonLog);
}
}
return comparisonLog;
} }
@Override @Override
protected void Session() throws Exception { protected void Session() throws Exception {