package mock;
import com.fasterxml.jackson.databind.JsonNode;
import play.mvc.WebSocket;
import javax.annotation.concurrent.ThreadSafe;
import java.util.concurrent.TimeUnit;
/**
* Credits: http://vlkan.com/blog/post/2014/08/07/testing-websockets-in-play/
*/
@ThreadSafe
public class MockWebSocket {
protected final MockInputWebSocket mockInput = new MockInputWebSocket();
protected final MockOutputWebSocket mockOutput = new MockOutputWebSocket();
protected final WebSocket<JsonNode> socket;
public MockWebSocket(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(); }
}