Package de.pokerth.test

Source Code of de.pokerth.test.SeatStateTest

/*  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 <http://www.gnu.org/licenses/>.
*/

package de.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 java.util.Iterator;

import org.junit.Test;

import de.pokerth.protocol.ProtoBuf.NetGameInfo;
import de.pokerth.protocol.ProtoBuf.NetGameInfo.EndRaiseMode;
import de.pokerth.protocol.ProtoBuf.NetGameInfo.NetGameType;
import de.pokerth.protocol.ProtoBuf.NetPlayerState;
import de.pokerth.protocol.ProtoBuf.PokerTHMessage.PokerTHMessageType;
import de.pokerth.protocol.ProtoBuf.PokerTHMessage;
import de.pokerth.protocol.ProtoBuf.StartEventAckMessage;


public class SeatStateTest extends TestBase {

  @Test
  public void testSeatState() throws Exception {
    long firstPlayerId = userInit();

    Collection<Integer> l = new ArrayList<Integer>();
    String gameName = AuthUser + " run normal game for seatState";
    NetGameInfo gameInfo = createGameInfo(NetGameType.normalGame, 5, 7, 5, EndRaiseMode.doubleBlinds, 0, 200, gameName, l, 10, 0, 2, 10000);
    sendMessage(createGameRequestMsg(
        gameInfo,
        "",
        false));

    // Wait for join game ack.
    PokerTHMessage msg;
    do {
      msg = receiveMessage();
      failOnErrorMessage(msg);
    } while (!msg.hasJoinGameAckMessage() && !msg.hasJoinGameFailedMessage());
    if (!msg.hasJoinGameAckMessage()) {
      fail("Could not create game!");
    }
    int gameId = msg.getJoinGameAckMessage().getGameId();

    // Let 9 additional clients join.
    Socket s[] = new Socket[9];
    int playerId[] = new int[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);
      sendMessage(joinGameRequestMsg(gameId, "", false), s[i]);
      do {
        msg = receiveMessage(s[i]);
        failOnErrorMessage(msg);
      } while (!msg.hasJoinGameAckMessage() && !msg.hasJoinGameFailedMessage());
      if (!msg.hasJoinGameAckMessage()) {
        fail("Could not join game!");
      }
    }

    // Server should automatically send start event.
    do {
      msg = receiveMessage();
      failOnErrorMessage(msg);
    } while (!msg.hasStartEventMessage());
    for (int i = 0; i < 9; i++) {
      do {
        msg = receiveMessage(s[i]);
        failOnErrorMessage(msg);
      } while (!msg.hasStartEventMessage());
    }
    // Acknowledge start event.
    StartEventAckMessage startAck = StartEventAckMessage.newBuilder()
        .setGameId(gameId)
        .build();
    msg = PokerTHMessage.newBuilder()
        .setMessageType(PokerTHMessageType.Type_StartEventAckMessage)
        .setStartEventAckMessage(startAck)
        .build();
    sendMessage(msg);
    for (int i = 0; i < 9; i++) {
      sendMessage(msg, s[i]);
    }

    // Wait for game start message.
    do {
      msg = receiveMessage();
      failOnErrorMessage(msg);
    } while (!msg.hasGameStartInitialMessage());
    assertEquals(gameId, msg.getGameStartInitialMessage().getGameId());
    Collection<Integer> seats = msg.getGameStartInitialMessage().getPlayerSeatsList();
    assertEquals(10, seats.size());
    int firstPlayerPos = 0;
    for (Iterator<Integer> it = seats.iterator(); it.hasNext(); ) {
      int seat = it.next();
      if (seat == firstPlayerId)
        break;
      firstPlayerPos++;
    }

    // Wait for first seat state list.
    do {
      msg = receiveMessage();
      failOnErrorMessage(msg);
    } while (!msg.hasHandStartMessage());
    Collection<NetPlayerState> seatStates = msg.getHandStartMessage().getSeatStatesList();

    // Check whether the correct default seat states are sent.
    assertEquals(10, seatStates.size());
    for (Iterator<NetPlayerState> it = seatStates.iterator(); it.hasNext(); ) {
      NetPlayerState state = it.next();
      assertEquals(NetPlayerState.netPlayerStateNormal, state);
    }
    // All other players leave (and are in autofold state then).
    for (int i = 0; i < 9; i++) {
      s[i].close();
    }
    // Wait for next seat state list.
    do {
      msg = receiveMessage();
      failOnErrorMessage(msg);
      assertTrue(!msg.hasEndOfGameMessage());
    } while (!msg.hasHandStartMessage());
    seatStates = msg.getHandStartMessage().getSeatStatesList();

    // Check whether the correct seat states are sent.
    assertEquals(10, seatStates.size());
    int stateNormalCounter = 0;
    int stateInactiveCounter = 0;
    int seatPos = 0;
    for (Iterator<NetPlayerState> it = seatStates.iterator(); it.hasNext(); ) {
      NetPlayerState state = it.next();
      assertTrue(NetPlayerState.netPlayerStateNoMoney != state);
      if (NetPlayerState.netPlayerStateNormal == state) {
        assertEquals(firstPlayerPos, seatPos);
        stateNormalCounter++;
      }
      if (NetPlayerState.netPlayerStateSessionInactive == state) {
        stateInactiveCounter++;
      }
      seatPos++;
    }
    assertEquals(1, stateNormalCounter);
    assertEquals(9, stateInactiveCounter);
  }
}
TOP

Related Classes of de.pokerth.test.SeatStateTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.