< prev index next >
test/jdk/java/net/httpclient/http2/server/Http2TestServer.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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.
@@ -26,10 +26,11 @@
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
@@ -129,10 +130,22 @@
*/
public void addHandler(Http2Handler handler, String path) {
handlers.put(path, handler);
}
+ volatile Http2TestExchangeSupplier exchangeSupplier = Http2TestExchangeSupplier.ofDefault();
+
+ /**
+ * Sets an explicit exchange handler to be used for all future connections.
+ * Useful for testing scenarios where non-standard or specific server
+ * behaviour is required, either direct control over the frames sent, "bad"
+ * behaviour, or something else.
+ */
+ public void setExchangeSupplier(Http2TestExchangeSupplier exchangeSupplier) {
+ this.exchangeSupplier = exchangeSupplier;
+ }
+
Http2Handler getHandlerFor(String path) {
if (path == null || path.equals(""))
path = "/";
final String fpath = path;
@@ -197,11 +210,12 @@
exec.submit(() -> {
try {
while (!stopping) {
Socket socket = server.accept();
InetSocketAddress addr = (InetSocketAddress) socket.getRemoteSocketAddress();
- Http2TestServerConnection c = new Http2TestServerConnection(this, socket);
+ Http2TestServerConnection c =
+ new Http2TestServerConnection(this, socket, exchangeSupplier);
connections.put(addr, c);
try {
c.run();
} catch(Throwable e) {
// we should not reach here, but if we do
< prev index next >