test/jdk/java/net/httpclient/websocket/WebSocketTest.java
branchhttp-client-branch
changeset 56055 7d387d151a3e
parent 56052 da2aa3c773c9
child 56057 ab28f851bd8c
--- a/test/jdk/java/net/httpclient/websocket/WebSocketTest.java	Wed Jan 31 16:18:41 2018 +0000
+++ b/test/jdk/java/net/httpclient/websocket/WebSocketTest.java	Wed Jan 31 16:31:48 2018 +0000
@@ -58,6 +58,39 @@
             = IllegalStateException.class;
 
     @Test
+    public void abort() throws IOException {
+        try (DummyWebSocketServer server = new DummyWebSocketServer()) {
+            server.open();
+            WebSocket ws = newHttpClient()
+                    .newWebSocketBuilder()
+                    .buildAsync(server.getURI(), new WebSocket.Listener() {
+                        @Override
+                        public void onOpen(WebSocket webSocket) { /* no initial request */ }
+                    })
+                    .join();
+
+            ws.abort();
+            // Each consecutive abort MUST be a no-op:
+            ws.abort();
+            assertTrue(ws.isInputClosed());
+            assertTrue(ws.isOutputClosed());
+            assertEquals(ws.getSubprotocol(), "");
+            ws.abort();
+            assertTrue(ws.isInputClosed());
+            assertTrue(ws.isOutputClosed());
+            assertEquals(ws.getSubprotocol(), "");
+            // At this point request MUST be a no-op:
+            ws.request(1);
+            ws.request(Long.MAX_VALUE);
+            // Throws IAE regardless of whether WebSocket is closed or not:
+            assertThrows(IAE, () -> ws.request(Integer.MIN_VALUE));
+            assertThrows(IAE, () -> ws.request(Long.MIN_VALUE));
+            assertThrows(IAE, () -> ws.request(-1));
+            assertThrows(IAE, () -> ws.request(0));
+        }
+    }
+
+    @Test
     public void testNull() throws IOException {
         try (DummyWebSocketServer server = new DummyWebSocketServer()) {
             server.open();
@@ -197,6 +230,7 @@
             assertCompletesExceptionally(IAE, ws.sendClose(Integer.MIN_VALUE, "a reason"));
 
             assertThrows(IAE, () -> ws.request(Integer.MIN_VALUE));
+            assertThrows(IAE, () -> ws.request(Long.MIN_VALUE));
             assertThrows(IAE, () -> ws.request(-1));
             assertThrows(IAE, () -> ws.request(0));
         }