< prev index next >

test/jdk/java/net/httpclient/websocket/jdk.incubator.httpclient/jdk/incubator/http/internal/websocket/MockListener.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 18,131 **** * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package jdk.incubator.http.internal.websocket; - import jdk.incubator.http.internal.websocket.TestSupport.F1; - import jdk.incubator.http.internal.websocket.TestSupport.F2; - import jdk.incubator.http.internal.websocket.TestSupport.F3; - import jdk.incubator.http.internal.websocket.TestSupport.InvocationChecker; - import jdk.incubator.http.internal.websocket.TestSupport.InvocationExpectation; - import jdk.incubator.http.internal.websocket.TestSupport.Mock; import jdk.incubator.http.WebSocket; - import jdk.incubator.http.WebSocket.Listener; import jdk.incubator.http.WebSocket.MessagePart; import java.nio.ByteBuffer; ! import java.util.LinkedList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; - import java.util.concurrent.TimeUnit; ! final class MockListener implements Listener, Mock { ! private final InvocationChecker checker; @Override ! public CompletableFuture<Void> expectations(long timeout, TimeUnit unit) { ! return checker.expectations(timeout, unit); } ! public static final class Builder { ! private final List<InvocationExpectation> expectations = new LinkedList<>(); ! Builder expectOnOpen(F1<? super WebSocket, Boolean> predicate) { ! InvocationExpectation e = new InvocationExpectation("onOpen", ! args -> predicate.apply((WebSocket) args[0])); ! expectations.add(e); ! return this; } ! Builder expectOnPing(F2<? super WebSocket, ? super ByteBuffer, Boolean> predicate) { ! InvocationExpectation e = new InvocationExpectation("onPing", ! args -> predicate.apply((WebSocket) args[0], (ByteBuffer) args[1])); ! expectations.add(e); ! return this; } ! Builder expectOnClose(F3<? super WebSocket, ? super Integer, ? super String, Boolean> predicate) { ! expectations.add(new InvocationExpectation("onClose", ! args -> predicate.apply((WebSocket) args[0], (Integer) args[1], (String) args[2]))); ! return this; } ! Builder expectOnError(F2<? super WebSocket, ? super Throwable, Boolean> predicate) { ! expectations.add(new InvocationExpectation("onError", ! args -> predicate.apply((WebSocket) args[0], (Throwable) args[1]))); ! return this; } ! MockListener build() { ! return new MockListener(new LinkedList<>(expectations)); } } ! private MockListener(List<InvocationExpectation> expectations) { ! this.checker = new InvocationChecker(expectations); } @Override ! public void onOpen(WebSocket webSocket) { ! checker.checkInvocation("onOpen", webSocket); } @Override ! public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, MessagePart part) { ! checker.checkInvocation("onText", webSocket, message, part); ! return null; } ! @Override ! public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer message, MessagePart part) { ! checker.checkInvocation("onBinary", webSocket, message, part); ! return null; } @Override ! public CompletionStage<?> onPing(WebSocket webSocket, ByteBuffer message) { ! checker.checkInvocation("onPing", webSocket, message); ! return null; } @Override ! public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) { ! checker.checkInvocation("onPong", webSocket, message); ! return null; } @Override ! public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, ! String reason) { ! checker.checkInvocation("onClose", webSocket, statusCode, reason); ! return null; } @Override ! public void onError(WebSocket webSocket, Throwable error) { ! checker.checkInvocation("onError", webSocket, error); } } --- 18,372 ---- * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ + package jdk.incubator.http.internal.websocket; import jdk.incubator.http.WebSocket; import jdk.incubator.http.WebSocket.MessagePart; + import java.nio.ByteBuffer; ! import java.util.ArrayList; import java.util.List; + import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; ! import static jdk.incubator.http.internal.websocket.TestSupport.fullCopy; ! ! public class MockListener implements WebSocket.Listener { ! ! private final long bufferSize; ! private long count; ! private final List<ListenerInvocation> invocations = new ArrayList<>(); ! private final CompletableFuture<?> lastCall = new CompletableFuture<>(); ! /* ! * Typical buffer sizes: 1, n, Long.MAX_VALUE ! */ ! public MockListener(long bufferSize) { ! if (bufferSize < 1) { ! throw new IllegalArgumentException(); ! } ! this.bufferSize = bufferSize; ! } @Override ! public void onOpen(WebSocket webSocket) { ! System.out.printf("onOpen(%s)%n", webSocket); ! invocations.add(new OnOpen(webSocket)); ! onOpen0(webSocket); } ! protected void onOpen0(WebSocket webSocket) { ! replenish(webSocket); ! } ! @Override ! public CompletionStage<?> onText(WebSocket webSocket, ! CharSequence message, ! MessagePart part) { ! System.out.printf("onText(%s, %s, %s)%n", webSocket, message, part); ! invocations.add(new OnText(webSocket, message.toString(), part)); ! return onText0(webSocket, message, part); ! } ! protected CompletionStage<?> onText0(WebSocket webSocket, ! CharSequence message, ! MessagePart part) { ! replenish(webSocket); ! return null; } ! @Override ! public CompletionStage<?> onBinary(WebSocket webSocket, ! ByteBuffer message, ! MessagePart part) { ! System.out.printf("onBinary(%s, %s, %s)%n", webSocket, message, part); ! invocations.add(new OnBinary(webSocket, fullCopy(message), part)); ! return onBinary0(webSocket, message, part); } ! protected CompletionStage<?> onBinary0(WebSocket webSocket, ! ByteBuffer message, ! MessagePart part) { ! replenish(webSocket); ! return null; } ! @Override ! public CompletionStage<?> onPing(WebSocket webSocket, ByteBuffer message) { ! System.out.printf("onPing(%s, %s)%n", webSocket, message); ! invocations.add(new OnPing(webSocket, fullCopy(message))); ! return onPing0(webSocket, message); } ! protected CompletionStage<?> onPing0(WebSocket webSocket, ByteBuffer message) { ! replenish(webSocket); ! return null; } + + @Override + public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) { + System.out.printf("onPong(%s, %s)%n", webSocket, message); + invocations.add(new OnPong(webSocket, fullCopy(message))); + return onPong0(webSocket, message); } ! protected CompletionStage<?> onPong0(WebSocket webSocket, ByteBuffer message) { ! replenish(webSocket); ! return null; } @Override ! public CompletionStage<?> onClose(WebSocket webSocket, ! int statusCode, ! String reason) { ! System.out.printf("onClose(%s, %s, %s)%n", webSocket, statusCode, reason); ! invocations.add(new OnClose(webSocket, statusCode, reason)); ! lastCall.complete(null); ! return null; } @Override ! public void onError(WebSocket webSocket, Throwable error) { ! System.out.printf("onError(%s, %s)%n", webSocket, error); ! invocations.add(new OnError(webSocket, error == null ? null : error.getClass())); ! lastCall.complete(null); ! } ! ! public CompletableFuture<?> onCloseOrOnErrorCalled() { ! return lastCall.copy(); ! } ! ! protected void replenish(WebSocket webSocket) { ! if (--count <= 0) { ! count = bufferSize - bufferSize / 2; ! } ! webSocket.request(count); ! } ! ! public List<ListenerInvocation> invocations() { ! return new ArrayList<>(invocations); ! } ! ! public abstract static class ListenerInvocation { ! ! public static OnOpen onOpen(WebSocket webSocket) { ! return new OnOpen(webSocket); ! } ! ! public static OnText onText(WebSocket webSocket, ! String text, MessagePart part) { ! return new OnText(webSocket, text, part); } ! public static OnBinary onBinary(WebSocket webSocket, ! ByteBuffer data, MessagePart part) { ! return new OnBinary(webSocket, data, part); ! } ! ! public static OnPing onPing(WebSocket webSocket, ! ByteBuffer data) { ! return new OnPing(webSocket, data); ! } ! ! public static OnPong onPong(WebSocket webSocket, ! ByteBuffer data) { ! return new OnPong(webSocket, data); ! } ! ! public static OnClose onClose(WebSocket webSocket, ! int statusCode, ! String reason) { ! return new OnClose(webSocket, statusCode, reason); ! } ! ! public static OnError onError(WebSocket webSocket, ! Class<? extends Throwable> clazz) { ! return new OnError(webSocket, clazz); ! } ! ! final WebSocket webSocket; ! ! private ListenerInvocation(WebSocket webSocket) { ! this.webSocket = webSocket; ! } ! } ! ! public static final class OnOpen extends ListenerInvocation { ! ! public OnOpen(WebSocket webSocket) { ! super(webSocket); } @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! ListenerInvocation that = (ListenerInvocation) o; ! return Objects.equals(webSocket, that.webSocket); } @Override ! public int hashCode() { ! return Objects.hashCode(webSocket); ! } ! } ! ! public static final class OnText extends ListenerInvocation { ! ! final String text; ! final MessagePart part; ! ! public OnText(WebSocket webSocket, String text, MessagePart part) { ! super(webSocket); ! this.text = text; ! this.part = part; } @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnText onText = (OnText) o; ! return Objects.equals(text, onText.text) && ! part == onText.part && ! Objects.equals(webSocket, onText.webSocket); } @Override ! public int hashCode() { ! return Objects.hash(text, part, webSocket); ! } ! } ! ! public static final class OnBinary extends ListenerInvocation { ! ! final ByteBuffer data; ! final MessagePart part; ! ! public OnBinary(WebSocket webSocket, ByteBuffer data, MessagePart part) { ! super(webSocket); ! this.data = data; ! this.part = part; ! } ! ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnBinary onBinary = (OnBinary) o; ! return Objects.equals(data, onBinary.data) && ! part == onBinary.part && ! Objects.equals(webSocket, onBinary.webSocket); ! } ! ! @Override ! public int hashCode() { ! return Objects.hash(data, part, webSocket); ! } ! } ! ! public static final class OnPing extends ListenerInvocation { ! ! final ByteBuffer data; ! ! public OnPing(WebSocket webSocket, ByteBuffer data) { ! super(webSocket); ! this.data = data; ! } ! ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnPing onPing = (OnPing) o; ! return Objects.equals(data, onPing.data) && ! Objects.equals(webSocket, onPing.webSocket); ! } ! ! @Override ! public int hashCode() { ! return Objects.hash(data, webSocket); ! } ! } ! ! public static final class OnPong extends ListenerInvocation { ! ! final ByteBuffer data; ! ! public OnPong(WebSocket webSocket, ByteBuffer data) { ! super(webSocket); ! this.data = data; ! } ! ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnPong onPong = (OnPong) o; ! return Objects.equals(data, onPong.data) && ! Objects.equals(webSocket, onPong.webSocket); ! } ! ! @Override ! public int hashCode() { ! return Objects.hash(data, webSocket); ! } ! } ! ! public static final class OnClose extends ListenerInvocation { ! ! final int statusCode; ! final String reason; ! ! public OnClose(WebSocket webSocket, int statusCode, String reason) { ! super(webSocket); ! this.statusCode = statusCode; ! this.reason = reason; ! } ! ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnClose onClose = (OnClose) o; ! return statusCode == onClose.statusCode && ! Objects.equals(reason, onClose.reason) && ! Objects.equals(webSocket, onClose.webSocket); ! } ! ! @Override ! public int hashCode() { ! return Objects.hash(statusCode, reason, webSocket); ! } ! } ! ! public static final class OnError extends ListenerInvocation { ! ! final Class<? extends Throwable> clazz; ! ! public OnError(WebSocket webSocket, Class<? extends Throwable> clazz) { ! super(webSocket); ! this.clazz = clazz; ! } ! ! @Override ! public boolean equals(Object o) { ! if (this == o) return true; ! if (o == null || getClass() != o.getClass()) return false; ! OnError onError = (OnError) o; ! return Objects.equals(clazz, onError.clazz) && ! Objects.equals(webSocket, onError.webSocket); ! } ! ! @Override ! public int hashCode() { ! return Objects.hash(clazz, webSocket); ! } } }
< prev index next >