1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.luni.tests.internal.net.www.protocol.http; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201a7e762f344c111416b001a61e41451d01f605adJorg Pleumannimport dalvik.annotation.SideEffect; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Authenticator; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.HttpURLConnection; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.InetSocketAddress; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.PasswordAuthentication; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Proxy; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.ProxySelector; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.ServerSocket; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Socket; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketAddress; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketTimeoutException; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URI; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URL; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>HTTPURLConnection</code> class constructors and methods. 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class HttpURLConnectionTest extends TestCase { 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final static Object bound = new Object(); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class MockServer extends Thread { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ServerSocket serverSocket; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean accepted = false; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean started = false; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MockServer(String name) throws IOException { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(name); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket = new ServerSocket(0); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.setSoTimeout(1000); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int port() { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return serverSocket.getLocalPort(); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (bound) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project started = true; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bound.notify(); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.accept().close(); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project accepted = true; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SocketTimeoutException ignore) { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(e); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class MockProxyServer extends MockServer { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean acceptedAuthorizedRequest; 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MockProxyServer(String name) throws Exception { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(name); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = serverSocket.accept(); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.setSoTimeout(1000); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] buff = new byte[1024]; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int num = socket.getInputStream().read(buff); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.getOutputStream().write(( 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes "HTTP/1.0 407 Proxy authentication required\n" 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "Proxy-authenticate: Basic realm=\"remotehost\"\n\n") 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getBytes()); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project num = socket.getInputStream().read(buff); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (num == -1) { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // this connection was closed, create new one: 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket = serverSocket.accept(); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.setSoTimeout(1000); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project num = socket.getInputStream().read(buff); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String request = new String(buff, 0, num); 109f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes acceptedAuthorizedRequest = 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project request.toLowerCase().indexOf("proxy-authorization:") > 0; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (acceptedAuthorizedRequest) { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.getOutputStream().write(( 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "HTTP/1.1 200 OK\n\n").getBytes()); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProxySelector implementation used in the test. 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class TestProxySelector extends ProxySelector { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // proxy port 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int proxy_port; 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // server port 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int server_port; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates proxy selector instance. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Selector will return the proxy, only if the connection 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is made to localhost:server_port. Otherwise it will 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * return NO_PROXY. 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Address of the returned proxy will be localhost:proxy_port. 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TestProxySelector(int server_port, int proxy_port) { 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.server_port = server_port; 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.proxy_port = proxy_port; 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public java.util.List<Proxy> select(URI uri) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Proxy proxy = Proxy.NO_PROXY; 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (("localhost".equals(uri.getHost())) 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && (server_port == uri.getPort())) { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy = new Proxy(Proxy.Type.HTTP, 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress("localhost", proxy_port)); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ArrayList<Proxy> result = new ArrayList<Proxy>(); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.add(proxy); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // do nothing 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 161229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * org.apache.harmony.luni.internal.net.www.http.getOutputStream() 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGetOutputStream() throws Exception { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-482 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockServer httpServer = 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new MockServer("ServerSocket for HttpURLConnectionTest"); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project httpServer.start(); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized(bound) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!httpServer.started) { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project bound.wait(5000); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HttpURLConnection c = (HttpURLConnection) 174a566c3ecc8c821172e27d89444dd7cadfbdc369bJorg Pleumann new URL("http://localhost:" + httpServer.port()).openConnection(); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.setDoOutput(true); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //use new String("POST") instead of simple "POST" to obtain other 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //object instances then those that are in HttpURLConnection classes 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.setRequestMethod(new String("POST")); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.getOutputStream(); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project httpServer.join(); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test checks if the proxy specified in openConnection 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method will be used for connection to the server 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testUsingProxy() throws Exception { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-570 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockServer server = new MockServer("server"); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockServer proxy = new MockServer("proxy"); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project URL url = new URL("http://localhost:" + server.port()); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HttpURLConnection connection = (HttpURLConnection) url 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .openConnection(new Proxy(Proxy.Type.HTTP, 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress("localhost", 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.port()))); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setConnectTimeout(2000); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setReadTimeout(2000); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project server.start(); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized(bound) { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!server.started) bound.wait(5000); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.start(); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized(bound) { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!proxy.started) bound.wait(5000); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.connect(); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // wait while server and proxy run 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project server.join(); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.join(); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Connection does not use proxy", connection.usingProxy()); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Proxy server was not used", proxy.accepted); 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HttpURLConnection huc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(huc.usingProxy()); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test checks if the proxy provided by proxy selector 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be used for connection to the server 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testUsingProxySelector() throws Exception { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-570 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockServer server = new MockServer("server"); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockServer proxy = new MockServer("proxy"); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project URL url = new URL("http://localhost:" + server.port()); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // keep default proxy selector 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ProxySelector defPS = ProxySelector.getDefault(); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // replace selector 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ProxySelector.setDefault( 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new TestProxySelector(server.port(), proxy.port())); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HttpURLConnection connection = 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (HttpURLConnection) url.openConnection(); 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setConnectTimeout(2000); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setReadTimeout(2000); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project server.start(); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized(bound) { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!server.started) bound.wait(5000); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.start(); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized(bound) { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!proxy.started) bound.wait(5000); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.connect(); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // wait while server and proxy run 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project server.join(); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.join(); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertTrue("Connection does not use proxy", 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.usingProxy()); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Proxy server was not used", proxy.accepted); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // restore default proxy selector 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ProxySelector.setDefault(defPS); 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2691a7e762f344c111416b001a61e41451d01f605adJorg Pleumann @SideEffect("Suffers from side effect of other, currently unknown test") 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testProxyAuthorization() throws Exception { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Set up test Authenticator 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Authenticator.setDefault(new Authenticator() { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected PasswordAuthentication getPasswordAuthentication() { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new PasswordAuthentication( 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "user", "password".toCharArray()); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }); 279f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockProxyServer proxy = new MockProxyServer("ProxyServer"); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project URL url = new URL("http://remotehost:55555/requested.data"); 284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes HttpURLConnection connection = 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (HttpURLConnection) url.openConnection( 286f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes new Proxy(Proxy.Type.HTTP, 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress("localhost", proxy.port()))); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setConnectTimeout(1000); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.setReadTimeout(1000); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.start(); 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connection.connect(); 294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes assertEquals("unexpected response code", 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 200, connection.getResponseCode()); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.join(); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Connection did not send proxy authorization request", 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proxy.acceptedAuthorizedRequest); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // remove previously set authenticator 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Authenticator.setDefault(null); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 306