@Test
  public void testCreateRoomByUser() {
    when(service.getUserBySession(anyString())).thenReturn(null);
    Room endRoom = gameServer.createRoom("aaa", "aaa", null);
    assertNull(endRoom);

    Room room = new RoomFFA("aaa");
    UserProfile profile = spy(new UserProfile("aa", "bb"));
    when(service.getUserBySession(anyString())).thenReturn(profile);
    when(profile.getCurrentroom()).thenReturn(room);

    endRoom = gameServer.createRoom("aaa", "aaa", null);
    assertNull(endRoom);
  }
  @Test
  public void testPlayerInfoSourceAuthenticated() throws Exception {
    String status = this.readFixture("status_source");

    SteamPlayer user1 = mock(SteamPlayer.class);
    SteamPlayer user2 = mock(SteamPlayer.class);
    HashMap<String, SteamPlayer> playerMap = new HashMap<String, SteamPlayer>();
    playerMap.put("12345678123456789", user1);
    playerMap.put("99999999999999999", user2);
    this.server.playerHash = playerMap;
    this.server.rconAuthenticated = true;

    doNothing().when(this.server).handleResponseForRequest(GameServer.REQUEST_PLAYER);
    when(this.server.rconExec("status")).thenReturn(status);

    HashMap<String, String> user1Data = new HashMap<String, String>();
    user1Data.put("name", "user1");
    user1Data.put("id", "12345678123456789");
    user1Data.put("time", "4449s");
    user1Data.put("ping", "300");
    user1Data.put("addr", "11.2.333.44");
    HashMap<String, String> user2Data = new HashMap<String, String>();
    user2Data.put("name", "user2");
    user2Data.put("id", "99999999999999999");
    user2Data.put("time", "50s");
    user2Data.put("ping", "45");
    user2Data.put("addr", "192.192.192.192");

    mockStatic(GameServer.class);
    ArrayList<String> attributes = new ArrayList<String>();
    // Won't read data about a player if no attributes were found
    attributes.add("someAttribute");
    when(GameServer.getPlayerStatusAttributes(
            "id                name                                  ping  connected   addr"))
        .thenReturn(attributes);
    when(GameServer.splitPlayerStatus(
            attributes,
            "12345678123456789 \"user1\"                               300   4449s       11.2.333.44"))
        .thenReturn(user1Data);
    when(GameServer.splitPlayerStatus(
            attributes,
            "99999999999999999 \"user2\"                               45    50s         192.192.192.192"))
        .thenReturn(user2Data);

    this.server.updatePlayers("password");

    verify(user1).addInformation(user1Data);
    verify(user2).addInformation(user2Data);
  }
 @Test
 public void testJoinRoomNoRoom() {
   when(service.getUserBySession(anyString())).thenReturn(new UserProfile("aa", "bb"));
   when(rooms.containsKey(anyString())).thenReturn(false);
   Room room = gameServer.joinRoom("aa", "aa", "aa");
   assertNull(room);
 }
  @Test
  public void isCorrectPlayerInGameNoPlayer() {
    when(service.isAuthorized(anyString())).thenReturn(true);
    when(service.getUserBySession(anyString())).thenReturn(null);

    assertFalse(gameServer.isCorrectPlayerInGame("aa"));
  }
  @Test
  public void testJoinRoomUserPassToRoom() {
    UserProfile profile = spy(new UserProfile("aa", "bb"));
    when(service.getUserBySession(anyString())).thenReturn(profile);
    when(rooms.containsKey(anyString())).thenReturn(true);
    when(profile.getCurrentroom()).thenReturn(null);
    Room room = new RoomFFA("aaa", "cc");
    when(rooms.get(anyString())).thenReturn(room);

    Room endRoom = gameServer.joinRoom("aaa", "", "aa");

    assertNull(endRoom);

    endRoom = gameServer.joinRoom("aa", null, "aa");

    assertNull(endRoom);
  }
 @Before
 public void setUp() {
   new ProjectDB().initBD("hibernate-test.cfg.xml");
   service = mock(AccountService.class);
   rooms = spy(new HashMap<>());
   gameServer = new GameServer(service);
   gameServer.setRooms(rooms);
 }
  @Test
  public void testIsGameReady() throws Exception {
    UserProfile profile = new UserProfile("test", "test");

    Room room = new RoomFFA("testRoom");
    room.addUser(profile);
    profile.setCurrentroom(room);

    doReturn(profile).when(service).getUserBySession(anyString());

    assertFalse(gameServer.isGameReady(anyString()));

    UserProfile profile1 = new UserProfile("test1", "test1");
    room.addUser(profile1);

    assertTrue(gameServer.isGameReady(anyString()));
  }
  @Test
  public void testGetPlayerRoomBySession() throws Exception {
    UserProfile profile = new UserProfile("test", "test");
    Room room = new RoomFFA("testRoom");
    room.addUser(profile);
    profile.setCurrentroom(room);

    when(service.getUserBySession(anyString())).thenReturn(profile);

    Room testingRoom = gameServer.getPlayerRoomBySession(anyString());

    assertNotNull(testingRoom);
    assertTrue(testingRoom.checkUser(profile));

    when(service.getUserBySession(anyString())).thenReturn(null);

    assertNull(gameServer.getPlayerRoomBySession(anyString()));
  }
  @Test
  public void testIsCorrectPlayerInGameAlready() throws Exception {
    when(service.isAuthorized(anyString())).thenReturn(true);
    UserProfile profile = new UserProfile("test", "test");
    Room room = new RoomFFA("testRoom");
    profile.setCurrentroom(room);
    when(service.getUserBySession(anyString())).thenReturn(profile);

    assertTrue(gameServer.isCorrectPlayerInGame("aa"));
  }
  @Test
  public void testHandleChallengeRequests() throws Exception {
    S2C_CHALLENGE_Packet packet = mock(S2C_CHALLENGE_Packet.class);
    when(packet.getChallengeNumber()).thenReturn(1234);
    when(server.getReply()).thenReturn(packet);

    this.server.handleResponseForRequest(GameServer.REQUEST_CHALLENGE);

    assertEquals(1234, this.server.challengeNumber);
    verify(this.server).sendRequest(any(A2S_PLAYER_Packet.class));
  }
  @Test
  public void testCreateRoomAlreadyExist() {
    UserProfile profile = spy(new UserProfile("aa", "bb"));
    when(service.getUserBySession(anyString())).thenReturn(profile);
    when(profile.getCurrentroom()).thenReturn(null);
    when(rooms.containsKey(anyString())).thenReturn(true);

    Room room = gameServer.createRoom("aaa", "aaa", null);

    assertNull(room);
  }
  @Test
  public void testHandleRulesRequests() throws Exception {
    S2A_RULES_Packet packet = mock(S2A_RULES_Packet.class);
    HashMap<String, String> rulesMap = new HashMap<String, String>();
    rulesMap.put("test", "test");
    when(packet.getRulesHash()).thenReturn(rulesMap);
    when(server.getReply()).thenReturn(packet);

    this.server.handleResponseForRequest(GameServer.REQUEST_RULES);

    assertEquals("test", this.server.rulesHash.get("test"));
    verify(this.server).sendRequest(any(A2S_RULES_Packet.class));
  }
  @Test
  public void testHandleInfoRequests() throws Exception {
    S2A_INFO2_Packet packet = mock(S2A_INFO2_Packet.class);
    HashMap<String, Object> infoMap = new HashMap<String, Object>();
    infoMap.put("test", "test");
    when(packet.getInfo()).thenReturn(infoMap);
    when(server.getReply()).thenReturn(packet);

    this.server.handleResponseForRequest(GameServer.REQUEST_INFO);

    assertEquals("test", this.server.serverInfo.get("test"));
    verify(this.server).sendRequest(any(A2S_INFO_Packet.class));
  }
  @Test
  public void testHandlePlayerRequests() throws Exception {
    SteamPlayer player = mock(SteamPlayer.class);
    S2A_PLAYER_Packet packet = mock(S2A_PLAYER_Packet.class);
    HashMap<String, SteamPlayer> playerMap = new HashMap<String, SteamPlayer>();
    playerMap.put("test", player);
    when(packet.getPlayerHash()).thenReturn(playerMap);
    when(server.getReply()).thenReturn(packet);

    this.server.handleResponseForRequest(GameServer.REQUEST_PLAYER);

    // Asserting null because we do not populate our list of players
    // from S2A Player Packets at the moment because it seems like Rust game servers
    // do not implement the ability to return valid data from those packets
    // Instead player data is fully retrieved from the RCON status command, instead
    // of a mixture of that command plus the S2A Player Packet
    assertNull(this.server.playerHash);
    verify(this.server).sendRequest(any(A2S_PLAYER_Packet.class));
  }
 @Test
 public void testJoinRoomNoPlayer() {
   when(service.getUserBySession(anyString())).thenReturn(null);
   Room room = gameServer.joinRoom("aa", "aa", "aa");
   assertNull(room);
 }
  @Test
  public void testIsCorrectPlayerInGameNoAuth() throws Exception {
    when(service.isAuthorized(anyString())).thenReturn(false);

    assertFalse(gameServer.isCorrectPlayerInGame("aa"));
  }