public void send(byte[] data) throws IOException { send(data, 0, data.length); }
public void send(String s) throws IOException { send(s.getBytes()); }
public void send(byte[] data, int offset, int length) throws IOException { send(new Frame(data, offset, length).mask()); }
public long ping() throws IOException { long time = System.currentTimeMillis(); send(new Frame(Frame.OPCODE_PING)); Frame frame = readFrame(); while (!frame.isPong()) { onFrame(frame); if (frame.isClose()) break; frame = readFrame(); } return System.currentTimeMillis() - time; }
public void close() throws IOException { if (!connected) return; send(new Frame(Frame.OPCODE_CONNECTION_CLOSE)); Frame frame = readFrame(); while (!frame.isClose()) { onFrame(frame); frame = readFrame(); } connected = false; onClose(); } }
@Test public void echoTest() throws IOException, URISyntaxException, InterruptedException { handler = new WebSocketHandler() { @Override public void onMessage(WebSocketListener listener, Message message) { listener.sendMessage(message); } }; AtomicReference<String> messageHolder = new AtomicReference<>(); SimpleWebSocketClient client = new SimpleWebSocketClient("ws://localhost:" + getPort()) { @Override public void onMessage(Message message) { messageHolder.set(message.asString()); } }; client.send("foo bar"); client.waitForMessage(); Assert.assertEquals("foo bar", messageHolder.get()); }
ThreadLocalRandom.current().nextBytes(data); try { client.send(data); client.waitForMessage(); } catch (IOException e) {
@Test public void limitTest() throws IOException, URISyntaxException, InterruptedException { handler = new WebSocketHandler() { @Override public void onMessage(WebSocketListener listener, Message message) { listener.sendMessage(message); } }; SimpleWebSocketClient client = new SimpleWebSocketClient("ws://localhost:" + getPort()) { @Override public void onMessage(Message message) { throw new IllegalArgumentException(); } }; byte[] data; data = new byte[1024 * 1024]; ThreadLocalRandom.current().nextBytes(data); try { client.send(data); client.waitForMessage(); Assert.assertTrue(false); } catch (SocketException e) { Assert.assertEquals("Connection reset", e.getMessage()); } }
for (int i = 0; i < 10; i++) { ThreadLocalRandom.current().nextBytes(data); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get());
for (int i = 0; i < 100; i++) { ThreadLocalRandom.current().nextBytes(data); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get());
byte[] data = new byte[126]; ThreadLocalRandom.current().nextBytes(data); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get()); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get()); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get());
for (int i = 0; i < 100; i++) { ThreadLocalRandom.current().nextBytes(data); client.send(data); client.waitForMessage(); Assert.assertEquals(MD5.create().update(data).asString(), md5Holder.get());
@Test public void testFrames() throws IOException, URISyntaxException, InterruptedException { handler = new WebSocketHandler() { @Override public void onMessage(WebSocketListener listener, Message message) { listener.sendMessage(message); } }; AtomicReference<String> messageHolder = new AtomicReference<>(); SimpleWebSocketClient client = new SimpleWebSocketClient("ws://localhost:" + getPort()) { @Override public void onMessage(Message message) { messageHolder.set(message.asString()); } }; Message message = new Message().append("foo").append(" ").append("bar"); client.send(message); client.waitForMessage(); Assert.assertEquals("foo bar", messageHolder.get()); }
client.send("close"); try { client.waitForMessage();