переделал скачивание стандартных тестов. В дальнейшем будет полностью на сервере.
This commit is contained in:
6
.idea/workspace.xml
generated
6
.idea/workspace.xml
generated
@@ -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" />
|
||||||
|
|||||||
@@ -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)) &&
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user