use of org.eclipse.jetty.websocket.common.WebSocketFrame in project jetty.project by eclipse.
the class ConfiguratorTest method testProtocol_LowercaseHeader.
/**
* Test of Sec-WebSocket-Protocol, using all lowercase header
* @throws Exception on test failure
*/
@Test
public void testProtocol_LowercaseHeader() throws Exception {
URI uri = baseServerUri.resolve("/protocols");
ProtocolsConfigurator.seenProtocols.set(null);
try (IBlockheadClient client = new BlockheadClient(uri)) {
client.addHeader("sec-websocket-protocol: echo, chat, status\r\n");
client.connect();
client.sendStandardRequest();
client.expectUpgradeResponse();
client.write(new TextFrame().setPayload("getProtocols"));
EventQueue<WebSocketFrame> frames = client.readFrames(1, 1, TimeUnit.SECONDS);
WebSocketFrame frame = frames.poll();
Assert.assertThat("Frame Response", frame.getPayloadAsUTF8(), is("Requested Protocols: [\"echo\",\"chat\",\"status\"]"));
}
}
use of org.eclipse.jetty.websocket.common.WebSocketFrame in project jetty.project by eclipse.
the class TestABCase5 method testCase5_13.
/**
* Send continuation+!fin, then text+fin (framewise)
* @throws Exception on test failure
*/
@Test
public void testCase5_13() throws Exception {
List<WebSocketFrame> send = new ArrayList<>();
send.add(new ContinuationFrame().setPayload("sorry").setFin(false));
send.add(new TextFrame().setPayload("hello, world"));
send.add(new CloseInfo(StatusCode.NORMAL).asFrame());
List<WebSocketFrame> expect = new ArrayList<>();
expect.add(new CloseInfo(StatusCode.PROTOCOL).asFrame());
try (Fuzzer fuzzer = new Fuzzer(this);
StacklessLogging supress = new StacklessLogging(Parser.class)) {
fuzzer.connect();
fuzzer.setSendMode(Fuzzer.SendMode.PER_FRAME);
fuzzer.sendAndIgnoreBrokenPipe(send);
fuzzer.expect(expect);
}
}
use of org.eclipse.jetty.websocket.common.WebSocketFrame in project jetty.project by eclipse.
the class TestABCase5 method testCase5_14.
/**
* Send continuation+!fin, then text+fin (slowly)
* @throws Exception on test failure
*/
@Test
public void testCase5_14() throws Exception {
List<WebSocketFrame> send = new ArrayList<>();
send.add(new ContinuationFrame().setPayload("sorry").setFin(false));
send.add(new TextFrame().setPayload("hello, world"));
send.add(new CloseInfo(StatusCode.NORMAL).asFrame());
List<WebSocketFrame> expect = new ArrayList<>();
expect.add(new CloseInfo(StatusCode.PROTOCOL).asFrame());
try (Fuzzer fuzzer = new Fuzzer(this);
StacklessLogging supress = new StacklessLogging(Parser.class)) {
fuzzer.connect();
fuzzer.setSendMode(Fuzzer.SendMode.SLOW);
fuzzer.setSlowSendSegmentSize(1);
fuzzer.sendAndIgnoreBrokenPipe(send);
fuzzer.expect(expect);
}
}
use of org.eclipse.jetty.websocket.common.WebSocketFrame in project jetty.project by eclipse.
the class TestABCase5 method testCase5_20.
/**
* send text message fragmented in 5 frames, with 2 pings and wait between. (framewise)
* @throws Exception on test failure
*/
@Test
public void testCase5_20() throws Exception {
List<WebSocketFrame> send1 = new ArrayList<>();
send1.add(new TextFrame().setPayload("f1").setFin(false));
send1.add(new ContinuationFrame().setPayload(",f2").setFin(false));
send1.add(new PingFrame().setPayload("pong-1"));
List<WebSocketFrame> send2 = new ArrayList<>();
send2.add(new ContinuationFrame().setPayload(",f3").setFin(false));
send2.add(new ContinuationFrame().setPayload(",f4").setFin(false));
send2.add(new PingFrame().setPayload("pong-2"));
send2.add(new ContinuationFrame().setPayload(",f5").setFin(true));
send2.add(new CloseInfo(StatusCode.NORMAL).asFrame());
List<WebSocketFrame> expect1 = new ArrayList<>();
expect1.add(new PongFrame().setPayload("pong-1"));
List<WebSocketFrame> expect2 = new ArrayList<>();
expect2.add(new PongFrame().setPayload("pong-2"));
expect2.add(new TextFrame().setPayload("f1,f2,f3,f4,f5"));
expect2.add(new CloseInfo(StatusCode.NORMAL).asFrame());
try (Fuzzer fuzzer = new Fuzzer(this);
StacklessLogging supress = new StacklessLogging(Parser.class)) {
fuzzer.connect();
fuzzer.setSendMode(Fuzzer.SendMode.PER_FRAME);
fuzzer.send(send1);
fuzzer.expect(expect1);
TimeUnit.SECONDS.sleep(1);
fuzzer.send(send2);
fuzzer.expect(expect2);
}
}
use of org.eclipse.jetty.websocket.common.WebSocketFrame in project jetty.project by eclipse.
the class TestABCase6 method testCase6_4_3.
/**
* invalid text message, 1 frame/fragment (slowly, and split within code points)
* @throws Exception on test failure
*/
@Test
@Slow
public void testCase6_4_3() throws Exception {
// Disable Long Stacks from Parser (we know this test will throw an exception)
try (StacklessLogging scope = new StacklessLogging(Parser.class)) {
ByteBuffer payload = ByteBuffer.allocate(64);
BufferUtil.clearToFill(payload);
// good
payload.put(TypeUtil.fromHexString("cebae1bdb9cf83cebcceb5"));
// INVALID
payload.put(TypeUtil.fromHexString("f4908080"));
// good
payload.put(TypeUtil.fromHexString("656469746564"));
BufferUtil.flipToFlush(payload, 0);
List<WebSocketFrame> send = new ArrayList<>();
send.add(new TextFrame().setPayload(payload));
send.add(new CloseInfo(StatusCode.NORMAL).asFrame());
List<WebSocketFrame> expect = new ArrayList<>();
expect.add(new CloseInfo(StatusCode.BAD_PAYLOAD).asFrame());
try (Fuzzer fuzzer = new Fuzzer(this)) {
fuzzer.connect();
ByteBuffer net = fuzzer.asNetworkBuffer(send);
int[] splits = { 17, 21, net.limit() };
// Header + good UTF
ByteBuffer part1 = net.slice();
part1.limit(splits[0]);
// invalid UTF
ByteBuffer part2 = net.slice();
part2.position(splits[0]);
part2.limit(splits[1]);
// good UTF
ByteBuffer part3 = net.slice();
part3.position(splits[1]);
part3.limit(splits[2]);
// the header + good utf
fuzzer.send(part1);
TimeUnit.MILLISECONDS.sleep(500);
// the bad UTF
fuzzer.send(part2);
TimeUnit.MILLISECONDS.sleep(500);
// the rest (shouldn't work)
fuzzer.send(part3);
fuzzer.expect(expect);
}
}
}
Aggregations