@Test public void shouldRemoveRequestWhenProcessed() throws UnsupportedEncodingException { sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap()); response.setWriterAccessAllowed(false); try { sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap()); } catch (Exception e) { fail("Should send only once"); } }
@Test public void shouldSendUpdateWhenOnePlayerRequested() throws UnsupportedEncodingException { sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap()); assertContainsPlayerBoard(response.getContentAsString(), "vasya", "vasyaboard"); }
@Test public void shouldIgnoreNonRequestedPlayerData() throws UnsupportedEncodingException { sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates(screenFor("petya", "petyaboard").asMap()); assertTrue(asyncContext.isComplete()); }
@Override public void nextStepForAllGames() { lock.writeLock().lock(); try { for (Game game : games) { if (game.isGameOver()) { game.newGame(); } game.tick(); } HashMap<Player, PlayerData> map = new HashMap<Player, PlayerData>(); for (int i = 0; i < games.size(); i++) { Game game = games.get(i); Player player = players.get(i); map.put( player, new PlayerData( gameType.getBoardSize(), decoder.encode(game.getBoardAsString()), player.getScore(), game.getMaxScore(), game.getCurrentScore(), player.getCurrentLevel() + 1, player.getMessage())); } screenSender.sendUpdates(map); for (int index = 0; index < players.size(); index++) { Player player = players.get(index); Game game = games.get(index); try { String board = game.getBoardAsString().replace("\n", ""); if (logger.isDebugEnabled()) { logger.debug(String.format("Sent for player '%s' board \n%s", player, board)); } controllers.get(index).requestControl(player, board); } catch (IOException e) { logger.error( "Unable to send control request to player " + player.getName() + " URL: " + player.getCallbackUrl(), e); } } } catch (Error e) { e.printStackTrace(); logger.error("nextStepForAllGames throws", e); } finally { lock.writeLock().unlock(); } }
@Test public void shouldCompleteResponseWhenExceptionOnWrite() throws IOException { response.setCharacterEncoding("NON_EXISTENT_ENCODING_FOR_IO_EXCEPTION"); sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates(screenFor("vasya", "vasyaboard").asMap()); assertTrue(asyncContext.isComplete()); }
@Test public void shouldSendScores() throws UnsupportedEncodingException { sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates(screenFor("vasya", 345, "vasyaboard").asMap()); JsonPath jsonPath = from(response.getContentAsString()); assertEquals(345, jsonPath.getInt("vasya.score")); }
@Test public void shouldSendToRequestedPlayersOnly() throws UnsupportedEncodingException { sender.scheduleUpdate(updateRequestFor("vasya")); sender.sendUpdates( screenFor("petya", "petyaboard").addScreenFor("vasya", 123, "vasyaboard").asMap()); JsonPath jsonPath = from(response.getContentAsString()); assertNull("Should contain only requested user screens", jsonPath.get("petyaboard")); }
@Test public void shouldSendUpdateForAllPlayersWhenRequested() throws UnsupportedEncodingException { sender.scheduleUpdate(new UpdateRequest(asyncContext, true, null)); sender.sendUpdates( screenFor("petya", "petyaboard").addScreenFor("vasya", 123, "vasyaboard").asMap()); assertContainsPlayerBoard(response.getContentAsString(), "vasya", "vasyaboard"); assertContainsPlayerBoard(response.getContentAsString(), "petya", "petyaboard"); }
@Test public void shouldSendOtherUpdatesWhenExceptionOnWrite() throws UnsupportedEncodingException { MockHttpServletResponse exceptionResponse = new MockHttpServletResponse(); exceptionResponse.setCharacterEncoding("NON_EXISTENT_ENCODING_FOR_IO_EXCEPTION"); MockAsyncContext exceptionContext = new MockAsyncContext(exceptionResponse); sender.scheduleUpdate(new UpdateRequest(exceptionContext, "exception")); sender.scheduleUpdate(updateRequestFor("petya")); sender.sendUpdates( screenFor("petya", "petyaboard").addScreenFor("exception", 123, "exceptionboard").asMap()); assertContainsPlayerBoard(response.getContentAsString(), "petya", "petyaboard"); assertTrue(exceptionContext.isComplete()); }