Разделение очереди на разные машины, и исправление бага. могло выполняться более одного пакета одновременно
This commit is contained in:
12
.idea/workspace.xml
generated
12
.idea/workspace.xml
generated
@@ -8,9 +8,15 @@
|
|||||||
<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/Utils/Validators/ShellParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Utils/Validators/ShellParser.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/properties" beforeDir="false" afterPath="$PROJECT_DIR$/properties" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/Repository/Component/Visualiser.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Component/Visualiser.java" 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/Visual_DVM_2021/UI/Main/TestingForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/TestingForm.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TasksPackageState.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TasksPackageState.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPlanner.java" afterDir="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/TestingSystem/Common/TestsDatabase.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestsDatabase.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTestingPlanner.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTestingPlanner.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/MainForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/UI/Main/MainForm.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" />
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"ServerUserName": "testuser",
|
"ServerUserName": "testuser",
|
||||||
"ServerUserSHHPort": 23,
|
"ServerUserSHHPort": 23,
|
||||||
"ComponentsServerPort": 7995,
|
"ComponentsServerPort": 7995,
|
||||||
"TestingServerPort": 7998,
|
"TestingServerPort": 7996,
|
||||||
"SocketTimeout": 5000,
|
"SocketTimeout": 5000,
|
||||||
"OldServer": false,
|
"OldServer": false,
|
||||||
"SMTPHost": "smtp.mail.ru",
|
"SMTPHost": "smtp.mail.ru",
|
||||||
@@ -31,10 +31,10 @@
|
|||||||
"PerformanceAnalyzerPath": "",
|
"PerformanceAnalyzerPath": "",
|
||||||
"ComponentsBackUpsCount": 10,
|
"ComponentsBackUpsCount": 10,
|
||||||
"TestingKernels": 28,
|
"TestingKernels": 28,
|
||||||
"AutoCheckTesting": false,
|
"AutoCheckTesting": true,
|
||||||
"CheckTestingIntervalSeconds": 10,
|
"CheckTestingIntervalSeconds": 10,
|
||||||
"EmailOnTestingProgress": false,
|
"EmailOnTestingProgress": false,
|
||||||
"collapseCredentials": true,
|
"collapseCredentials": false,
|
||||||
"collapseFileGraphs": false,
|
"collapseFileGraphs": false,
|
||||||
"collapseFileMessages": false,
|
"collapseFileMessages": false,
|
||||||
"collapseProjectTrees": false
|
"collapseProjectTrees": false
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public enum ServerCode {
|
|||||||
GetFirstActiveDVMPackage,
|
GetFirstActiveDVMPackage,
|
||||||
DVMPackageNeedsKill, // не доделано.
|
DVMPackageNeedsKill, // не доделано.
|
||||||
UpdateActiveDVMPackages,
|
UpdateActiveDVMPackages,
|
||||||
GetFirstActiveSapforPackage,
|
GetFirstActiveSapforPackages,
|
||||||
SapforPackageNeedsKill,
|
SapforPackageNeedsKill,
|
||||||
UpdateActiveSapforPackages,
|
UpdateActiveSapforPackages,
|
||||||
DownloadDVMPackage,
|
DownloadDVMPackage,
|
||||||
@@ -80,5 +80,6 @@ public enum ServerCode {
|
|||||||
ReplaceTestCode,
|
ReplaceTestCode,
|
||||||
ReplaceTestsCodes,
|
ReplaceTestsCodes,
|
||||||
GetSapforPackagesJson,
|
GetSapforPackagesJson,
|
||||||
|
GetFirstsActiveDVMPackages
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ public enum TasksPackageState implements StatusEnum {
|
|||||||
RunningExecution,
|
RunningExecution,
|
||||||
//--
|
//--
|
||||||
RunningEnd, //скачка архива
|
RunningEnd, //скачка архива
|
||||||
//---------------------------------------
|
|
||||||
Analysis,
|
Analysis,
|
||||||
|
//-
|
||||||
Done,
|
Done,
|
||||||
Aborted;
|
Aborted;
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import Visual_DVM_2021.Passes.Server.TestingSystemPass;
|
|||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Vector;
|
||||||
public abstract class TestingPlanner<P extends TestingPackage> {
|
public abstract class TestingPlanner<P extends TestingPackage> {
|
||||||
protected P testingPackage;
|
protected P testingPackage;
|
||||||
protected int getSleepMillis() {
|
protected int getSleepMillis() {
|
||||||
@@ -83,7 +84,7 @@ public abstract class TestingPlanner<P extends TestingPackage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//---
|
//---
|
||||||
protected abstract ServerCode getActivePackageCode();
|
protected abstract ServerCode getActivePackagesCode();
|
||||||
protected abstract ServerCode getCheckIfNeedsKillCode();
|
protected abstract ServerCode getCheckIfNeedsKillCode();
|
||||||
protected abstract TasksPackageState getStateAfterStart();
|
protected abstract TasksPackageState getStateAfterStart();
|
||||||
protected void InitSessionCredentials() {
|
protected void InitSessionCredentials() {
|
||||||
@@ -130,11 +131,9 @@ public abstract class TestingPlanner<P extends TestingPackage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ---
|
// ---
|
||||||
public void Perform() {
|
protected void PerformPackage(TestingPackage package_in) throws Exception{
|
||||||
try {
|
testingPackage = (P) package_in;
|
||||||
testingPackage = null;
|
//--
|
||||||
testingPackage = (P) ServerCommand(getActivePackageCode());
|
|
||||||
if (testingPackage != null) {
|
|
||||||
Print(testingPackage.id + ":" + testingPackage.state.getDescription());
|
Print(testingPackage.id + ":" + testingPackage.state.getDescription());
|
||||||
//--
|
//--
|
||||||
InitSessionCredentials();
|
InitSessionCredentials();
|
||||||
@@ -166,8 +165,15 @@ public abstract class TestingPlanner<P extends TestingPackage> {
|
|||||||
testingPackage = null;
|
testingPackage = null;
|
||||||
System.gc();
|
System.gc();
|
||||||
//--
|
//--
|
||||||
|
|
||||||
}
|
}
|
||||||
//else Print(this.getClass().getSimpleName()+": no active package found");
|
public void Perform() {
|
||||||
|
try {
|
||||||
|
testingPackage = null;
|
||||||
|
Vector<P> activePackages = (Vector<P>) ServerCommand(getActivePackagesCode());
|
||||||
|
// System.out.println(this.getClass().getSimpleName()+": found "+activePackages.size()+" active packages"); //Тесты:
|
||||||
|
for (P activePackage: activePackages)
|
||||||
|
PerformPackage(activePackage);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -202,10 +202,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
|||||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||||
RefreshDVMTests((Account) request.object, Integer.parseInt(request.arg));
|
RefreshDVMTests((Account) request.object, Integer.parseInt(request.arg));
|
||||||
break;
|
break;
|
||||||
case GetFirstActiveDVMPackage:
|
|
||||||
Print("Получить первый активный пакет задач DVM");
|
|
||||||
GetFirstActiveDVMPackage();
|
|
||||||
break;
|
|
||||||
case DVMPackageNeedsKill:
|
case DVMPackageNeedsKill:
|
||||||
Print("Проверить нуждается ли пакет DVM в убийстве");
|
Print("Проверить нуждается ли пакет DVM в убийстве");
|
||||||
DVMPackageNeedsKill();
|
DVMPackageNeedsKill();
|
||||||
@@ -214,9 +210,9 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
|||||||
Print("Получить данные по пакетам DVM");
|
Print("Получить данные по пакетам DVM");
|
||||||
UpdateActiveDVMPackages();
|
UpdateActiveDVMPackages();
|
||||||
break;
|
break;
|
||||||
case GetFirstActiveSapforPackage:
|
case GetFirstActiveSapforPackages:
|
||||||
Print("Получить первый активный пакет задач SAPFOR");
|
Print("Получить первый активный пакет задач SAPFOR");
|
||||||
GetFirstActiveSapforPackage();
|
GetFirstActiveSapforPackages();
|
||||||
break;
|
break;
|
||||||
case SapforPackageNeedsKill:
|
case SapforPackageNeedsKill:
|
||||||
Print("Проверить нуждает ли пакет SAPFOR в убийстве");
|
Print("Проверить нуждает ли пакет SAPFOR в убийстве");
|
||||||
@@ -254,6 +250,10 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
|||||||
Print("Получить информацию о задачах пакетов SAPFOR");
|
Print("Получить информацию о задачах пакетов SAPFOR");
|
||||||
GetSapforPackagesJson();
|
GetSapforPackagesJson();
|
||||||
break;
|
break;
|
||||||
|
case GetFirstsActiveDVMPackages:
|
||||||
|
Print("Получить первые активные пакеты задач DVM на машинах");
|
||||||
|
GetFirstActiveDVMPackagesByMachines();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
|
throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
|
||||||
}
|
}
|
||||||
@@ -385,24 +385,13 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------->>>
|
private void GetFirstActiveDVMPackagesByMachines() {
|
||||||
void GetFirstActiveDVMPackage() throws Exception {
|
|
||||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||||
response.object = null;
|
response.object = db.getFirstActiveDVMPackagesCopies();
|
||||||
DVMPackage dvmPackage = db.getFirstActiveDVMPackage();
|
|
||||||
if (dvmPackage != null) {
|
|
||||||
//нужно вернуть копию объекта с иным адресом!!
|
|
||||||
response.object = new DVMPackage(dvmPackage);
|
|
||||||
}
|
}
|
||||||
}
|
private void GetFirstActiveSapforPackages() throws Exception {
|
||||||
private void GetFirstActiveSapforPackage() throws Exception {
|
|
||||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||||
response.object = null;
|
response.object = db.getFirstActiveSapforPackagesCopies();
|
||||||
SapforPackage sapforPackage = db.getFirstActiveSapforPackage();
|
|
||||||
if (sapforPackage != null) {
|
|
||||||
//нужно вернуть копию объекта с иным адресом!!
|
|
||||||
response.object = new SapforPackage(sapforPackage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//---
|
//---
|
||||||
void UpdateActiveDVMPackages() throws Exception {
|
void UpdateActiveDVMPackages() throws Exception {
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
|
|||||||
import Visual_DVM_2021.Passes.PassCode_2021;
|
import Visual_DVM_2021.Passes.PassCode_2021;
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Vector;
|
||||||
public class TestsDatabase extends SQLiteDatabase {
|
public class TestsDatabase extends SQLiteDatabase {
|
||||||
public ConfigurationDBTable configurations;
|
public ConfigurationDBTable configurations;
|
||||||
public TestDBTable tests;
|
public TestDBTable tests;
|
||||||
@@ -52,64 +55,93 @@ public class TestsDatabase extends SQLiteDatabase {
|
|||||||
public PassCode_2021 getSynchronizePassCode() {
|
public PassCode_2021 getSynchronizePassCode() {
|
||||||
return PassCode_2021.SynchronizeTests;
|
return PassCode_2021.SynchronizeTests;
|
||||||
}
|
}
|
||||||
public DVMPackage getFirstActiveDVMPackage() {
|
public Vector<SapforPackage> getFirstActiveSapforPackagesCopies() {
|
||||||
DVMPackage first_active = null;
|
Vector<SapforPackage> res = new Vector<>();
|
||||||
DVMPackage first_queued = null;
|
Vector<SapforPackage> packages = new Vector<>();
|
||||||
if (!dvmPackages.Data.isEmpty()) {
|
SapforPackage activePackage = null;
|
||||||
for (DVMPackage p : dvmPackages.Data.values()) {
|
//1. получить активные пакеты.
|
||||||
switch (p.state) {
|
|
||||||
case Done:
|
|
||||||
case Aborted:
|
|
||||||
break;
|
|
||||||
case Queued:
|
|
||||||
if (first_queued == null) first_queued = p;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (first_active == null) first_active = p; //это и будет первый активный.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (first_active != null) return first_active;
|
|
||||||
if (first_queued != null) {
|
|
||||||
first_queued.state = TasksPackageState.TestsSynchronize;
|
|
||||||
try {
|
|
||||||
Update(first_queued);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return first_queued;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public SapforPackage getFirstActiveSapforPackage() {
|
|
||||||
SapforPackage first_active = null;
|
|
||||||
SapforPackage first_queued = null;
|
|
||||||
if (!sapforPackages.Data.isEmpty()) {
|
|
||||||
for (SapforPackage p : sapforPackages.Data.values()) {
|
for (SapforPackage p : sapforPackages.Data.values()) {
|
||||||
switch (p.state) {
|
switch (p.state) {
|
||||||
case Done:
|
case Done:
|
||||||
case Aborted:
|
case Aborted:
|
||||||
break;
|
case Draft:
|
||||||
case Queued:
|
|
||||||
if (first_queued == null) first_queued = p;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (first_active == null) first_active = p; //это и будет первый активный.
|
packages.add(p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (first_active != null) return first_active;
|
//2. отсортировать по приоритету.
|
||||||
if (first_queued != null) {
|
packages.sort(new Comparator<SapforPackage>() {
|
||||||
first_queued.state = TasksPackageState.TestsSynchronize;
|
@Override
|
||||||
|
public int compare(SapforPackage o1, SapforPackage o2) {
|
||||||
|
return Integer.compare(o1.state.ordinal(), o2.state.ordinal());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!packages.isEmpty()) {
|
||||||
|
activePackage = packages.lastElement();
|
||||||
|
if (activePackage.state.equals(TasksPackageState.Queued)) {
|
||||||
|
activePackage.state = TasksPackageState.TestsSynchronize;
|
||||||
try {
|
try {
|
||||||
Update(first_queued);
|
Update(activePackage);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return first_queued;
|
res.add(new SapforPackage(activePackage));
|
||||||
|
; //копия чтобы не было конфликта доступа с нитью планировщика.
|
||||||
}
|
}
|
||||||
return null;
|
return res;
|
||||||
|
}
|
||||||
|
public Vector<DVMPackage> getFirstActiveDVMPackagesCopies() {
|
||||||
|
Vector<DVMPackage> res = new Vector<>();
|
||||||
|
//--
|
||||||
|
LinkedHashMap<String, Vector<DVMPackage>> packagesByMachines = new LinkedHashMap<>();
|
||||||
|
//----
|
||||||
|
//1. Получить список активных пакетов по машинам.
|
||||||
|
for (DVMPackage dvmPackage : dvmPackages.Data.values()) {
|
||||||
|
switch (dvmPackage.state) {
|
||||||
|
case Done:
|
||||||
|
case Aborted:
|
||||||
|
case Draft:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//активен.
|
||||||
|
Vector<DVMPackage> packages = null;
|
||||||
|
//--
|
||||||
|
if (packagesByMachines.containsKey(dvmPackage.machine_address)) {
|
||||||
|
packages = packagesByMachines.get(dvmPackage.machine_address);
|
||||||
|
} else {
|
||||||
|
packages = new Vector<>();
|
||||||
|
packagesByMachines.put(dvmPackage.machine_address, packages);
|
||||||
|
}
|
||||||
|
packages.add(dvmPackage);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//2. Выбрать для каждой машины наиболее приоритетный пакет.
|
||||||
|
for (String machine : packagesByMachines.keySet()) {
|
||||||
|
Vector<DVMPackage> packages = packagesByMachines.get(machine);
|
||||||
|
if (!packages.isEmpty()) {
|
||||||
|
packages.sort(new Comparator<DVMPackage>() {
|
||||||
|
@Override
|
||||||
|
public int compare(DVMPackage o1, DVMPackage o2) {
|
||||||
|
return Integer.compare(o1.state.ordinal(), o2.state.ordinal());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//-
|
||||||
|
DVMPackage activePackage = packages.lastElement();
|
||||||
|
if (activePackage.state.equals(TasksPackageState.Queued)) {
|
||||||
|
activePackage.state = TasksPackageState.TestsSynchronize;
|
||||||
|
try {
|
||||||
|
Update(activePackage);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.add(new DVMPackage(activePackage)); //копия чтобы не было конфликта доступа с нитью планировщика.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,8 +125,8 @@ public class DVMTestingPlanner extends TestingPlanner<DVMPackage> {
|
|||||||
}
|
}
|
||||||
//---
|
//---
|
||||||
@Override
|
@Override
|
||||||
protected ServerCode getActivePackageCode() {
|
protected ServerCode getActivePackagesCode() {
|
||||||
return ServerCode.GetFirstActiveDVMPackage;
|
return ServerCode.GetFirstsActiveDVMPackages;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected ServerCode getCheckIfNeedsKillCode() {
|
protected ServerCode getCheckIfNeedsKillCode() {
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ import java.util.Date;
|
|||||||
public class SapforTestingPlanner extends TestingPlanner<SapforPackage> {
|
public class SapforTestingPlanner extends TestingPlanner<SapforPackage> {
|
||||||
File workspace;
|
File workspace;
|
||||||
@Override
|
@Override
|
||||||
protected ServerCode getActivePackageCode() {
|
protected ServerCode getActivePackagesCode() {
|
||||||
return ServerCode.GetFirstActiveSapforPackage;
|
return ServerCode.GetFirstActiveSapforPackages;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected ServerCode getCheckIfNeedsKillCode() {
|
protected ServerCode getCheckIfNeedsKillCode() {
|
||||||
@@ -139,4 +139,5 @@ public class SapforTestingPlanner extends TestingPlanner<SapforPackage> {
|
|||||||
killer.waitFor();
|
killer.waitFor();
|
||||||
Print("done!");
|
Print("done!");
|
||||||
}
|
}
|
||||||
|
//--
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ public class MainForm extends Form implements MainWindow {
|
|||||||
res += selected_tests.size();
|
res += selected_tests.size();
|
||||||
}
|
}
|
||||||
//--
|
//--
|
||||||
globalTabs.setTitleAt(3, "Тесты: " + res);
|
globalTabs.setTitleAt(2, "Тесты: " + res);
|
||||||
}
|
}
|
||||||
private void SaveTestingPanel() {
|
private void SaveTestingPanel() {
|
||||||
if (testingForm != null) {
|
if (testingForm != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user