From 08bc3c8808ec4495a1284ed6eb2325d44b435d33 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Sat, 1 Feb 2014 11:00:49 -0800 Subject: [PATCH 1/2] Add MockWebServer.setNpnProtocols --- .../squareup/okhttp/benchmarks/Benchmark.java | 1 + .../okhttp/mockwebserver/MockWebServer.java | 25 +++++++++++++++++-- .../internal/http/URLConnectionTest.java | 5 ++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/benchmarks/src/main/java/com/squareup/okhttp/benchmarks/Benchmark.java b/benchmarks/src/main/java/com/squareup/okhttp/benchmarks/Benchmark.java index 16bd06350..fe23182fc 100644 --- a/benchmarks/src/main/java/com/squareup/okhttp/benchmarks/Benchmark.java +++ b/benchmarks/src/main/java/com/squareup/okhttp/benchmarks/Benchmark.java @@ -138,6 +138,7 @@ public class Benchmark { SSLContext sslContext = SslContextBuilder.localhost(); server.useHttps(sslContext.getSocketFactory(), false); server.setNpnEnabled(true); + server.setNpnProtocols(protocols); } final MockResponse response = newResponse(); diff --git a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java index 90e2925e6..71c7c860f 100644 --- a/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java +++ b/mockwebserver/src/main/java/com/squareup/okhttp/mockwebserver/MockWebServer.java @@ -106,6 +106,7 @@ public final class MockWebServer { private int port = -1; private boolean npnEnabled = true; + private List npnProtocols = Protocol.HTTP2_SPDY3_AND_HTTP; public int getPort() { if (port == -1) throw new IllegalStateException("Cannot retrieve port before calling play()"); @@ -165,6 +166,27 @@ public final class MockWebServer { this.npnEnabled = npnEnabled; } + /** + * Indicates the protocols supported by NPN on incoming HTTPS connections. + * This list is ignored when npn is disabled. + * + * @param protocols the protocols to use, in order of preference. The list + * must contain "http/1.1". It must not contain null. + */ + public void setNpnProtocols(List protocols) { + protocols = Util.immutableList(protocols); + if (!protocols.contains(Protocol.HTTP_11)) { + throw new IllegalArgumentException("protocols doesn't contain http/1.1: " + protocols); + } + if (protocols.contains(null)) { + throw new IllegalArgumentException("protocols must not contain null"); + } + if (protocols.contains(ByteString.EMPTY)) { + throw new IllegalArgumentException("protocols contains an empty string"); + } + this.npnProtocols = Util.immutableList(protocols); + } + /** * Serve requests with HTTPS rather than otherwise. * @param tunnelProxy true to expect the HTTP CONNECT method before @@ -304,8 +326,7 @@ public final class MockWebServer { openClientSockets.put(socket, true); if (npnEnabled) { - // TODO: expose means to select which protocols to advertise. - Platform.get().setNpnProtocols(sslSocket, Protocol.HTTP2_SPDY3_AND_HTTP); + Platform.get().setNpnProtocols(sslSocket, npnProtocols); } sslSocket.startHandshake(); diff --git a/okhttp/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java b/okhttp/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java index d9d3d3d2f..6ed031d54 100644 --- a/okhttp/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java +++ b/okhttp/src/test/java/com/squareup/okhttp/internal/http/URLConnectionTest.java @@ -2834,10 +2834,11 @@ public final class URLConnectionTest { * -Xbootclasspath/p:/tmp/npn-boot-8.1.2.v20120308.jar} */ private void enableNpn(Protocol protocol) { - server.useHttps(sslContext.getSocketFactory(), false); - server.setNpnEnabled(true); client.setSslSocketFactory(sslContext.getSocketFactory()); client.setHostnameVerifier(new RecordingHostnameVerifier()); client.setProtocols(Arrays.asList(protocol, Protocol.HTTP_11)); + server.useHttps(sslContext.getSocketFactory(), false); + server.setNpnEnabled(true); + server.setNpnProtocols(client.getProtocols()); } } From 66b25823795f14f156576d633294eb8c62382c4a Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Sat, 1 Feb 2014 11:01:27 -0800 Subject: [PATCH 2/2] Add instructions to execute the benchmark with correct JVM parameters. --- benchmarks/README.md | 8 ++++++++ benchmarks/pom.xml | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 benchmarks/README.md diff --git a/benchmarks/README.md b/benchmarks/README.md new file mode 100644 index 000000000..59f571fc5 --- /dev/null +++ b/benchmarks/README.md @@ -0,0 +1,8 @@ +OkHttp Benchmarks +======================================= + +This module allows you to test the performance of HTTP clients. + +### Running + 1. If you made modifications to `com.squareup.okhttp.benchmarks.Benchmark` run `mvn compile`. + 2. Run `mvn exec:exec` to launch a new JVM, which will execute the benchmark. diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 14d93eeef..cecf86480 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -52,4 +52,30 @@ 4.0.15.Final + + + + org.codehaus.mojo + exec-maven-plugin + + + + java + + + + + java + + -Xms512m + -Xmx512m + -Xbootclasspath/p:${settings.localRepository}/org/mortbay/jetty/npn/npn-boot/${npn.version}/npn-boot-${npn.version}.jar + -classpath + + com.squareup.okhttp.benchmarks.Benchmark + + + + +