/* * Copyright (C) 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package benchmarks.regression; import com.google.caliper.Param; import com.google.caliper.SimpleBenchmark; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.URL; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; public class SSLSocketBenchmark extends SimpleBenchmark { private static final int BUFFER_SIZE = 8192; final byte[] buffer = new byte[BUFFER_SIZE]; @Param private WebSite webSite; public enum WebSite { DOCS("https://docs.google.com"), MAIL("https://mail.google.com"), SITES("https://sites.google.com"), WWW("https://www.google.com"); final InetAddress host; final int port; final byte[] request; WebSite(String uri) { try { URL url = new URL(uri); this.host = InetAddress.getByName(url.getHost()); int p = url.getPort(); String portString; if (p == -1) { this.port = 443; portString = ""; } else { this.port = p; portString = ":" + port; } this.request = ("GET " + uri + " HTTP/1.0\r\n" + "Host: " + host + portString + "\r\n" +"\r\n").getBytes(); } catch (IOException e) { throw new RuntimeException(e); } } } private SocketFactory sf; @Override protected void setUp() throws Exception { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, null, null); this.sf = sslContext.getSocketFactory(); } public void time(int reps) throws Exception { for (int i = 0; i < reps; ++i) { Socket s = sf.createSocket(webSite.host, webSite.port); OutputStream out = s.getOutputStream(); out.write(webSite.request); InputStream in = s.getInputStream(); while (true) { int n = in.read(buffer); if (n == -1) { break; } } in.close(); } } }