From 672b8390b9d451168a0e4036852760ac4cb6abc3 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sun, 13 Feb 2011 21:09:34 +0000 Subject: [PATCH] Adding new test case for game list updates. --- tests/src/pokerth_test/AllTests.java | 1 + tests/src/pokerth_test/GameListTest.java | 177 +++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 tests/src/pokerth_test/GameListTest.java diff --git a/tests/src/pokerth_test/AllTests.java b/tests/src/pokerth_test/AllTests.java index 5dc3bbef..599ba2da 100644 --- a/tests/src/pokerth_test/AllTests.java +++ b/tests/src/pokerth_test/AllTests.java @@ -26,6 +26,7 @@ import org.junit.runners.Suite; @Suite.SuiteClasses( { AnnounceTest.class, PlayerListTest.class, + GameListTest.class, GuestLoginTest.class, AuthLoginTest.class, PlayerInfoTest.class, diff --git a/tests/src/pokerth_test/GameListTest.java b/tests/src/pokerth_test/GameListTest.java new file mode 100644 index 00000000..c8b8eb91 --- /dev/null +++ b/tests/src/pokerth_test/GameListTest.java @@ -0,0 +1,177 @@ +package pokerth_test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.net.Socket; +import java.util.ArrayList; +import java.util.Collection; + +import org.junit.Test; + +import pokerth_protocol.GameListMessage; +import pokerth_protocol.GameListNew; +import pokerth_protocol.NetGameInfo; +import pokerth_protocol.NetGameMode; +import pokerth_protocol.PokerTHMessage; +import pokerth_protocol.NetGameInfo.EndRaiseModeEnumType; +import pokerth_protocol.NetGameInfo.NetGameTypeEnumType; + + +public class GameListTest extends TestBase { + + protected void checkGameListNewMsg(long myId, GameListNew gameListNew, NetGameMode.EnumType mode, NetGameInfo gameInfo) { + assertEquals(NetGameMode.EnumType.gameCreated, gameListNew.getGameMode().getValue()); + assertTrue(!gameListNew.getIsPrivate()); + assertEquals(myId, gameListNew.getAdminPlayerId().getValue().longValue()); + NetGameInfo receivedGameInfo = gameListNew.getGameInfo(); + assertEquals(gameInfo.getDelayBetweenHands(), receivedGameInfo.getDelayBetweenHands()); + assertEquals(gameInfo.getEndRaiseMode().getValue(), receivedGameInfo.getEndRaiseMode().getValue()); + assertEquals(gameInfo.getEndRaiseSmallBlindValue(), receivedGameInfo.getEndRaiseSmallBlindValue()); + assertEquals(gameInfo.getFirstSmallBlind(), receivedGameInfo.getFirstSmallBlind()); + assertEquals(gameInfo.getGameName(), receivedGameInfo.getGameName()); + assertTrue(receivedGameInfo.getManualBlinds().isEmpty()); + assertEquals(gameInfo.getMaxNumPlayers(), receivedGameInfo.getMaxNumPlayers()); + assertEquals(gameInfo.getNetGameType().getValue(), receivedGameInfo.getNetGameType().getValue()); + assertEquals(gameInfo.getPlayerActionTimeout(), receivedGameInfo.getPlayerActionTimeout()); + assertEquals(gameInfo.getProposedGuiSpeed(), receivedGameInfo.getProposedGuiSpeed()); + assertTrue(gameInfo.getRaiseIntervalMode().isRaiseEveryHandsSelected()); + assertEquals(gameInfo.getStartMoney(), receivedGameInfo.getStartMoney()); + } + + @Test + public void testGameList() throws Exception { + + long myId = guestInit(); + + // Waiting for player list update. + PokerTHMessage msg; + msg = receiveMessage(); + assertTrue(msg.isPlayerListMessageSelected()); + + // Create a new game. + Collection l = new ArrayList(); + NetGameInfo gameInfo = createGameInfo(5, EndRaiseModeEnumType.EnumType.doubleBlinds, 0, 100, GuestUser + " game list normal game", l, 10, 0, 2, 2000); + sendMessage(createGameRequestMsg( + gameInfo, + NetGameTypeEnumType.EnumType.normalGame, + 10, + 5, + "", + false)); + + // Game list message is sent before join game ack. + msg = receiveMessage(); + assertTrue(msg.isGameListMessageSelected()); + GameListMessage gameListMsg = msg.getGameListMessage(); + long gameId = gameListMsg.getValue().getGameId().getValue(); + assertTrue(0 != gameListMsg.getValue().getGameId().getValue()); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListNewSelected()); + checkGameListNewMsg( + myId, + gameListMsg.getValue().getGameListNotification().getGameListNew(), + NetGameMode.EnumType.gameCreated, + gameInfo); + assertTrue(gameListMsg.getValue().getGameListNotification().getGameListNew().getPlayerIds().isEmpty()); + + // Next message is join game ack. + msg = receiveMessage(); + assertTrue(msg.isJoinGameReplyMessageSelected()); + assertTrue(msg.getJoinGameReplyMessage().getValue().getJoinGameResult().isJoinGameAckSelected()); + // Make sure game list id equals join game ack id. + assertEquals(gameId, msg.getJoinGameReplyMessage().getValue().getGameId().getValue().longValue()); + + // Next message is game list player joined. + msg = receiveMessage(); + assertTrue(msg.isGameListMessageSelected()); + gameListMsg = msg.getGameListMessage(); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListPlayerJoinedSelected()); + + // Check game list for newly connected players. + Socket s[] = new Socket[9]; + long playerId[] = new long[9]; + for (int i = 0; i < 9; i++) { + s[i] = new Socket("localhost", 7234); + String username = "test" + (i+1); + String password = username; + playerId[i] = userInit(s[i], username, password); + msg = receiveMessage(); + assertTrue(msg.isPlayerListMessageSelected()); + + do { + msg = receiveMessage(s[i]); + } while (msg.isPlayerListMessageSelected()); + assertTrue(msg.isGameListMessageSelected()); + gameListMsg = msg.getGameListMessage(); + assertEquals(gameId, gameListMsg.getValue().getGameId().getValue().longValue()); + assertTrue(0 != gameListMsg.getValue().getGameId().getValue()); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListNewSelected()); + checkGameListNewMsg( + myId, + gameListMsg.getValue().getGameListNotification().getGameListNew(), + NetGameMode.EnumType.gameCreated, + gameInfo); + assertEquals(1, gameListMsg.getValue().getGameListNotification().getGameListNew().getPlayerIds().size()); + assertEquals(myId, gameListMsg.getValue().getGameListNotification().getGameListNew().getPlayerIds().iterator().next().getValue().longValue()); + } + + // Let 9 players join the game. + for (int i = 0; i < 9; i++) { + sendMessage(joinGameRequestMsg(gameId, "", false), s[i]); + do { + msg = receiveMessage(s[i]); + } while (msg.isPlayerListMessageSelected()); + for (int j = 0; j < i; j++) { + assertTrue(msg.isGameListMessageSelected()); + gameListMsg = msg.getGameListMessage(); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListPlayerJoinedSelected()); + assertEquals(playerId[j], gameListMsg.getValue().getGameListNotification().getGameListPlayerJoined().getPlayerId().getValue().longValue()); + msg = receiveMessage(s[i]); + } + failOnErrorMessage(msg); + // Next message is join game ack. + assertTrue(msg.isJoinGameReplyMessageSelected()); + assertTrue(msg.getJoinGameReplyMessage().getValue().getJoinGameResult().isJoinGameAckSelected()); + // Make sure game list id equals join game ack id. + assertEquals(gameId, msg.getJoinGameReplyMessage().getValue().getGameId().getValue().longValue()); + + // Next message is game list player joined. + do { + msg = receiveMessage(s[i]); + } while (msg.isGamePlayerMessageSelected()); + assertTrue(msg.isGameListMessageSelected()); + gameListMsg = msg.getGameListMessage(); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListPlayerJoinedSelected()); + assertEquals(playerId[i], gameListMsg.getValue().getGameListNotification().getGameListPlayerJoined().getPlayerId().getValue().longValue()); + } + + // Wait for game list update which marks start of game. + do { + msg = receiveMessage(); + failOnErrorMessage(msg); + } while (!(msg.isGameListMessageSelected() && msg.getGameListMessage().getValue().getGameListNotification().isGameListUpdateSelected())); + + assertEquals(NetGameMode.EnumType.gameStarted, msg.getGameListMessage().getValue().getGameListNotification().getGameListUpdate().getGameMode().getValue()); + + // Wait for player left messages. + for (int i = 0; i < 9; i++) { + s[i].close(); + do { + msg = receiveMessage(); + failOnErrorMessage(msg); + } while (!msg.isGameListMessageSelected()); + gameListMsg = msg.getGameListMessage(); + assertTrue(gameListMsg.getValue().getGameListNotification().isGameListPlayerLeftSelected()); + assertEquals(playerId[i], gameListMsg.getValue().getGameListNotification().getGameListPlayerLeft().getPlayerId().getValue().longValue()); + } + + // Wait for game list update which marks close of game. + do { + msg = receiveMessage(); + failOnErrorMessage(msg); + } while (!(msg.isGameListMessageSelected() && msg.getGameListMessage().getValue().getGameListNotification().isGameListUpdateSelected())); + + assertEquals(NetGameMode.EnumType.gameClosed, msg.getGameListMessage().getValue().getGameListNotification().getGameListUpdate().getGameMode().getValue()); + } +}