private ScribblePlayerHand doSmallGame(final RobotType robotType)
      throws BoardCreationException, InterruptedException {
    long currentTime = System.currentTimeMillis();
    assertNotNull("No room manager", scribbleBoardManager);
    final Visitor player = new DefaultVisitor(Language.RU);
    final ScribbleSettings settings =
        new ScribbleSettings("This is robots game", player.getLanguage(), 3, true, true);
    scribbleBoardManager.addBoardListener(
        new BoardListener() {
          @Override
          public void gameStarted(
              GameBoard<? extends GameSettings, ? extends GamePlayerHand, ? extends GameMove> b) {
            passGuestTurn(b);
          }

          @Override
          public void gameMoveDone(
              GameBoard<? extends GameSettings, ? extends GamePlayerHand, ? extends GameMove> b,
              GameMove move,
              GameMoveScore moveScore) {
            passGuestTurn(b);
          }

          @Override
          public void gameFinished(
              GameBoard<? extends GameSettings, ? extends GamePlayerHand, ? extends GameMove> b,
              GameResolution resolution,
              Collection<Personality> winners) {
            notifyGameFinished();
          }

          private void passGuestTurn(
              GameBoard<? extends GameSettings, ? extends GamePlayerHand, ? extends GameMove> b) {
            if (b.getPlayerTurn() == player) {
              ScribbleBoard sb = (ScribbleBoard) b;
              try {
                if (Math.random() < 0.5) {
                  final ScribblePlayerHand playerHand = sb.getPlayerHand(player);
                  final Tile[] tiles1 = playerHand.getTiles();
                  final int length = Math.min(tiles1.length, sb.getBankRemained());
                  if (length == 0) {
                    sb.passTurn(player);
                  } else {
                    int[] tiles = new int[length];
                    for (int i = 0; i < length; i++) {
                      tiles[i] = tiles1[i].getNumber();
                    }
                    sb.exchangeTiles(player, tiles);
                  }
                } else {
                  sb.passTurn(player);
                }
              } catch (GameMoveException e) {
                log.error("Something wrong", e);
                notifyGameFinished();
              }
            }
          }
        });

    final ScribbleBoard board = scribbleBoardManager.createBoard(settings, player, robotType);
    assertTrue("Game is not in progress state", board.isActive());

    gameFinishedLock.lock();
    while (board.isActive()) {
      gameFinishedCondition.await();
    }
    gameFinishedLock.unlock();

    log.info("Game was finished at {}ms ", +(System.currentTimeMillis() - currentTime));

    assertTrue("Board is not saved", board.getBoardId() > 0);
    assertFalse("Board is not finished", board.isActive());
    assertTrue("Board has no one move", board.getGameMoves().size() > 0);
    final Personality playerTurn = board.getPlayerTurn();
    if (board.getResolution() == GameResolution.RESIGNED
        || board.getResolution() == GameResolution.INTERRUPTED) {
      assertNotNull("Board has a player who has a turn: " + playerTurn, playerTurn);
    } else {
      assertNull("Board has a player who has a turn: " + playerTurn, playerTurn);
    }

    final Robot robot = (Robot) board.getPlayers().get(1);
    final ScribblePlayerHand playerHand = board.getPlayerHand(robot);
    assertTrue(playerHand.getPoints() > 0);
    assertTrue(playerHand.getOldRating() == robot.getRating());
    assertTrue(playerHand.getNewRating() > robot.getRating());
    return playerHand;
  }
 @RequestMapping("/gc")
 public String gcAction() throws DictionaryException {
   System.gc();
   return "redirect:/maintain/admin/main?result=ok";
 }