переделал скачивание стандартных тестов. В дальнейшем будет полностью на сервере.

This commit is contained in:
2023-11-19 00:25:37 +03:00
parent dae90b6c5e
commit f005b5dbc9
4 changed files with 145 additions and 137 deletions

6
.idea/workspace.xml generated
View File

@@ -8,9 +8,9 @@
<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/Common/UI/Windows/FormType.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/UI/Windows/FormType.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/Group/Group.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/Group/Group.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/SapforPackageFields.form" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/SapforPackageFields.java" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/ConvertCorrectnessTests.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/ConvertCorrectnessTests.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />

View File

@@ -19,9 +19,6 @@ public class Group extends riDBObject {
@Description("DEFAULT 'fortran'") @Description("DEFAULT 'fortran'")
public LanguageName language = LanguageName.fortran; public LanguageName language = LanguageName.fortran;
//-- //--
@Description("IGNORE")
public LinkedHashMap<String, byte[]> testsFiles = new LinkedHashMap<>(); //транспорт.
//--
@Override @Override
public boolean isVisible() { public boolean isVisible() {
return (!GroupsDBTable.filterMyOnly || Current.getAccount().email.equals(sender_address)) && return (!GroupsDBTable.filterMyOnly || Current.getAccount().email.equals(sender_address)) &&

View File

@@ -3,6 +3,7 @@ import Common.Constants;
import Common.Database.DBObject; import Common.Database.DBObject;
import Common.Global; import Common.Global;
import Common.Utils.Utils; import Common.Utils.Utils;
import GlobalData.Account.Account;
import GlobalData.Machine.Machine; import GlobalData.Machine.Machine;
import GlobalData.RemoteFile.RemoteFile; import GlobalData.RemoteFile.RemoteFile;
import GlobalData.Tasks.TaskState; import GlobalData.Tasks.TaskState;
@@ -33,11 +34,13 @@ import Visual_DVM_2021.Passes.All.ZipFolderPass;
import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021; import Visual_DVM_2021.Passes.Pass_2021;
import javafx.util.Pair; import javafx.util.Pair;
import org.apache.commons.io.FileUtils;
import javax.swing.*; import javax.swing.*;
import java.io.File; import java.io.File;
import java.io.Serializable; import java.io.Serializable;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Vector; import java.util.Vector;
@@ -211,68 +214,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
TimerOff(); TimerOff();
TimerOn(); TimerOn();
} }
//->>
Group ConvertDirectoryToGroup(File src, LanguageName languageName, TestType testType) throws Exception {
Group object = new Group();
//->>
object.description = src.getName();
object.language = languageName;
object.type = testType;
//-->>
//->>
File[] testsFiles = src.listFiles(pathname ->
pathname.isFile()
&& !pathname.getName().equals("settings")
&& !pathname.getName().equals("test-analyzer.sh")
&& Utils.getExtension(pathname).startsWith(languageName.getDVMCompile()));
;
if (testsFiles != null) {
for (File testFile : testsFiles)
object.testsFiles.put(testFile.getName(), Utils.packFile(testFile));
}
//->>
return object;
}
//->>
public Vector<Group> getRepoGroupsInfo() throws Exception {
Vector<Group> groups = new Vector<>();
File testsSrc = Paths.get(
Global.RepoDirectory.getAbsolutePath(),
"dvm", "tools", "tester", "trunk", "test-suite").toFile();
LanguageName[] supportedLanguages = new LanguageName[]{LanguageName.fortran, LanguageName.c};
for (LanguageName languageName : supportedLanguages) {
for (TestType testType : TestType.values()) {
File groupsSrc = null;
switch (testType) {
case Correctness:
String languageSrcName = null;
switch (languageName) {
case fortran:
languageSrcName = "Fortran";
break;
case c:
languageSrcName = "C";
break;
}
if (languageSrcName != null) {
groupsSrc = Paths.get(testsSrc.getAbsolutePath(), "Correctness", languageSrcName).toFile();
File[] groupsDirs = groupsSrc.listFiles(File::isDirectory);
if (groupsDirs != null) {
for (File groupDir : groupsDirs)
groups.add(ConvertDirectoryToGroup(groupDir, languageName, testType));
}
}
break;
case Performance:
File groupDir = Paths.get(testsSrc.getAbsolutePath(), "Performance").toFile();
groups.add(ConvertDirectoryToGroup(groupDir, languageName, testType));
break;
}
}
}
groups.sort(Comparator.comparing(o -> o.description));
return groups;
}
@Override @Override
protected void Session() throws Exception { protected void Session() throws Exception {
DBObject dbObject; DBObject dbObject;
@@ -417,15 +358,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
throw new RepositoryRefuseException("Теста с именем " + request.arg + " не существует"); throw new RepositoryRefuseException("Теста с именем " + request.arg + " не существует");
break; break;
//-------------------------------------------------------------------------------------->>>> //-------------------------------------------------------------------------------------->>>>
case RefreshDVMTests:
Print("Синхронизировать репозиторий тестов");
// временно отключить для отладки.
DownloadRepository downloadRepository = new DownloadRepository();
if (!downloadRepository.Do())
throw new RepositoryRefuseException("Не удалось обновить репозиторий");
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = getRepoGroupsInfo();
break;
case GetAccountQueueSize: case GetAccountQueueSize:
Print("Получить размер очереди для пользователя " + request.arg); Print("Получить размер очереди для пользователя " + request.arg);
SetCurrentAccountDB(request.arg); SetCurrentAccountDB(request.arg);
@@ -546,8 +478,119 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
response = new ServerExchangeUnit_2021(ServerCode.OK); response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = sapforPackageData; response.object = sapforPackageData;
break; break;
//---
case RefreshDVMTests:
Print("Синхронизировать репозиторий тестов ");
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = RefreshDVMTests((Account) request.object);
break;
//--
default: default:
throw new RepositoryRefuseException("Неподдерживаемый код: " + code); throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
} }
} }
//->>
//->>
Pair<Group, Vector<File>> ConvertDirectoryToGroup(File src, LanguageName languageName, TestType testType, Account account) throws Exception {
Group object = new Group();
Vector<File> groupFiles = null; //транспорт.
//->>
object.description = src.getName();
object.language = languageName;
object.type = testType;
object.sender_name = account.name;
object.sender_address = account.email;
//-->>
File[] files = src.listFiles(pathname ->
pathname.isFile()
&& !pathname.getName().equals("settings")
&& !pathname.getName().equals("test-analyzer.sh")
&& Utils.getExtension(pathname).startsWith(languageName.getDVMCompile()));
;
if (files != null) {
groupFiles = new Vector<>(Arrays.asList(files));
groupFiles.sort(Comparator.comparing(File::getName));
}
//->>
return new Pair<>(object, groupFiles);
}
public LinkedHashMap<Group, Vector<Test>> RefreshDVMTests(Account account) throws Exception {
DownloadRepository downloadRepository = new DownloadRepository();
if (!downloadRepository.Do())
throw new RepositoryRefuseException("Не удалось обновить репозиторий");
//-->>
Vector<Pair<Group, Vector<File>>> groups = new Vector<>();
LinkedHashMap<Group, Vector<Test>> res = new LinkedHashMap<>();
File testsSrc = Paths.get(
Global.RepoDirectory.getAbsolutePath(),
"dvm", "tools", "tester", "trunk", "test-suite").toFile();
LanguageName[] supportedLanguages = new LanguageName[]{LanguageName.fortran, LanguageName.c};
for (LanguageName languageName : supportedLanguages) {
for (TestType testType : TestType.values()) {
File groupsSrc = null;
switch (testType) {
case Correctness:
String languageSrcName = null;
switch (languageName) {
case fortran:
languageSrcName = "Fortran";
break;
case c:
languageSrcName = "C";
break;
}
if (languageSrcName != null) {
groupsSrc = Paths.get(testsSrc.getAbsolutePath(), "Correctness", languageSrcName).toFile();
File[] groupsDirs = groupsSrc.listFiles(File::isDirectory);
if (groupsDirs != null) {
for (File groupDir : groupsDirs)
groups.add(ConvertDirectoryToGroup(groupDir, languageName, testType, account));
}
}
break;
case Performance:
File groupDir = Paths.get(testsSrc.getAbsolutePath(), "Performance").toFile();
groups.add(ConvertDirectoryToGroup(groupDir, languageName, testType, account));
break;
}
}
}
groups.sort(Comparator.comparing(o -> o.getKey().description));
//-теперь создать тесты.
System.out.println("найдено " + groups.size() + " групп");
//--
for (Pair<Group, Vector<File>> p : groups) {
Group group = p.getKey();
//-
db.Insert(group);
Vector<Test> testsIds = new Vector<>();
res.put(group, testsIds);
//-
Vector<File> files = p.getValue();
if (!files.isEmpty()) {
//->>
for (File file : files) {
System.out.println("Создание теста " + file.getName());
Test test = new Test();
test.description = Utils.getNameWithoutExtension(file.getName()) + "_" + group.language.getDVMCompile();
test.sender_name = account.name;
test.sender_address = account.email;
test.group_id = group.id;
db.Insert(test);
testsIds.add(test);
//->>
File testProject = new File(Global.TempDirectory, String.valueOf(test.id));
Utils.CheckAndCleanDirectory(testProject);
File testFile = Paths.get(testProject.getAbsolutePath(), file.getName()).toFile();
FileUtils.copyFile(file, testFile);
//----
//архивация.
File archive = test.getArchive();
ZipFolderPass zip = new ZipFolderPass();
zip.Do(testProject.getAbsolutePath(), archive.getAbsolutePath());
}
}
}
return res;
}
} }

