import com.fasterxml.jackson.databind.JsonNode; import play.mvc.WebSocket; import javax.annotation.concurrent.ThreadSafe; import java.util.concurrent.TimeUnit; @ThreadSafe class MockWebSocketWrapper { protected final MockInputWebSocket mockInput = new MockInputWebSocket(); protected final MockOutputWebSocket mockOutput = new MockOutputWebSocket(); protected final WebSocket<JsonNode> socket; MockWebSocketWrapper(WebSocket<JsonNode> socket) { this.socket = socket; socket.onReady(mockInput.getInputSocket(), mockOutput.getOutputSocket()); } public JsonNode read() throws InterruptedException { return mockOutput.getMessageQueue().poll(1, TimeUnit.SECONDS); } public void write(JsonNode data) throws Throwable { mockInput.write(data); } public void close() throws Throwable { mockInput.close(); } }