56 = IllegalArgumentException.class; |
56 = IllegalArgumentException.class; |
57 private static final Class<IllegalStateException> ISE |
57 private static final Class<IllegalStateException> ISE |
58 = IllegalStateException.class; |
58 = IllegalStateException.class; |
59 |
59 |
60 @Test |
60 @Test |
|
61 public void abort() throws IOException { |
|
62 try (DummyWebSocketServer server = new DummyWebSocketServer()) { |
|
63 server.open(); |
|
64 WebSocket ws = newHttpClient() |
|
65 .newWebSocketBuilder() |
|
66 .buildAsync(server.getURI(), new WebSocket.Listener() { |
|
67 @Override |
|
68 public void onOpen(WebSocket webSocket) { /* no initial request */ } |
|
69 }) |
|
70 .join(); |
|
71 |
|
72 ws.abort(); |
|
73 // Each consecutive abort MUST be a no-op: |
|
74 ws.abort(); |
|
75 assertTrue(ws.isInputClosed()); |
|
76 assertTrue(ws.isOutputClosed()); |
|
77 assertEquals(ws.getSubprotocol(), ""); |
|
78 ws.abort(); |
|
79 assertTrue(ws.isInputClosed()); |
|
80 assertTrue(ws.isOutputClosed()); |
|
81 assertEquals(ws.getSubprotocol(), ""); |
|
82 // At this point request MUST be a no-op: |
|
83 ws.request(1); |
|
84 ws.request(Long.MAX_VALUE); |
|
85 // Throws IAE regardless of whether WebSocket is closed or not: |
|
86 assertThrows(IAE, () -> ws.request(Integer.MIN_VALUE)); |
|
87 assertThrows(IAE, () -> ws.request(Long.MIN_VALUE)); |
|
88 assertThrows(IAE, () -> ws.request(-1)); |
|
89 assertThrows(IAE, () -> ws.request(0)); |
|
90 } |
|
91 } |
|
92 |
|
93 @Test |
61 public void testNull() throws IOException { |
94 public void testNull() throws IOException { |
62 try (DummyWebSocketServer server = new DummyWebSocketServer()) { |
95 try (DummyWebSocketServer server = new DummyWebSocketServer()) { |
63 server.open(); |
96 server.open(); |
64 WebSocket ws = newHttpClient() |
97 WebSocket ws = newHttpClient() |
65 .newWebSocketBuilder() |
98 .newWebSocketBuilder() |
195 assertCompletesExceptionally(IAE, ws.sendClose(65536, "a reason")); |
228 assertCompletesExceptionally(IAE, ws.sendClose(65536, "a reason")); |
196 assertCompletesExceptionally(IAE, ws.sendClose(Integer.MAX_VALUE, "a reason")); |
229 assertCompletesExceptionally(IAE, ws.sendClose(Integer.MAX_VALUE, "a reason")); |
197 assertCompletesExceptionally(IAE, ws.sendClose(Integer.MIN_VALUE, "a reason")); |
230 assertCompletesExceptionally(IAE, ws.sendClose(Integer.MIN_VALUE, "a reason")); |
198 |
231 |
199 assertThrows(IAE, () -> ws.request(Integer.MIN_VALUE)); |
232 assertThrows(IAE, () -> ws.request(Integer.MIN_VALUE)); |
|
233 assertThrows(IAE, () -> ws.request(Long.MIN_VALUE)); |
200 assertThrows(IAE, () -> ws.request(-1)); |
234 assertThrows(IAE, () -> ws.request(-1)); |
201 assertThrows(IAE, () -> ws.request(0)); |
235 assertThrows(IAE, () -> ws.request(0)); |
202 } |
236 } |
203 } |
237 } |
204 |
238 |