From a0f02fc8b78cbb09e10e977c87f686db8040dfa9 Mon Sep 17 00:00:00 2001 From: betasteward Date: Fri, 21 Aug 2015 15:55:24 -0400 Subject: [PATCH] moved MultiConnectTest to Mage.Servers.Tests project --- .../mage/client/game/MultiConnectTest.java | 315 ------------------ .../java/org/mage/server/test/TestClient.java | 6 +- .../server/test/load/ConnectionLoadTest.java | 84 +++++ 3 files changed, 89 insertions(+), 316 deletions(-) delete mode 100644 Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java create mode 100644 Mage.Server.Tests/src/test/java/org/mage/server/test/load/ConnectionLoadTest.java diff --git a/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java b/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java deleted file mode 100644 index 51be123cb69..00000000000 --- a/Mage.Client/src/test/java/mage/client/game/MultiConnectTest.java +++ /dev/null @@ -1,315 +0,0 @@ -package mage.client.game; - -import java.io.Serializable; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.CountDownLatch; -import javax.swing.SwingUtilities; -import mage.choices.Choice; -import mage.client.components.MageUI; -import mage.interfaces.ServerState; -import mage.remote.Connection; -import mage.utils.MageVersion; -import mage.view.AbilityPickerView; -import mage.view.CardsView; -import mage.view.ChatMessage; -import mage.view.DeckView; -import mage.view.DraftPickView; -import mage.view.DraftView; -import mage.view.GameClientMessage; -import mage.view.GameEndView; -import mage.view.GameView; -import mage.view.UserRequestMessage; -import org.apache.log4j.Logger; -import org.junit.Ignore; -import org.mage.network.Client; -import org.mage.network.interfaces.MageClient; -import org.mage.network.messages.MessageType; - -/** - * Test for emulating the connection from multi mage clients. - * - * @author ayratn - */ -@Ignore -public class MultiConnectTest { - - private static final Logger logger = Logger.getLogger(MultiConnectTest.class); - - /** - * Amount of games to be started from this test. - */ - private static final Integer USER_CONNECT_COUNT = 200; - - private static final CountDownLatch latch = new CountDownLatch(USER_CONNECT_COUNT); - - private static final MageVersion version = new MageVersion(MageVersion.MAGE_VERSION_MAJOR, MageVersion.MAGE_VERSION_MINOR, MageVersion.MAGE_VERSION_PATCH, MageVersion.MAGE_VERSION_MINOR_PATCH, MageVersion.MAGE_VERSION_INFO); - - private static volatile int connected; - - private final Object sync = new Object(); - private MageUI ui; - - private class ClientMock implements MageClient { - - private Client client; - private final String username; - private ServerState serverState; - - public ClientMock(String username) { - this.username = username; - } - - public void connect() { - client = new Client(this); - Connection connection = new Connection(); - connection.setUsername(username); - connection.setHost("localhost"); - connection.setPort(17171); - connection.setSSL(true); - connection.setProxyType(Connection.ProxyType.NONE); - - client.connect(connection, version); - } - - public MageVersion getVersion() { - logger.info("getVersion"); - return version; - } - - @Override - public void connected(String message) { - logger.info("connected: " + message); - connected++; - } - - @Override - public void disconnected(boolean errorCall) { - logger.info("disconnected"); - } - - public void showMessage(String message) { - logger.info("showMessage: " + message); - } - - public void showError(String message) { - logger.info("showError: " + message); - } - - @Override - public void inform(String title, String message, MessageType type) { - if (type == MessageType.ERROR) { - showError(message); - } - else { - showMessage(message); - } - } - - @Override - public void receiveChatMessage(UUID chatId, ChatMessage message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void receiveBroadcastMessage(String message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void clientRegistered(ServerState state) { - this.serverState = state; - } - - @Override - public ServerState getServerState() { - return serverState; - } - - @Override - public void joinedTable(UUID roomId, UUID tableId, UUID chatId, boolean owner, boolean tournament) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameStarted(UUID gameId, UUID playerId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void initGame(UUID gameId, GameView gameView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameAsk(UUID gameId, GameView gameView, String question, Map options) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameTarget(UUID gameId, GameView gameView, String question, CardsView cardView, Set targets, boolean required, Map options) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameChooseAbility(UUID gameId, AbilityPickerView abilities) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameChoosePile(UUID gameId, String message, CardsView pile1, CardsView pile2) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameChooseChoice(UUID gameId, Choice choice) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gamePlayMana(UUID gameId, GameView gameView, String message, Map options) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gamePlayXMana(UUID gameId, GameView gameView, String message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameSelectAmount(UUID gameId, String message, int min, int max) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameSelect(UUID gameId, GameView gameView, String message, Map options) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameEndInfo(UUID gameId, GameEndView view) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void userRequestDialog(UUID gameId, UserRequestMessage userRequestMessage) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameUpdate(UUID gameId, GameView gameView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameInform(UUID gameId, GameClientMessage message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameInformPersonal(UUID gameId, GameClientMessage message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameOver(UUID gameId, String message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void gameError(UUID gameId, String message) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void sideboard(UUID tableId, DeckView deck, int time, boolean limited) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void construct(UUID tableId, DeckView deck, int time) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void startDraft(UUID draftId, UUID playerId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void draftInit(UUID draftId, DraftPickView draftPickView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void draftUpdate(UUID draftId, DraftView draftView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void draftPick(UUID draftId, DraftPickView draftPickView) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void draftOver(UUID draftId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void showTournament(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void tournamentStarted(UUID tournamentId) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void watchGame(UUID gameId, UUID chatId, GameView game) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - } - - public static void main(String[] argv) throws Exception { - new MultiConnectTest().startMultiGames(); - } - - public void startMultiGames() throws Exception { - for (int i = 0; i < USER_CONNECT_COUNT; i++) { - logger.info("Starting game"); - connect(i); - } - latch.await(); - logger.info("Finished"); - logger.info("Connected: " + connected + " of " + USER_CONNECT_COUNT); - } - - private void connect(final int index) throws Exception { - Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread t, Throwable e) { - logger.fatal(null, e); - } - }); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - String username = "player" + index; - ClientMock client = new ClientMock(username); - client.connect(); - latch.countDown(); - } - }); - } - - private void sleep(int ms) { - try { - Thread.sleep(ms); - } catch (InterruptedException e) { - logger.error("Error", e); - } - } -} diff --git a/Mage.Server.Tests/src/test/java/org/mage/server/test/TestClient.java b/Mage.Server.Tests/src/test/java/org/mage/server/test/TestClient.java index 05ebb8fa3b8..d153441bc7c 100644 --- a/Mage.Server.Tests/src/test/java/org/mage/server/test/TestClient.java +++ b/Mage.Server.Tests/src/test/java/org/mage/server/test/TestClient.java @@ -55,6 +55,10 @@ public class TestClient implements MageClient { return client.connect(connection, MageVersion.getCurrent()); } + public void disconnect(boolean error) { + client.disconnect(error); + } + public boolean isConnected() { return client.isConnected(); } @@ -65,7 +69,7 @@ public class TestClient implements MageClient { @Override public void disconnected(boolean error) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + // do nothing } @Override diff --git a/Mage.Server.Tests/src/test/java/org/mage/server/test/load/ConnectionLoadTest.java b/Mage.Server.Tests/src/test/java/org/mage/server/test/load/ConnectionLoadTest.java new file mode 100644 index 00000000000..00ccebd00ed --- /dev/null +++ b/Mage.Server.Tests/src/test/java/org/mage/server/test/load/ConnectionLoadTest.java @@ -0,0 +1,84 @@ +package org.mage.server.test.load; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import mage.server.ServerMain; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.server.test.TestClient; + +/** + * + * @author BetaSteward + */ +public class ConnectionLoadTest { + + @BeforeClass + public static void setUpClass() { + new Thread(new Runnable() { + @Override + public void run() { + ServerMain.main(new String[] {"-fastDbMode=true"}); +// ServerMain.main(new String[] {""}); + } + }).start(); + try { + waitForServer("ACTIVE"); //wait for server to startup + } catch (InterruptedException | IOException ex) { + } + } + + public static void waitForServer(String message) throws FileNotFoundException, IOException, InterruptedException { + FileReader fr = new FileReader("mageserver.log"); + BufferedReader br = new BufferedReader(fr); + + do { //read until end-of-file + String line = br.readLine(); + if (line == null) { + break; + } + } while (true); + + do { //read only new lines + String line = br.readLine(); + if (line == null) { + Thread.sleep(1000); + } + else { + if (line.contains(message)) + break; + } + } while (true); + } + + private static final Integer USER_CONNECT_COUNT = 200; + + @Test + @Ignore + public void connectTest() { + Map users = new HashMap<>(); + for (int i = 0; i < USER_CONNECT_COUNT; i++) { + String username = "player" + i; + TestClient client = new TestClient(); + client.connect(username); + users.put(username, client); + } + try { + Thread.sleep(10000); + } catch (InterruptedException ex) { + } + for (TestClient client: users.values()) { + client.disconnect(false); + } + for (TestClient client: users.values()) { + Assert.assertFalse("user did not disconnect", client.isConnected()); + } + } + +}