mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
tests: improved load tests (added creature stats, improved progress bar)
This commit is contained in:
parent
7035736a6c
commit
f5b901beb4
3 changed files with 52 additions and 11 deletions
|
|
@ -33,6 +33,7 @@ public class LoadCallbackClient implements CallbackClient {
|
||||||
|
|
||||||
private final String logsPrefix;
|
private final String logsPrefix;
|
||||||
private final Boolean showLogsAsHtml; // original game logs in HTML, but it can be converted to txt for more readable console
|
private final Boolean showLogsAsHtml; // original game logs in HTML, but it can be converted to txt for more readable console
|
||||||
|
private String globalProgress = ""; // progress [=20, +21, +17], AI game #9: ---
|
||||||
|
|
||||||
public LoadCallbackClient(boolean joinGameChat, String logsPrefix, Boolean showLogsAsHtml) {
|
public LoadCallbackClient(boolean joinGameChat, String logsPrefix, Boolean showLogsAsHtml) {
|
||||||
this.joinGameChat = joinGameChat;
|
this.joinGameChat = joinGameChat;
|
||||||
|
|
@ -40,6 +41,10 @@ public class LoadCallbackClient implements CallbackClient {
|
||||||
this.showLogsAsHtml = showLogsAsHtml;
|
this.showLogsAsHtml = showLogsAsHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void updateGlobalProgress(String globalProgress) {
|
||||||
|
this.globalProgress = globalProgress;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNewConnection() {
|
public void onNewConnection() {
|
||||||
// nothing to do, only one time connection for LoadClient
|
// nothing to do, only one time connection for LoadClient
|
||||||
|
|
@ -199,7 +204,7 @@ public class LoadCallbackClient implements CallbackClient {
|
||||||
mes += "T" + this.gameView.getTurn() + "-" + this.gameView.getStep().getIndex() + ", L:" + p.getLibraryCount() + ", H:" + getPlayer().getHandCount() + ": ";
|
mes += "T" + this.gameView.getTurn() + "-" + this.gameView.getStep().getIndex() + ", L:" + p.getLibraryCount() + ", H:" + getPlayer().getHandCount() + ": ";
|
||||||
}
|
}
|
||||||
|
|
||||||
return logsPrefix + ": " + mes;
|
return globalProgress + ", " + logsPrefix + ": " + mes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSession(Session session) {
|
public void setSession(Session session) {
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,7 @@ public class LoadTest {
|
||||||
|
|
||||||
tasksProgress.update(taskNumber, state == TableState.FINISHED, gameView == null ? 0 : gameView.getTurn());
|
tasksProgress.update(taskNumber, state == TableState.FINISHED, gameView == null ? 0 : gameView.getTurn());
|
||||||
String globalProgress = tasksProgress.getInfo();
|
String globalProgress = tasksProgress.getInfo();
|
||||||
|
monitor.client.updateGlobalProgress(globalProgress);
|
||||||
|
|
||||||
if (gameView != null && checkGame != null) {
|
if (gameView != null && checkGame != null) {
|
||||||
logger.info(globalProgress + ", " + checkGame.getTableName() + ": ---");
|
logger.info(globalProgress + ", " + checkGame.getTableName() + ": ---");
|
||||||
|
|
@ -283,12 +284,13 @@ public class LoadTest {
|
||||||
if (Objects.equals(gameView.getActivePlayerId(), p.getPlayerId())) {
|
if (Objects.equals(gameView.getActivePlayerId(), p.getPlayerId())) {
|
||||||
activeInfo = " (active)";
|
activeInfo = " (active)";
|
||||||
}
|
}
|
||||||
logger.info(String.format("%s, %s, status: %s - Life=%d; Lib=%d;%s",
|
logger.info(String.format("%s, %s, status: %s - Life=%d; Lib=%d; CRs=%d%s;",
|
||||||
globalProgress,
|
globalProgress,
|
||||||
checkGame.getTableName(),
|
checkGame.getTableName(),
|
||||||
p.getName(),
|
p.getName(),
|
||||||
p.getLife(),
|
p.getLife(),
|
||||||
p.getLibraryCount(),
|
p.getLibraryCount(),
|
||||||
|
p.getBattlefield().values().stream().filter(CardView::isCreature).mapToInt(x -> 1).sum(),
|
||||||
activeInfo
|
activeInfo
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
@ -331,7 +333,7 @@ public class LoadTest {
|
||||||
// play multiple AI games with CLIENT side code (catch every GameView changes from the server)
|
// play multiple AI games with CLIENT side code (catch every GameView changes from the server)
|
||||||
|
|
||||||
int singleGameSID = 0; // set sid for same deck games, set 0 for random decks
|
int singleGameSID = 0; // set sid for same deck games, set 0 for random decks
|
||||||
int gamesAmount = 10; // games per run
|
int gamesAmount = 5; // games per run
|
||||||
boolean isRunParallel = true; // can generate too much logs in test run, so search server logs for possible errors
|
boolean isRunParallel = true; // can generate too much logs in test run, so search server logs for possible errors
|
||||||
|
|
||||||
ExecutorService executerService;
|
ExecutorService executerService;
|
||||||
|
|
@ -848,6 +850,22 @@ public class LoadTest {
|
||||||
return finalGameView == null ? 0 : this.finalGameView.getPlayers().get(1).getLife();
|
return finalGameView == null ? 0 : this.finalGameView.getPlayers().get(1).getLife();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCreaturesCount1() {
|
||||||
|
return finalGameView == null ? 0 : this.finalGameView.getPlayers().get(0).getBattlefield().values()
|
||||||
|
.stream()
|
||||||
|
.filter(CardView::isCreature)
|
||||||
|
.mapToInt(x -> 1)
|
||||||
|
.sum();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCreaturesCount2() {
|
||||||
|
return finalGameView == null ? 0 : this.finalGameView.getPlayers().get(1).getBattlefield().values()
|
||||||
|
.stream()
|
||||||
|
.filter(CardView::isCreature)
|
||||||
|
.mapToInt(x -> 1)
|
||||||
|
.sum();
|
||||||
|
}
|
||||||
|
|
||||||
public int getTurn() {
|
public int getTurn() {
|
||||||
return finalGameView == null ? 0 : this.finalGameView.getTurn();
|
return finalGameView == null ? 0 : this.finalGameView.getTurn();
|
||||||
}
|
}
|
||||||
|
|
@ -863,8 +881,8 @@ public class LoadTest {
|
||||||
|
|
||||||
private static class LoadTestGameResultsList extends HashMap<Integer, LoadTestGameResult> {
|
private static class LoadTestGameResultsList extends HashMap<Integer, LoadTestGameResult> {
|
||||||
|
|
||||||
private static final String tableFormatHeader = "|%-10s|%-15s|%-20s|%-10s|%-10s|%-15s|%-15s|%-10s|%-20s|%n";
|
private static final String tableFormatHeader = "|%-10s|%-15s|%-20s|%-10s|%-10s|%-10s|%-10s|%-15s|%-15s|%-10s|%n";
|
||||||
private static final String tableFormatData = "|%-10s|%15s|%20s|%10s|%10s|%15s|%15s|%10s|%20s|%n";
|
private static final String tableFormatData = "|%-10s|%15s|%20s|%10s|%10s|%10s|%10s|%15s|%15s|%10s|%n";
|
||||||
|
|
||||||
public LoadTestGameResult createGame(int index, String name, long randomSeed) {
|
public LoadTestGameResult createGame(int index, String name, long randomSeed) {
|
||||||
if (this.containsKey(index)) {
|
if (this.containsKey(index)) {
|
||||||
|
|
@ -882,8 +900,10 @@ public class LoadTest {
|
||||||
"random sid",
|
"random sid",
|
||||||
"errors",
|
"errors",
|
||||||
"turn",
|
"turn",
|
||||||
"player 1",
|
"life p1",
|
||||||
"player 2",
|
"life p2",
|
||||||
|
"creatures p1",
|
||||||
|
"creatures p2",
|
||||||
"time, sec",
|
"time, sec",
|
||||||
"time per turn, sec"
|
"time per turn, sec"
|
||||||
);
|
);
|
||||||
|
|
@ -901,8 +921,10 @@ public class LoadTest {
|
||||||
String.valueOf(gameResult.randomSeed), // "random sid",
|
String.valueOf(gameResult.randomSeed), // "random sid",
|
||||||
String.valueOf(gameResult.getTotalErrorsCount()), // "errors",
|
String.valueOf(gameResult.getTotalErrorsCount()), // "errors",
|
||||||
String.valueOf(gameResult.getTurn()), //"turn",
|
String.valueOf(gameResult.getTurn()), //"turn",
|
||||||
String.valueOf(gameResult.getLife1()), //"player 1",
|
String.valueOf(gameResult.getLife1()), //"life p1",
|
||||||
String.valueOf(gameResult.getLife2()), //"player 2",
|
String.valueOf(gameResult.getLife2()), //"life p2",
|
||||||
|
String.valueOf(gameResult.getCreaturesCount1()), //"creatures p1",
|
||||||
|
String.valueOf(gameResult.getCreaturesCount2()), //"creatures p2",
|
||||||
String.format("%.3f", (float) gameResult.getDurationMs() / 1000), //"time, sec",
|
String.format("%.3f", (float) gameResult.getDurationMs() / 1000), //"time, sec",
|
||||||
String.format("%.3f", ((float) gameResult.getDurationMs() / 1000) / gameResult.getTurn()) //"per turn, sec"
|
String.format("%.3f", ((float) gameResult.getDurationMs() / 1000) / gameResult.getTurn()) //"per turn, sec"
|
||||||
);
|
);
|
||||||
|
|
@ -916,8 +938,10 @@ public class LoadTest {
|
||||||
"total, secs: " + String.format("%.3f", (float) this.getTotalDurationMs() / 1000), // "random sid",
|
"total, secs: " + String.format("%.3f", (float) this.getTotalDurationMs() / 1000), // "random sid",
|
||||||
String.valueOf(this.getTotalErrorsCount()), // errors
|
String.valueOf(this.getTotalErrorsCount()), // errors
|
||||||
String.valueOf(this.getAvgTurn()), // turn
|
String.valueOf(this.getAvgTurn()), // turn
|
||||||
String.valueOf(this.getAvgLife1()), // player 1
|
String.valueOf(this.getAvgLife1()), // life p1
|
||||||
String.valueOf(this.getAvgLife2()), // player 2
|
String.valueOf(this.getAvgLife2()), // life p2
|
||||||
|
String.valueOf(this.getAvgCreaturesCount1()), // creatures p1
|
||||||
|
String.valueOf(this.getAvgCreaturesCount2()), // creatures p2
|
||||||
String.valueOf(String.format("%.3f", (float) this.getAvgDurationMs() / 1000)), // time, sec
|
String.valueOf(String.format("%.3f", (float) this.getAvgDurationMs() / 1000)), // time, sec
|
||||||
String.valueOf(String.format("%.3f", (float) this.getAvgDurationPerTurnMs() / 1000)) // time per turn, sec
|
String.valueOf(String.format("%.3f", (float) this.getAvgDurationPerTurnMs() / 1000)) // time per turn, sec
|
||||||
);
|
);
|
||||||
|
|
@ -940,6 +964,14 @@ public class LoadTest {
|
||||||
return this.size() == 0 ? 0 : this.values().stream().mapToInt(LoadTestGameResult::getLife2).sum() / this.size();
|
return this.size() == 0 ? 0 : this.values().stream().mapToInt(LoadTestGameResult::getLife2).sum() / this.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getAvgCreaturesCount1() {
|
||||||
|
return this.size() == 0 ? 0 : this.values().stream().mapToInt(LoadTestGameResult::getCreaturesCount1).sum() / this.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getAvgCreaturesCount2() {
|
||||||
|
return this.size() == 0 ? 0 : this.values().stream().mapToInt(LoadTestGameResult::getCreaturesCount2).sum() / this.size();
|
||||||
|
}
|
||||||
|
|
||||||
private int getTotalDurationMs() {
|
private int getTotalDurationMs() {
|
||||||
return this.values().stream().mapToInt(LoadTestGameResult::getDurationMs).sum();
|
return this.values().stream().mapToInt(LoadTestGameResult::getDurationMs).sum();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,10 @@ public class SimpleMageClient implements MageClient {
|
||||||
callbackClient = new LoadCallbackClient(joinGameChat, logsPrefix, showLogsAsHtml);
|
callbackClient = new LoadCallbackClient(joinGameChat, logsPrefix, showLogsAsHtml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void updateGlobalProgress(String globalProgress) {
|
||||||
|
callbackClient.updateGlobalProgress(globalProgress);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MageVersion getVersion() {
|
public MageVersion getVersion() {
|
||||||
return version;
|
return version;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue