use of javax.websocket.Session in project undertow by undertow-io.
the class JsrWebSocketServer07Test method testBinaryWithByteBufferByFuture.
@org.junit.Test
public void testBinaryWithByteBufferByFuture() throws Exception {
final byte[] payload = "payload".getBytes();
final AtomicReference<Future<Void>> sendResult = new AtomicReference<>();
final AtomicBoolean connected = new AtomicBoolean(false);
final FutureResult latch = new FutureResult();
class TestEndPoint extends Endpoint {
@Override
public void onOpen(final Session session, EndpointConfig config) {
connected.set(true);
session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer message) {
ByteBuffer buf = ByteBuffer.allocate(message.remaining());
buf.put(message);
buf.flip();
sendResult.set(session.getAsyncRemote().sendBinary(buf));
}
});
}
}
ServerWebSocketContainer builder = new ServerWebSocketContainer(TestClassIntrospector.INSTANCE, DefaultServer.getWorker(), DefaultServer.getBufferPool(), Collections.EMPTY_LIST, false, false);
builder.addEndpoint(ServerEndpointConfig.Builder.create(TestEndPoint.class, "/").configurator(new InstanceConfigurator(new TestEndPoint())).build());
deployServlet(builder);
WebSocketTestClient client = new WebSocketTestClient(getVersion(), new URI("ws://" + DefaultServer.getHostAddress("default") + ":" + DefaultServer.getHostPort("default") + "/"));
client.connect();
client.send(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(payload)), new FrameChecker(BinaryWebSocketFrame.class, payload, latch));
latch.getIoFuture().get();
Future<Void> result = sendResult.get();
client.destroy();
}
use of javax.websocket.Session in project undertow by undertow-io.
the class JsrWebSocketServer07Test method testCloseFrameWithoutReasonBody.
/**
* Section 5.5.1 of RFC 6455 says the reason body is optional
*/
@org.junit.Test
public void testCloseFrameWithoutReasonBody() throws Exception {
final int code = 1000;
final AtomicReference<CloseReason> reason = new AtomicReference<>();
ByteBuffer payload = ByteBuffer.allocate(2);
payload.putShort((short) code);
payload.flip();
final AtomicBoolean connected = new AtomicBoolean(false);
final FutureResult latch = new FutureResult();
final CountDownLatch clientLatch = new CountDownLatch(1);
final AtomicInteger closeCount = new AtomicInteger();
class TestEndPoint extends Endpoint {
@Override
public void onOpen(final Session session, EndpointConfig config) {
connected.set(true);
}
@Override
public void onClose(Session session, CloseReason closeReason) {
closeCount.incrementAndGet();
reason.set(closeReason);
clientLatch.countDown();
}
}
ServerWebSocketContainer builder = new ServerWebSocketContainer(TestClassIntrospector.INSTANCE, DefaultServer.getWorker(), DefaultServer.getBufferPool(), Collections.EMPTY_LIST, false, false);
builder.addEndpoint(ServerEndpointConfig.Builder.create(TestEndPoint.class, "/").configurator(new InstanceConfigurator(new TestEndPoint())).build());
deployServlet(builder);
WebSocketTestClient client = new WebSocketTestClient(getVersion(), new URI("ws://" + DefaultServer.getHostAddress("default") + ":" + DefaultServer.getHostPort("default") + "/"));
client.connect();
client.send(new CloseWebSocketFrame(code, null), new FrameChecker(CloseWebSocketFrame.class, payload.array(), latch));
if (latch.getIoFuture().await(10, TimeUnit.SECONDS) != IoFuture.Status.DONE) {
Assert.fail();
}
latch.getIoFuture().get();
clientLatch.await();
Assert.assertEquals(code, reason.get().getCloseCode().getCode());
Assert.assertEquals("", reason.get().getReasonPhrase());
Assert.assertEquals(1, closeCount.get());
client.destroy();
}
use of javax.websocket.Session in project undertow by undertow-io.
the class JsrWebSocketServer07Test method testBinaryWithByteBuffer.
@org.junit.Test
public void testBinaryWithByteBuffer() throws Exception {
final byte[] payload = "payload".getBytes();
final AtomicReference<Throwable> cause = new AtomicReference<>();
final AtomicBoolean connected = new AtomicBoolean(false);
final FutureResult latch = new FutureResult();
class TestEndPoint extends Endpoint {
@Override
public void onOpen(final Session session, EndpointConfig config) {
connected.set(true);
session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer message) {
ByteBuffer buf = ByteBuffer.allocate(message.remaining());
buf.put(message);
buf.flip();
session.getAsyncRemote().sendBinary(buf);
}
});
}
}
ServerWebSocketContainer builder = new ServerWebSocketContainer(TestClassIntrospector.INSTANCE, DefaultServer.getWorker(), DefaultServer.getBufferPool(), Collections.EMPTY_LIST, false, false);
builder.addEndpoint(ServerEndpointConfig.Builder.create(TestEndPoint.class, "/").configurator(new InstanceConfigurator(new TestEndPoint())).build());
deployServlet(builder);
WebSocketTestClient client = new WebSocketTestClient(getVersion(), new URI("ws://" + NetworkUtils.formatPossibleIpv6Address(DefaultServer.getHostAddress("default")) + ":" + DefaultServer.getHostPort("default") + "/"));
client.connect();
client.send(new BinaryWebSocketFrame(Unpooled.wrappedBuffer(payload)), new FrameChecker(BinaryWebSocketFrame.class, payload, latch));
latch.getIoFuture().get();
Assert.assertNull(cause.get());
client.destroy();
}
use of javax.websocket.Session in project undertow by undertow-io.
the class ClientEndpointReconnectTestCase method testAnnotatedClientEndpoint.
@Test
public void testAnnotatedClientEndpoint() throws Exception {
AnnotatedClientReconnectEndpoint endpoint = new AnnotatedClientReconnectEndpoint();
Session session = deployment.connectToServer(endpoint, new URI("ws://" + DefaultServer.getHostAddress("default") + ":" + DefaultServer.getHostPort("default") + "/ws/"));
Assert.assertEquals("OPEN", endpoint.message());
session.getBasicRemote().sendText("hi");
Assert.assertEquals("MESSAGE-ECHO-hi", endpoint.message());
session.getBasicRemote().sendText("close");
Assert.assertEquals("CLOSE", endpoint.message());
Assert.assertEquals("OPEN", endpoint.message());
session.getBasicRemote().sendText("hi");
Assert.assertEquals("MESSAGE-ECHO-hi", endpoint.message());
session.getBasicRemote().sendText("close");
Assert.assertEquals("CLOSE", endpoint.message());
Assert.assertEquals("OPEN", endpoint.message());
session.getBasicRemote().sendText("hi");
Assert.assertEquals("MESSAGE-ECHO-hi", endpoint.message());
session.getBasicRemote().sendText("close");
Assert.assertEquals("CLOSE", endpoint.message());
Assert.assertNull(endpoint.quickMessage());
Assert.assertFalse(failed);
}
use of javax.websocket.Session in project undertow by undertow-io.
the class WebsocketStressTestCase method websocketFragmentationStressTestCase.
@Test
public void websocketFragmentationStressTestCase() throws Exception {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final CountDownLatch done = new CountDownLatch(1);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; ++i) {
sb.append("message ");
sb.append(i);
}
String toSend = sb.toString();
final Session session = defaultContainer.connectToServer(new Endpoint() {
@Override
public void onOpen(Session session, EndpointConfig config) {
session.addMessageHandler(new MessageHandler.Partial<byte[]>() {
@Override
public void onMessage(byte[] bytes, boolean b) {
try {
out.write(bytes);
} catch (IOException e) {
e.printStackTrace();
done.countDown();
}
if (b) {
done.countDown();
}
}
});
}
@Override
public void onClose(Session session, CloseReason closeReason) {
done.countDown();
}
@Override
public void onError(Session session, Throwable thr) {
thr.printStackTrace();
done.countDown();
}
}, null, new URI("ws://" + DefaultServer.getHostAddress("default") + ":" + DefaultServer.getHostPort("default") + "/ws/stress"));
OutputStream stream = session.getBasicRemote().getSendStream();
for (int i = 0; i < toSend.length(); ++i) {
stream.write(toSend.charAt(i));
stream.flush();
}
stream.close();
done.await(40, TimeUnit.SECONDS);
Assert.assertEquals(toSend, new String(out.toByteArray()));
}
Aggregations