use of org.eclipse.jetty.websocket.common.CloseInfo in project jetty.project by eclipse.
the class WebSocketServletRFCTest method testInternalError.
/**
* Test the requirement of responding with server terminated close code 1011 when there is an unhandled (internal server error) being produced by the
* WebSocket POJO.
* @throws Exception on test failure
*/
@Test
public void testInternalError() throws Exception {
try (BlockheadClient client = new BlockheadClient(server.getServerUri());
StacklessLogging stackless = new StacklessLogging(EventDriver.class)) {
client.connect();
client.sendStandardRequest();
client.expectUpgradeResponse();
try (StacklessLogging context = new StacklessLogging(EventDriver.class)) {
// Generate text frame
client.write(new TextFrame().setPayload("CRASH"));
// Read frame (hopefully close frame)
EventQueue<WebSocketFrame> frames = client.readFrames(1, 30, TimeUnit.SECONDS);
Frame cf = frames.poll();
CloseInfo close = new CloseInfo(cf);
Assert.assertThat("Close Frame.status code", close.getStatusCode(), is(StatusCode.SERVER_ERROR));
}
}
}
use of org.eclipse.jetty.websocket.common.CloseInfo in project jetty.project by eclipse.
the class ManyConnectionsCleanupTest method fastClose.
private void fastClose() throws Exception {
try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) {
client.setProtocols("fastclose");
client.setTimeout(1, TimeUnit.SECONDS);
try (StacklessLogging scope = new StacklessLogging(WebSocketSession.class)) {
client.connect();
client.sendStandardRequest();
client.expectUpgradeResponse();
client.readFrames(1, 1, TimeUnit.SECONDS);
CloseInfo close = new CloseInfo(StatusCode.NORMAL, "Normal");
assertThat("Close Status Code", close.getStatusCode(), is(StatusCode.NORMAL));
// Notify server of close handshake
// respond with close
client.write(close.asFrame());
// ensure server socket got close event
assertThat("Fast Close Latch", closeSocket.closeLatch.await(1, TimeUnit.SECONDS), is(true));
assertThat("Fast Close.statusCode", closeSocket.closeStatusCode, is(StatusCode.NORMAL));
}
}
}
use of org.eclipse.jetty.websocket.common.CloseInfo in project jetty.project by eclipse.
the class ManyConnectionsCleanupTest method fastFail.
private void fastFail() throws Exception {
try (IBlockheadClient client = new BlockheadClient(server.getServerUri())) {
client.setProtocols("fastfail");
client.setTimeout(1, TimeUnit.SECONDS);
try (StacklessLogging scope = new StacklessLogging(WebSocketSession.class)) {
client.connect();
client.sendStandardRequest();
client.expectUpgradeResponse();
// client.readFrames(1,2,TimeUnit.SECONDS);
CloseInfo close = new CloseInfo(StatusCode.NORMAL, "Normal");
// respond with close
client.write(close.asFrame());
// ensure server socket got close event
assertThat("Fast Fail Latch", closeSocket.closeLatch.await(1, TimeUnit.SECONDS), is(true));
assertThat("Fast Fail.statusCode", closeSocket.closeStatusCode, is(StatusCode.SERVER_ERROR));
assertThat("Fast Fail.errors", closeSocket.errors.size(), is(1));
}
}
}
use of org.eclipse.jetty.websocket.common.CloseInfo in project jetty.project by eclipse.
the class BlockheadClient method onConnectionStateChange.
@Override
public void onConnectionStateChange(ConnectionState state) {
LOG.debug("CLIENT onConnectionStateChange() - {}", state);
switch(state) {
case CLOSED:
// this.disconnect();
break;
case CLOSING:
CloseInfo close = ioState.getCloseInfo();
WebSocketFrame frame = close.asFrame();
LOG.debug("Issuing: {}", frame);
try {
write(frame);
} catch (IOException e) {
LOG.debug(e);
}
break;
default:
/* do nothing */
break;
}
}
use of org.eclipse.jetty.websocket.common.CloseInfo in project jetty.project by eclipse.
the class BlockheadServerConnection method incomingFrame.
@Override
public void incomingFrame(Frame frame) {
LOG.debug("incoming({})", frame);
int count = parseCount.incrementAndGet();
if ((count % 10) == 0) {
LOG.info("Server parsed {} frames", count);
}
incomingFrames.incomingFrame(WebSocketFrame.copy(frame));
if (frame.getOpCode() == OpCode.CLOSE) {
CloseInfo close = new CloseInfo(frame);
LOG.debug("Close frame: {}", close);
}
Type type = frame.getType();
if (echoing.get() && (type.isData() || type.isContinuation())) {
try {
write(WebSocketFrame.copy(frame).setMasked(false));
} catch (IOException e) {
LOG.warn(e);
}
}
}
Aggregations