View File

@@ -3,19 +3,17 @@ import Common.Current;
import Common.Global; import Common.Global;
import Common.UI.UI; import Common.UI.UI;
import Common.Utils.Utils; import Common.Utils.Utils;
import ProjectData.Files.DBProjectFile;
import ProjectData.Project.db_project_info; import ProjectData.Project.db_project_info;
import Repository.Server.ServerCode; import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021; import Repository.Server.ServerExchangeUnit_2021;
import TestingSystem.Common.Group.Group; import TestingSystem.Common.Group.Group;
import TestingSystem.Common.Test.Test; import TestingSystem.Common.Test.Test;
import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.PassException;
import Visual_DVM_2021.Passes.Server.TestingSystemPass; import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import java.io.File; import java.io.File;
import java.nio.file.Paths; import java.util.LinkedHashMap;
import java.util.Vector; import java.util.Vector;
public class ConvertCorrectnessTests extends TestingSystemPass<File> { public class ConvertCorrectnessTests extends TestingSystemPass<File> {
@Override @Override
@@ -49,67 +47,36 @@ public class ConvertCorrectnessTests extends TestingSystemPass<File> {
} }
@Override @Override
protected void ServerAction() throws Exception { protected void ServerAction() throws Exception {
Command(new ServerExchangeUnit_2021(ServerCode.RefreshDVMTests)); Command(new ServerExchangeUnit_2021(ServerCode.RefreshDVMTests, "", Current.getAccount()));
Vector<Group> groups = (Vector<Group>) response.object; LinkedHashMap<Group, Vector<Test>> ids = (LinkedHashMap<Group, Vector<Test>>) response.object;
System.out.println("найдено " + groups.size() + " групп"); ShowMessage1("Определение размерности тестов");
Test test = null; for (Group group : ids.keySet()) {
Vector<Test> tests = null; Vector<Test> tests = ids.get(group);
for (Group group : groups) { for (Test test : tests) {
ShowMessage1("Создание группы " + group.description); ShowMessage2(group.description+" : "+test.description);
tests = new Vector<>(); Command(new ServerExchangeUnit_2021(ServerCode.DownloadTest, String.valueOf(test.id)));
// group.genName(); File testArchive = Utils.getTempFileName(String.valueOf(test));
group.sender_name = Current.getAccount().name; response.Unpack(testArchive);
group.sender_address = Current.getAccount().email; File testProject = new File(Global.TempDirectory, String.valueOf(test.id));
//->>
//->>
for (String testFileName : group.testsFiles.keySet()) {
ShowMessage2("Создание теста " + testFileName);
test = new Test();
// test.genName();
test.description = Utils.getNameWithoutExtension(testFileName) + "_" + group.language.getDVMCompile();
test.sender_name = Current.getAccount().name;
test.sender_address = Current.getAccount().email;
test.group_id = group.id;
//->>
File testProject = Paths.get(Global.TempDirectory.getAbsolutePath(), String.valueOf(test.id)).toFile();
Utils.forceDeleteWithCheck(testProject); Utils.forceDeleteWithCheck(testProject);
FileUtils.forceMkdir(testProject); FileUtils.forceMkdir(testProject);
File testFile = Paths.get(testProject.getAbsolutePath(), testFileName).toFile(); passes.get(PassCode_2021.UnzipFolderPass).Do(testArchive.getAbsolutePath(), Global.TempDirectory.getAbsolutePath());
Utils.unpackFile(group.testsFiles.get(testFileName), testFile);
//----
DBProjectFile testDBProjectFile = new DBProjectFile();
testDBProjectFile.name = testFile.getName();
testDBProjectFile.file = testFile;
testDBProjectFile.AutoDetectProperties();
//---
//без создания бд!! //без создания бд!!
db_project_info vizTestProject = new db_project_info(testProject, "", false); File[] files = testProject.listFiles();
switch (group.language) { if (files != null && files.length > 0) {
case fortran: db_project_info vizTestProject = new db_project_info(testProject, "", false);
test.dim = Current.getSapfor().getTextMaxDim(testFile, vizTestProject); switch (group.language) {
break; case fortran:
case c: test.dim = Current.getSapfor().getTextMaxDim(files[0], vizTestProject);
test.dim = Utils.getCTestMaxDim(testFile); System.out.println(test.dim);
break; break;
} case c:
//- test.dim = Utils.getCTestMaxDim(files[0]);
//архивация. System.out.println(test.dim);
File archive = Utils.getTempFileName("test_archive"); break;
if (passes.get(PassCode_2021.ZipFolderPass).Do(vizTestProject.Home.getAbsolutePath(), archive.getAbsolutePath())) { }
// test.project_archive_bytes = Utils.packFile(archive);
if (test.dim >= 0)
tests.add(test);
else UI.Info("для теста " + testFileName + " не удалось определить размерность");
} else throw new PassException("Не удалось заархивировать тест");
}
//->>
if (!tests.isEmpty()) {
ShowMessage1("Публикация группы " + group.description);
Command(new ServerExchangeUnit_2021(ServerCode.PublishObject, "", group));
for (Test test1 : tests) {
ShowMessage2("Публикация теста " + test1.description);
Command(new ServerExchangeUnit_2021(ServerCode.PublishObject, "", test1));
} }
EditObject(test);
} }
} }
} }
@@ -119,3 +86,4 @@ public class ConvertCorrectnessTests extends TestingSystemPass<File> {
passes.get(PassCode_2021.SynchronizeTests).Do(); passes.get(PassCode_2021.SynchronizeTests).Do();
} }
} }