test/jdk/java/net/httpclient/websocket/Exceptionally.java
branchhttp-client-branch
changeset 56048 f9b6016727b5
parent 56047 2e86bda80f79
child 56051 c4867f1e7e5a
equal deleted inserted replaced
56047:2e86bda80f79 56048:f9b6016727b5
    35 import java.nio.CharBuffer;
    35 import java.nio.CharBuffer;
    36 import java.nio.channels.SocketChannel;
    36 import java.nio.channels.SocketChannel;
    37 import java.nio.charset.StandardCharsets;
    37 import java.nio.charset.StandardCharsets;
    38 import java.util.concurrent.CompletableFuture;
    38 import java.util.concurrent.CompletableFuture;
    39 import java.util.concurrent.CompletionException;
    39 import java.util.concurrent.CompletionException;
       
    40 import java.util.concurrent.CompletionStage;
    40 import java.util.concurrent.TimeUnit;
    41 import java.util.concurrent.TimeUnit;
    41 import java.util.concurrent.TimeoutException;
    42 import java.util.concurrent.TimeoutException;
    42 
    43 
    43 import static jdk.incubator.http.HttpClient.newHttpClient;
    44 import static jdk.incubator.http.HttpClient.newHttpClient;
    44 import static jdk.incubator.http.WebSocket.NORMAL_CLOSURE;
    45 import static jdk.incubator.http.WebSocket.NORMAL_CLOSURE;
   315             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(124)));
   316             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(124)));
   316             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(1)));
   317             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(1)));
   317             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(0)));
   318             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(0)));
   318         }
   319         }
   319     }
   320     }
       
   321 
       
   322     @Test
       
   323     public void testIllegalStateOnClose() throws Exception {
       
   324         DummyWebSocketServer server = new DummyWebSocketServer() {
       
   325             @Override
       
   326             protected void serve(SocketChannel channel) throws IOException {
       
   327                 ByteBuffer closeMessage = ByteBuffer.wrap(new byte[]{(byte) 0x88, 0x00});
       
   328                 int wrote = channel.write(closeMessage);
       
   329                 System.out.println("Wrote bytes: " + wrote);
       
   330                 super.serve(channel);
       
   331             }
       
   332         };
       
   333         try (server) {
       
   334             server.open();
       
   335             CompletableFuture<Void> onCloseCalled = new CompletableFuture<>();
       
   336             CompletableFuture<Void> canClose = new CompletableFuture<>();
       
   337 
       
   338             WebSocket ws = newHttpClient()
       
   339                     .newWebSocketBuilder()
       
   340                     .buildAsync(server.getURI(), new WebSocket.Listener() {
       
   341                         @Override
       
   342                         public CompletionStage<?> onClose(WebSocket webSocket,
       
   343                                                           int statusCode,
       
   344                                                           String reason) {
       
   345                             System.out.println("onClose(" + statusCode + ")");
       
   346                             onCloseCalled.complete(null);
       
   347                             return canClose;
       
   348                         }
       
   349 
       
   350                         @Override
       
   351                         public void onError(WebSocket webSocket, Throwable error) {
       
   352                             System.out.println("onError(" + error + ")");
       
   353                             error.printStackTrace();
       
   354                         }
       
   355                     })
       
   356                     .join();
       
   357 
       
   358             onCloseCalled.join();      // Wait for onClose to be called
       
   359             TimeUnit.SECONDS.sleep(5); // Give canClose some time to reach the WebSocket
       
   360             canClose.complete(null);   // Signal to the WebSocket it can close the output
       
   361 
       
   362             assertCompletesExceptionally(ISE, ws.sendText("", true));
       
   363             assertCompletesExceptionally(ISE, ws.sendText("", false));
       
   364             assertCompletesExceptionally(ISE, ws.sendText("abc", true));
       
   365             assertCompletesExceptionally(ISE, ws.sendText("abc", false));
       
   366             assertCompletesExceptionally(ISE, ws.sendBinary(ByteBuffer.allocate(0), true));
       
   367             assertCompletesExceptionally(ISE, ws.sendBinary(ByteBuffer.allocate(0), false));
       
   368             assertCompletesExceptionally(ISE, ws.sendBinary(ByteBuffer.allocate(1), true));
       
   369             assertCompletesExceptionally(ISE, ws.sendBinary(ByteBuffer.allocate(1), false));
       
   370 
       
   371             assertCompletesExceptionally(ISE, ws.sendPing(ByteBuffer.allocate(125)));
       
   372             assertCompletesExceptionally(ISE, ws.sendPing(ByteBuffer.allocate(124)));
       
   373             assertCompletesExceptionally(ISE, ws.sendPing(ByteBuffer.allocate(1)));
       
   374             assertCompletesExceptionally(ISE, ws.sendPing(ByteBuffer.allocate(0)));
       
   375 
       
   376             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(125)));
       
   377             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(124)));
       
   378             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(1)));
       
   379             assertCompletesExceptionally(ISE, ws.sendPong(ByteBuffer.allocate(0)));
       
   380         }
       
   381     }
   320 }
   382 }