use of org.eclipse.jetty.websocket.server.helper.CaptureSocket in project jetty.project by eclipse.
the class WebSocketOverSSLTest method testEcho.
/**
* Test the requirement of issuing socket and receiving echo response
* @throws Exception on test failure
*/
@Test
public void testEcho() throws Exception {
Assert.assertThat("server scheme", server.getServerUri().getScheme(), is("wss"));
WebSocketClient client = new WebSocketClient(server.getSslContextFactory(), null, bufferPool);
try {
client.start();
CaptureSocket clientSocket = new CaptureSocket();
URI requestUri = server.getServerUri();
System.err.printf("Request URI: %s%n", requestUri.toASCIIString());
Future<Session> fut = client.connect(clientSocket, requestUri);
// wait for connect
Session session = fut.get(FUTURE_TIMEOUT_SEC, TimeUnit.SECONDS);
// Generate text frame
String msg = "this is an echo ... cho ... ho ... o";
RemoteEndpoint remote = session.getRemote();
remote.sendString(msg);
if (remote.getBatchMode() == BatchMode.ON)
remote.flush();
// Read frame (hopefully text frame)
clientSocket.messages.awaitEventCount(1, 30, TimeUnit.SECONDS);
EventQueue<String> captured = clientSocket.messages;
Assert.assertThat("Text Message", captured.poll(), is(msg));
// Shutdown the socket
clientSocket.close();
} finally {
client.stop();
}
}
use of org.eclipse.jetty.websocket.server.helper.CaptureSocket in project jetty.project by eclipse.
the class WebSocketOverSSLTest method testServerSessionIsSecure.
/**
* Test that server session reports as secure
* @throws Exception on test failure
*/
@Test
public void testServerSessionIsSecure() throws Exception {
Assert.assertThat("server scheme", server.getServerUri().getScheme(), is("wss"));
WebSocketClient client = new WebSocketClient(server.getSslContextFactory(), null, bufferPool);
try {
client.setConnectTimeout(CONNECT_TIMEOUT);
client.start();
CaptureSocket clientSocket = new CaptureSocket();
URI requestUri = server.getServerUri();
System.err.printf("Request URI: %s%n", requestUri.toASCIIString());
Future<Session> fut = client.connect(clientSocket, requestUri);
// wait for connect
Session session = fut.get(FUTURE_TIMEOUT_SEC, TimeUnit.SECONDS);
// Generate text frame
RemoteEndpoint remote = session.getRemote();
remote.sendString("session.isSecure");
if (remote.getBatchMode() == BatchMode.ON)
remote.flush();
// Read frame (hopefully text frame)
clientSocket.messages.awaitEventCount(1, 30, TimeUnit.SECONDS);
EventQueue<String> captured = clientSocket.messages;
Assert.assertThat("Server.session.isSecure", captured.poll(), is("session.isSecure=true"));
// Shutdown the socket
clientSocket.close();
} finally {
client.stop();
}
}
use of org.eclipse.jetty.websocket.server.helper.CaptureSocket in project jetty.project by eclipse.
the class PerMessageDeflateExtensionTest method testPerMessageDeflateDefault.
/**
* Default configuration for permessage-deflate
* @throws Exception on test failure
*/
@Test
public void testPerMessageDeflateDefault() throws Exception {
Assume.assumeTrue("Server has permessage-deflate registered", server.getWebSocketServletFactory().getExtensionFactory().isAvailable("permessage-deflate"));
Assert.assertThat("server scheme", server.getServerUri().getScheme(), is(scheme));
int binBufferSize = (int) (msgSize * 1.5);
WebSocketPolicy serverPolicy = server.getWebSocketServletFactory().getPolicy();
// Ensure binBufferSize is sane (not smaller then other buffers)
binBufferSize = Math.max(binBufferSize, serverPolicy.getMaxBinaryMessageSize());
binBufferSize = Math.max(binBufferSize, serverPolicy.getMaxBinaryMessageBufferSize());
binBufferSize = Math.max(binBufferSize, this.inputBufferSize);
serverPolicy.setMaxBinaryMessageSize(binBufferSize);
serverPolicy.setMaxBinaryMessageBufferSize(binBufferSize);
WebSocketClient client = new WebSocketClient(server.getSslContextFactory());
WebSocketPolicy clientPolicy = client.getPolicy();
clientPolicy.setMaxBinaryMessageSize(binBufferSize);
clientPolicy.setMaxBinaryMessageBufferSize(binBufferSize);
if (inputBufferSize > 0) {
clientPolicy.setInputBufferSize(inputBufferSize);
}
try {
client.start();
// Make sure the read times out if there are problems with the implementation
client.setMaxIdleTimeout(TimeUnit.SECONDS.toMillis(15));
CaptureSocket clientSocket = new CaptureSocket();
ClientUpgradeRequest request = new ClientUpgradeRequest();
request.addExtensions("permessage-deflate");
request.setSubProtocols("echo");
Future<Session> fut = client.connect(clientSocket, server.getServerUri(), request);
// Wait for connect
Session session = fut.get(30, TimeUnit.SECONDS);
assertThat("Response.extensions", getNegotiatedExtensionList(session), containsString("permessage-deflate"));
// Create message
byte[] msg = new byte[msgSize];
Random rand = new Random();
rand.setSeed(8080);
rand.nextBytes(msg);
// Calculate sha1
String sha1 = Sha1Sum.calculate(msg);
// Client sends first message
session.getRemote().sendBytes(ByteBuffer.wrap(msg));
clientSocket.messages.awaitEventCount(1, 5, TimeUnit.SECONDS);
String echoMsg = clientSocket.messages.poll();
Assert.assertThat("Echo'd Message", echoMsg, is("binary[sha1=" + sha1 + "]"));
} finally {
client.stop();
}
}
use of org.eclipse.jetty.websocket.server.helper.CaptureSocket in project jetty.project by eclipse.
the class WebSocketOverSSLTest method testServerSessionRequestURI.
/**
* Test that server session.upgradeRequest.requestURI reports correctly
* @throws Exception on test failure
*/
@Test
public void testServerSessionRequestURI() throws Exception {
Assert.assertThat("server scheme", server.getServerUri().getScheme(), is("wss"));
WebSocketClient client = new WebSocketClient(server.getSslContextFactory(), null, bufferPool);
try {
client.setConnectTimeout(CONNECT_TIMEOUT);
client.start();
CaptureSocket clientSocket = new CaptureSocket();
URI requestUri = server.getServerUri().resolve("/deep?a=b");
System.err.printf("Request URI: %s%n", requestUri.toASCIIString());
Future<Session> fut = client.connect(clientSocket, requestUri);
// wait for connect
Session session = fut.get(FUTURE_TIMEOUT_SEC, TimeUnit.SECONDS);
// Generate text frame
RemoteEndpoint remote = session.getRemote();
remote.sendString("session.upgradeRequest.requestURI");
if (remote.getBatchMode() == BatchMode.ON)
remote.flush();
// Read frame (hopefully text frame)
clientSocket.messages.awaitEventCount(1, 30, TimeUnit.SECONDS);
EventQueue<String> captured = clientSocket.messages;
String expected = String.format("session.upgradeRequest.requestURI=%s", requestUri.toASCIIString());
Assert.assertThat("session.upgradeRequest.requestURI", captured.poll(), is(expected));
// Shutdown the socket
clientSocket.close();
} finally {
client.stop();
}
}
Aggregations