From fdcf1ce2975a7a782f8bcc3ebd60d26e02291cfc Mon Sep 17 00:00:00 2001 From: lotodore Date: Sun, 13 Feb 2011 00:28:30 +0000 Subject: [PATCH] New test cases for player info requests - also tests basic avatar handling. --- tests/src/pokerth_test/PlayerInfoTest.java | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 tests/src/pokerth_test/PlayerInfoTest.java diff --git a/tests/src/pokerth_test/PlayerInfoTest.java b/tests/src/pokerth_test/PlayerInfoTest.java new file mode 100644 index 00000000..83c031de --- /dev/null +++ b/tests/src/pokerth_test/PlayerInfoTest.java @@ -0,0 +1,128 @@ +/* PokerTH automated tests. + Copyright (C) 2010 Lothar May + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package pokerth_test; + +import java.net.Socket; + +import static org.junit.Assert.*; + +import java.util.Arrays; + +import org.junit.Test; + +import pokerth_protocol.*; +import pokerth_protocol.PlayerInfoRequestMessage.PlayerInfoRequestMessageSequenceType; + +public class PlayerInfoTest extends TestBase { + + protected void sendPlayerInfoRequest(Socket s, long playerId) throws Exception { + PlayerInfoRequestMessageSequenceType type = new PlayerInfoRequestMessageSequenceType(); + type.setPlayerId(new NonZeroId(playerId)); + PlayerInfoRequestMessage request = new PlayerInfoRequestMessage(); + request.setValue(type); + PokerTHMessage msg = new PokerTHMessage(); + msg.selectPlayerInfoRequestMessage(request); + sendMessage(msg, s); + } + + @Test + public void testPlayerInfoRequest() throws Exception { + + long firstPlayerId = guestInit(); + byte[] avatarHash = + { + // one of the builtin avatars. + (byte)0x00, (byte)0xa0, (byte)0xb3, (byte)0xd2, + (byte)0x6a, (byte)0x67, (byte)0x84, (byte)0x12, + (byte)0x39, (byte)0xb8, (byte)0x88, (byte)0x31, + (byte)0x83, (byte)0xb7, (byte)0xa8, (byte)0xf0 + }; + + // Let 9 additional clients join. + Socket s[] = new Socket[9]; + long playerId[] = new long[9]; + long maxPlayerId = 0; + for (int i = 0; i < 9; i++) { + s[i] = new Socket("localhost", 7234); + String username = "test" + (i+1); + String password = username; + // Every second player has an avatar. + if (i % 2 == 0) { + playerId[i] = userInit(s[i], username, password); + } else { + playerId[i] = userInit(s[i], username, password, avatarHash); + } + if (playerId[i] > maxPlayerId) { + maxPlayerId = playerId[i]; + } + } + PokerTHMessage msg; + + // Request player info, for guest first. + for (int i = 0; i < 9; i++) { + sendPlayerInfoRequest(s[i], firstPlayerId); + do { + msg = receiveMessage(s[i]); + } while (msg.isPlayerListMessageSelected()); + assertTrue(msg.isPlayerInfoReplyMessageSelected()); + PlayerInfoReplyMessage reply = msg.getPlayerInfoReplyMessage(); + assertTrue(reply.getValue().getPlayerId().getValue() == firstPlayerId); + assertTrue(reply.getValue().getPlayerInfoResult().isPlayerInfoDataSelected()); + PlayerInfoData info = reply.getValue().getPlayerInfoResult().getPlayerInfoData(); + assertEquals(info.getPlayerName(), GuestUser); + assertEquals(info.getCountryCode(), null); + assertTrue(info.getIsHuman()); + assertEquals(info.getPlayerRights().getValue(), PlayerInfoRights.EnumType.playerRightsGuest); + assertEquals(info.getAvatarData(), null); + } + // Request other players' info. + for (int i = 0; i < 9; i++) { + sendPlayerInfoRequest(sock, playerId[i]); + do { + msg = receiveMessage(); + } while (msg.isPlayerListMessageSelected()); + assertTrue(msg.isPlayerInfoReplyMessageSelected()); + PlayerInfoReplyMessage reply = msg.getPlayerInfoReplyMessage(); + assertTrue(reply.getValue().getPlayerId().getValue() == playerId[i]); + assertTrue(reply.getValue().getPlayerInfoResult().isPlayerInfoDataSelected()); + PlayerInfoData info = reply.getValue().getPlayerInfoResult().getPlayerInfoData(); + assertEquals(info.getPlayerName(), "test" + (i+1)); + assertEquals(info.getCountryCode(), null); + assertTrue(info.getIsHuman()); + assertEquals(info.getPlayerRights().getValue(), PlayerInfoRights.EnumType.playerRightsNormal); + // Every second player has an avatar, see above. + if (i % 2 == 0) { + assertEquals(info.getAvatarData(), null); + } else { + assertTrue(Arrays.equals(info.getAvatarData().getAvatar().getValue(), avatarHash)); + assertEquals(info.getAvatarData().getAvatarType().getValue(), NetAvatarType.EnumType.avatarImagePng); + } + } + // Request invalid player info. + sendPlayerInfoRequest(sock, maxPlayerId + 1); + msg = receiveMessage(); + assertTrue(msg.isPlayerInfoReplyMessageSelected()); + PlayerInfoReplyMessage reply = msg.getPlayerInfoReplyMessage(); + assertTrue(reply.getValue().getPlayerId().getValue() == maxPlayerId + 1); + assertTrue(reply.getValue().getPlayerInfoResult().isUnknownPlayerInfoSelected()); + + for (int i = 0; i < 9; i++) { + s[i].close(); + } + } +}