1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.ConnectException; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Inet4Address; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Inet6Address; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetAddress; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Proxy; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.ServerSocket; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Socket; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketAddress; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketException; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketImpl; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketImplFactory; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketTimeoutException; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.UnknownHostException; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Locale; 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Configuration; 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 435a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughespublic class SocketTest extends junit.framework.TestCase { 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private class ClientThread implements Runnable { 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket socket = new Socket(); 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress addr = new InetSocketAddress(host, port); 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.connect(addr); 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw new RuntimeException(e); 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private class ServerThread implements Runnable { 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final int FIRST_TIME = 1; 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final int SECOND_TIME = 2; 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int backlog = 10; 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean ready = false; 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private int serverSocketConstructor = 0; 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket socket = null; 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes switch (serverSocketConstructor) { 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes case FIRST_TIME: 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new ServerSocket(port, backlog, 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(host, port).getAddress()); 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes port = socket.getLocalPort(); 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes case SECOND_TIME: 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new ServerSocket(port, backlog); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes host = socket.getInetAddress().getHostName(); 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes port = socket.getLocalPort(); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes default: 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new ServerSocket(); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (this) { 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ready = true; 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.notifyAll(); 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setSoTimeout(5000); 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = socket.accept(); 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Throwable e) { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public synchronized void waitCreated() throws Exception { 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!ready) { 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.wait(); 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean interrupted; 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String host = "localhost"; 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int port; 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t; 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void connectTestImpl(int ssConsType) throws Exception { 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerThread server = new ServerThread(); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.serverSocketConstructor = ssConsType; 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread serverThread = new Thread(server); 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverThread.start(); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.waitCreated(); 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ClientThread client = new ClientThread(); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread clientThread = new Thread(client); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes clientThread.start(); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverThread.join(); 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes clientThread.join(); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() { 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (t != null) { 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.interrupt(); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.t = null; 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.interrupted = false; 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#bind(java.net.SocketAddress) 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_bindLjava_net_SocketAddress() throws IOException { 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("serial") 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class UnsupportedSocketAddress extends SocketAddress { 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public UnsupportedSocketAddress() { 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Address we cannot bind to 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = new Socket(); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress bogusAddress = new InetSocketAddress(InetAddress 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getByAddress(Support_Configuration.nonLocalAddressBytes), 42); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(bogusAddress); 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when binding to bad address"); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException ex) { 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now create a socket that is not bound and then bind it 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int portNumber = theSocket.getLocalPort(); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Validate that the localSocketAddress reflects the address we 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // bound to 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Local address not correct after bind", 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), portNumber), 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.getLocalSocketAddress()); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Make sure we can now connect and that connections appear to come 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // from the address we bound to. 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress theAddress = new InetSocketAddress(InetAddress 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), 0); 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(); 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.bind(theAddress); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int sport = server.getLocalPort(); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress boundAddress = new InetSocketAddress(InetAddress 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), sport); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(boundAddress); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals( 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Returned Remote address from server connected to does not match expected local address", 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), portNumber), 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.getRemoteSocketAddress()); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Validate if we pass in null that it picks an address for us and 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // all is ok 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(null); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Bind with null did not work", theSocket 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalSocketAddress()); 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now check the error conditions 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Address that we have already bound to 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theAddress = new InetSocketAddress(InetAddress.getLocalHost(), 0); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(theAddress); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket2 = new Socket(); 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket2.bind(theSocket.getLocalSocketAddress()); 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception binding to address that is not available"); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException ex) { 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket2.close(); 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Unsupported SocketAddress subclass 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(new UnsupportedSocketAddress()); 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when binding using unsupported SocketAddress subclass"); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException ex) { 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#bind(java.net.SocketAddress) 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_bindLjava_net_SocketAddress_Proxy() throws IOException { 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The Proxy will not impact on the bind operation. It can be assigned 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // with any address. 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress( 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "127.0.0.1", 0)); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket socket = new Socket(proxy); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress address = InetAddress.getByName("localhost"); 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.bind(new InetSocketAddress(address, 0)); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(address, socket.getLocalAddress()); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(0 != socket.getLocalPort()); 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_close() throws IOException { 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 2605a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2625a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoLinger(false, 100); 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.getOutputStream(); 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Failed to close socket"); 2685a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes } catch (IOException expected) { 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_connect_unknownhost() throws Exception { 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket socket = new Socket(); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.connect(new InetSocketAddress("unknownhost.invalid", 12345)); 278249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes fail(); 279249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes } catch (UnknownHostException expected) { 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_connect_unresolved() throws IOException { 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket socket = new Socket(); 285249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes InetSocketAddress unresolved = InetSocketAddress.createUnresolved("www.apache.org", 80); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 287249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes socket.connect(unresolved); 288249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes fail(); 289249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes } catch (UnknownHostException expected) { 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 292249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes socket.connect(unresolved, 123); 293249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes fail(); 294249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes } catch (UnknownHostException expected) { 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_connectLjava_net_SocketAddress() throws Exception { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("serial") 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class UnsupportedSocketAddress extends SocketAddress { 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public UnsupportedSocketAddress() { 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = new Socket(); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(null); 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception for null arg"); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new UnsupportedSocketAddress()); 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception for invalid socket address"); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new InetSocketAddress(InetAddress 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getByAddress(new byte[] { 0, 0, 0, 0 }), 42)); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception with non-connectable address"); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ConnectException e) { 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now validate that we get a connect exception if we try to connect to 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // an address on which nobody is listening 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0)); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when connecting to address nobody listening on"); 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ConnectException e) { 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we can actually connect when somebody is listening 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress boundAddress = new InetSocketAddress(InetAddress 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), server.getLocalPort()); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress); 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // validate that when a socket is connected that it answers 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // correctly to related queries 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong connected status", client.isConnected()); 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong closed status", client.isClosed()); 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong bound status", client.isBound()); 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong input shutdown status", client.isInputShutdown()); 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong output shutdown status", client.isOutputShutdown()); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Local port was 0", client.getLocalPort() != 0); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we get the right exception if we connect when we 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // are already connected 361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boundAddress = new InetSocketAddress(InetAddress.getLocalHost(), server 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when we try to connect on a connected socket: "); 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException e) { 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Regression for Harmony-2503 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_connectLjava_net_SocketAddress_AnyAddress() 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws Exception { 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes connectTestImpl(ServerThread.FIRST_TIME); 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes connectTestImpl(ServerThread.SECOND_TIME); 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#connect(java.net.SocketAddress, int) 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_connectLjava_net_SocketAddressI() throws Exception { 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("serial") 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class UnsupportedSocketAddress extends SocketAddress { 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public UnsupportedSocketAddress() { 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Start by validating the error checks 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = new Socket(); 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new InetSocketAddress(0), -100); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception for negative timeout"); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(null, 0); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception for null address"); 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new UnsupportedSocketAddress(), 1000); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception for invalid socket address type"); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SocketAddress nonConnectableAddress = new InetSocketAddress(InetAddress 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getByAddress(new byte[] { 0, 0, 0, 0 }), 0); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(nonConnectableAddress, 1000); 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when non Connectable Address passed in: "); 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException e) { 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we get a connect exception if we try to connect to 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // an address on which nobody is listening 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0), 0); 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when connecting to address nobody listening on"); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ConnectException e) { 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we can actually connect when somebody is listening 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress boundAddress = new InetSocketAddress(InetAddress 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), server.getLocalPort()); 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(); 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress, 0); 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Validate that when a socket is connected that it answers 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // correctly to related queries 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong connected status", client.isConnected()); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong closed status", client.isClosed()); 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Wrong bound status", client.isBound()); 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong input shutdown status", client.isInputShutdown()); 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Wrong output shutdown status", client.isOutputShutdown()); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Local port was 0", client.getLocalPort() != 0); 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we get a connect exception if we try to connect to 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // an address on which nobody is listening 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket(); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SocketAddress nonListeningAddress = new InetSocketAddress(InetAddress 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), 42); 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(nonListeningAddress, 1000); 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when connecting to address nobody listening on"); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (ConnectException e) { 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketTimeoutException e) { 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The other possibility is that the system timed us out. 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Now validate that we get the right exception if we connect when we 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // are already connected 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0); 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boundAddress = new InetSocketAddress(InetAddress.getLocalHost(), server 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress, 10000); 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress, 10000); 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when we try to connect on a connected socket: "); 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException e) { 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket() 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_Constructor() { 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // create the socket and then validate some basic state 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket s = new Socket(); 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("new socket should not be connected", s.isConnected()); 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("new socket should not be bound", s.isBound()); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("new socket should not be closed", s.isClosed()); 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("new socket should not be in InputShutdown", s 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isInputShutdown()); 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("new socket should not be in OutputShutdown", s 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isOutputShutdown()); 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(java.lang.String, int) 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_StringI() throws IOException { 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to create socket", server.getLocalPort(), client 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getPort()); 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression for HARMONY-946 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket ss = new ServerSocket(0); 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket s = new Socket("0.0.0.0", ss.getLocalPort()); 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ss.close(); 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.close(); 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(java.lang.String, int, 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * java.net.InetAddress, int) 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_StringILjava_net_InetAddressI() 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int serverPort = server.getLocalPort(); 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost().getHostName(), 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverPort, InetAddress.getLocalHost(), 0); 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to create socket", client.getPort() == serverPort); 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = null; 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket = new Socket("127.0.0.1", serverPort, InetAddress 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), 0); 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // check here if InetAddress.getLocalHost() is returning the 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // loopback address, if so that is likely the cause of the failure 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse( 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Misconfiguration - local host is the loopback address", 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress.getLocalHost().isLoopbackAddress()); 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throw e; 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(theSocket.isConnected()); 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Socket("127.0.0.1", serverPort, theSocket.getLocalAddress(), 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.getLocalPort()); 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Was able to create two sockets on same port"); 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_StringIZ() throws IOException { 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int serverPort = server.getLocalPort(); 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost().getHostAddress(), 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverPort, true); 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to create socket", serverPort, client.getPort()); 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(InetAddress.getLocalHost().getHostName(), 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverPort, false); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(java.net.InetAddress, int) 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_net_InetAddressI() throws IOException { 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to create socket", server.getLocalPort(), client 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getPort()); 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(java.net.InetAddress, int, 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * java.net.InetAddress, int) 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_net_InetAddressILjava_net_InetAddressI() 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes throws IOException { 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort(), InetAddress.getLocalHost(), 0); 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotSame("Failed to create socket", 0, client.getLocalPort()); 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(java.net.InetAddress, int, boolean) 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_net_InetAddressIZ() throws IOException { 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int serverPort = server.getLocalPort(); 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), serverPort, true); 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Failed to create socket", serverPort, client.getPort()); 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(InetAddress.getLocalHost(), serverPort, false); 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#Socket(Proxy) 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_net_Proxy_Exception() { 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SocketAddress addr1 = InetSocketAddress.createUnresolved("127.0.0.1", 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 80); 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SocketAddress addr2 = new InetSocketAddress("localhost", 80); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Proxy proxy1 = new Proxy(Proxy.Type.HTTP, addr1); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // IllegalArgumentException test 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Socket(proxy1); 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Proxy proxy2 = new Proxy(Proxy.Type.SOCKS, addr1); 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // should not throw any exception 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Socket(proxy2); 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Socket(Proxy.NO_PROXY); 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getChannel() 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getChannel() { 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(new Socket().getChannel()); 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getInetAddress() 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getInetAddress() throws IOException { 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect InetAdrees", client.getInetAddress() 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .equals(InetAddress.getLocalHost())); 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getInputStream() 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getInputStream() throws IOException { 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Simple fetch test 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream is = client.getInputStream(); 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to get stream", is); 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes is.close(); 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean isUnix() { 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String osName = System.getProperty("os.name"); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // only comparing ASCII, so assume english locale 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes osName = (osName == null ? null : osName.toLowerCase(Locale.ENGLISH)); 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (osName != null && osName.startsWith("windows")) { //$NON-NLS-1$ 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return false; 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return true; 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 6985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getKeepAlive() throws Exception { 6995a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes ServerSocket server = new ServerSocket(0); 7005a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort(), null, 0); 7015a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes 7025a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setKeepAlive(true); 7035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("getKeepAlive false when it should be true", client.getKeepAlive()); 7045a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes 7055a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setKeepAlive(false); 7065a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertFalse("getKeepAlive true when it should be False", client.getKeepAlive()); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getLocalAddress() throws IOException { 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 7115a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect InetAddress", client.getLocalAddress() 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .equals(InetAddress.getLocalHost())); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 718249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes assertTrue(client.getLocalAddress().isAnyLocalAddress()); 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getLocalPort() 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getLocalPort() throws IOException { 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotSame("Returned incorrect port", 0, client.getLocalPort()); 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getLocalSocketAddress() throws IOException { 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set up server connect and then validate that we get the right 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // response for the local address 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int clientPort = client.getLocalPort(); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect InetSocketAddress(1):", 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), clientPort), 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.getLocalSocketAddress()); 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now create a socket that is not bound and validate we get the 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // right answer 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull( 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Returned incorrect InetSocketAddress -unbound socket- Expected null", 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.getLocalSocketAddress()); 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now bind the socket and make sure we get the right answer 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes clientPort = client.getLocalPort(); 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect InetSocketAddress(2):", 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), clientPort), 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.getLocalSocketAddress()); 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now validate the behaviour when the any address is returned 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 770249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes assertTrue(((InetSocketAddress) client.getLocalSocketAddress()).getAddress().isAnyLocalAddress()); 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now validate the same for getLocalAddress 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 776249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes assertTrue(client.getLocalAddress().isAnyLocalAddress()); 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 7805a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getOOBInline() throws Exception { 7815a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket = new Socket(); 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 7835a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setOOBInline(true); 7845a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("expected OOBIline to be true", theSocket.getOOBInline()); 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 7865a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setOOBInline(false); 7875a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertFalse("expected OOBIline to be false", theSocket.getOOBInline()); 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 7895a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setOOBInline(false); 7905a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertFalse("expected OOBIline to be false", theSocket.getOOBInline()); 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getOutputStream() 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getOutputStream() throws IOException { 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Simple fetch test 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream os = client.getOutputStream(); 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("Failed to get stream", os); 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes os.close(); 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Simple read/write test over the IO streams 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final ServerSocket sinkServer = new ServerSocket(0); 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Runnable runnable = new Runnable() { 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = sinkServer.accept(); 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sinkServer.close(); 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream in = worker.getInputStream(); 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.read(); 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes in.close(); 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail(); 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread(runnable, "Socket.getOutputStream"); 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket pingClient = new Socket(InetAddress.getLocalHost(), sinkServer 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Busy wait until the client is connected. 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int c = 0; 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!pingClient.isConnected()) { 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(200); 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (++c > 4) { 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("thread is not alive"); 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Write some data to the server 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream out = pingClient.getOutputStream(); 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(new byte[256]); 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Wait for the server to finish 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.yield(); 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes c = 0; 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (thread.isAlive()) { 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(200); 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (++c > 4) { 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("read call did not exit"); 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Subsequent writes should throw an exception 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The output buffer may remain valid until the close completes 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 400; i++) { 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.write(new byte[256]); 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("write to closed socket did not cause exception"); 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes out.close(); 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes pingClient.close(); 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sinkServer.close(); 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-873 875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket ss2 = new ServerSocket(0); 876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket s = new Socket("127.0.0.1", ss2.getLocalPort()); 877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ss2.accept(); 878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.shutdownOutput(); 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.getOutputStream(); 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw SocketException"); 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException e) { 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getPort() throws IOException { 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int serverPort = server.getLocalPort(); 890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), serverPort); 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect port", serverPort, client.getPort()); 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 8985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getReceiveBufferSize() throws Exception { 899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 9005a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 9015a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setReceiveBufferSize(130); 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Incorrect buffer size", client.getReceiveBufferSize() >= 130); 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9055a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 9065a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#getRemoteSocketAddress() 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getRemoteSocketAddress() throws IOException { 913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set up server connect and then validate that we get the right 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // response for the remote address 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int serverPort = server.getLocalPort(); 917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), serverPort); 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect InetSocketAddress(1):", 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), serverPort), 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.getRemoteSocketAddress()); 922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now create one that is not connected and validate that we get the 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // right answer 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = new Socket(); 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("Returned incorrect InetSocketAddress -unconnected socket:", 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.getRemoteSocketAddress()); 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now connect and validate we get the right answer 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverPort)); 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Returned incorrect InetSocketAddress(2):", 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress(InetAddress.getLocalHost(), serverPort), 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.getRemoteSocketAddress()); 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.close(); 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9425a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getReuseAddress() throws Exception { 9435a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket = new Socket(); 9445a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setReuseAddress(true); 9455a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("getReuseAddress false when it should be true", theSocket.getReuseAddress()); 9465a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setReuseAddress(false); 9475a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertFalse("getReuseAddress true when it should be False", theSocket.getReuseAddress()); 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9505a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getSendBufferSize() throws Exception { 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 9525a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 9535a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSendBufferSize(134); 9545a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Incorrect buffer size", client.getSendBufferSize() >= 134); 9555a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 9565a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9595a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getSoLinger() throws Exception { 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 9615a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 9625a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoLinger(true, 200); 9635a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertEquals("Returned incorrect linger", 200, client.getSoLinger()); 9645a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoLinger(false, 0); 9655a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 9665a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9695a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getSoTimeout() throws Exception { 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 9715a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 9725a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoTimeout(100); 9735a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertEquals("Returned incorrect sotimeout", 100, client.getSoTimeout()); 9745a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 9755a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9785a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getTcpNoDelay() throws Exception { 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 9805a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9825a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes boolean bool = !client.getTcpNoDelay(); 9835a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setTcpNoDelay(bool); 9845a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Failed to get no delay setting: " + client.getTcpNoDelay(), client.getTcpNoDelay() == bool); 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9865a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 9875a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 9905a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_getTrafficClass() throws Exception { 9915a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes /* 9925a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * We cannot actually check that the values are set as if a platform 9935a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * does not support the option then it may come back unset even 9945a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * though we set it so just get the value to make sure we can get it 9955a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes */ 9965a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes int trafficClass = new Socket().getTrafficClass(); 9975a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue(0 <= trafficClass); 9985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue(trafficClass <= 255); 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#isBound() 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isBound() throws IOException { 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not bound when it should be (1)", client 1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket indicated bound when it was not (2)", client 1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(); 1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress boundAddress = new InetSocketAddress(server 1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInetAddress(), server.getLocalPort()); 1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress); 1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker = server.accept(); 1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not bound when it should be (2)", client 1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now test when we bind explicitly 1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress theLocalAddress = new InetSocketAddress(InetAddress 1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), 0); 1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket indicated bound when it was not (3)", client 1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.bind(theLocalAddress); 1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not bound when it should be (3a)", client 1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not bound when it should be (3b)", client 1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isBound()); 1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#isClosed() 1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isClosed() throws IOException { 1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // validate isClosed returns expected values 1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket should indicate it is not closed(1):", client 1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isClosed()); 1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket should indicate it is closed(1):", client.isClosed()); 1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // validate that isClosed works ok for sockets returned from 1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ServerSocket.accept() 1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Accepted Socket should indicate it is not closed:", worker 1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isClosed()); 1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Accepted Socket should indicate it is closed:", worker 1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isClosed()); 1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // and finally for the server socket 1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Server Socket should indicate it is not closed:", server 1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isClosed()); 1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Server Socket should indicate it is closed:", server 1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isClosed()); 1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#isConnected() 1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isConnected() throws IOException { 1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not connected when it should be", client 1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isConnected()); 1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // now do it with the new constructors and revalidate 1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress theAddress = new InetSocketAddress(InetAddress 1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalHost(), 0); 1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket indicated connected when it was not", client 1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isConnected()); 1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(); 1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.bind(theAddress); 1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetSocketAddress boundAddress = new InetSocketAddress(server 1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getInetAddress(), server.getLocalPort()); 1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(boundAddress); 1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker = server.accept(); 1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Socket indicated not connected when it should be", client 1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isConnected()); 1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#isInputShutdown() 1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isInputShutdown() throws IOException { 1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream theInput = client.getInputStream(); 1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream theOutput = worker.getOutputStream(); 1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer with newly connected socket 1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket indicated input shutdown when it should not have", 1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.isInputShutdown()); 1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // shutdown the output 1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.shutdownInput(); 1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer once it is shut down 1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue( 1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Socket indicated input was NOT shutdown when it should have been", 1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.isInputShutdown()); 1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer for closed sockets 1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse( 1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Socket indicated input was shutdown when socket was closed", 1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.isInputShutdown()); 1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theInput.close(); 1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.close(); 1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#isOutputShutdown() 1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isOutputShutdown() throws IOException { 1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server 1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream theInput = client.getInputStream(); 1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream theOutput = worker.getOutputStream(); 1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer with newly connected socket 1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket indicated output shutdown when it should not have", 1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.isOutputShutdown()); 1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // shutdown the output 1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.shutdownOutput(); 1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer once it is shut down 1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue( 1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Socket indicated output was NOT shutdown when it should have been", 1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.isOutputShutdown()); 1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // make sure we get the right answer for closed sockets 1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse( 1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Socket indicated output was output shutdown when the socket was closed", 1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.isOutputShutdown()); 1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theInput.close(); 1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.close(); 1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#sendUrgentData(int) 1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_sendUrgentDataI() throws Exception { 1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Some platforms may not support urgent data in this case we will not 1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * run these tests. For now run on all platforms until we find those 1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * that do not support urgent data 1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String platform = System.getProperty("os.name"); 1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (platform.equals("Dummy")) { 1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test 1: Validate that when OOBInline is false that any urgent data is 1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * silently ignored 1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress localHost = InetAddress.getLocalHost(); 1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0, 5, localHost); 1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SocketAddress serverAddress = new InetSocketAddress(localHost, server 1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getLocalPort()); 1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(); 1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(false); 1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(serverAddress); 1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.setTcpNoDelay(true); 1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream theOutput = worker.getOutputStream(); 1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the regular data 1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] sendBytes = new String("Test").getBytes(); 1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.flush(); 1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the urgent data byte which should not be received 1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.sendUrgentData("UrgentData".getBytes()[0]); 1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.shutdownOutput(); 1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Try to read the bytes back 1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int totalBytesRead = 0; 1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] myBytes = new byte[100]; 1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream theInput = client.getInputStream(); 1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (true) { 1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int bytesRead = theInput.read(myBytes, totalBytesRead, 1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myBytes.length - totalBytesRead); 1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (bytesRead == -1) { 1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes totalBytesRead = totalBytesRead + bytesRead; 1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] expectBytes = new byte[2 * sendBytes.length]; 1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length); 1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length, 1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sendBytes.length); 1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] resultBytes = new byte[totalBytesRead]; 1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead); 1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Urgent data was received", Arrays.equals(expectBytes, 1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resultBytes)); 1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test 2: Now validate that urgent data is received as expected. Expect 1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * that it should be between the two writes. 1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0, 5, localHost); 1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverAddress = new InetSocketAddress(localHost, server.getLocalPort()); 1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(serverAddress); 1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker = server.accept(); 1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.setTcpNoDelay(true); 1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput = worker.getOutputStream(); 1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the regular data 1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sendBytes = new String("Test - Urgent Data").getBytes(); 1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the urgent data (one byte) which should be received 1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte urgentByte = "UrgentData".getBytes()[0]; 1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.sendUrgentData(urgentByte); 1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send more data, the urgent byte must stay in position 1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.shutdownOutput(); 1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Try to read the bytes back 1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes totalBytesRead = 0; 1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myBytes = new byte[100]; 1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theInput = client.getInputStream(); 1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (true) { 1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int bytesRead = theInput.read(myBytes, totalBytesRead, 1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myBytes.length - totalBytesRead); 1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (bytesRead == -1) { 1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes totalBytesRead = totalBytesRead + bytesRead; 1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expectBytes = new byte[2 * sendBytes.length + 1]; 1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length); 1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expectBytes[sendBytes.length] = urgentByte; 1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length + 1, 1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sendBytes.length); 1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resultBytes = new byte[totalBytesRead]; 1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead); 1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Urgent data was not received with one urgent byte", Arrays 1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .equals(expectBytes, resultBytes)); 1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test 3: Now validate that urgent data is received as expected. Expect 1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * that it should be between the two writes. 1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0, 5, localHost); 1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverAddress = new InetSocketAddress(localHost, server.getLocalPort()); 1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(serverAddress); 1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker = server.accept(); 1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.setTcpNoDelay(true); 1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput = worker.getOutputStream(); 1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the regular data 1328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sendBytes = new String("Test - Urgent Data").getBytes(); 1329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the urgent data (one byte) which should be received 1332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte urgentByte1 = "UrgentData".getBytes()[0]; 1334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte urgentByte2 = "UrgentData".getBytes()[1]; 1335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.sendUrgentData(urgentByte1); 1336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.sendUrgentData(urgentByte2); 1337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send more data, the urgent byte must stay in position 1339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendBytes); 1340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.shutdownOutput(); 1341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Try to read the bytes back 1344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes totalBytesRead = 0; 1345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myBytes = new byte[100]; 1346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theInput = client.getInputStream(); 1347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (true) { 1348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int bytesRead = theInput.read(myBytes, totalBytesRead, 1349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes myBytes.length - totalBytesRead); 1350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (bytesRead == -1) { 1351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 1352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes totalBytesRead = totalBytesRead + bytesRead; 1354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expectBytes = new byte[2 * sendBytes.length + 2]; 1360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, 0, sendBytes.length); 1361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expectBytes[sendBytes.length] = urgentByte1; 1362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes expectBytes[sendBytes.length + 1] = urgentByte2; 1363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(sendBytes, 0, expectBytes, sendBytes.length + 2, 1364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sendBytes.length); 1365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes resultBytes = new byte[totalBytesRead]; 1367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(myBytes, 0, resultBytes, 0, totalBytesRead); 1368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Urgent data was not received with two urgent bytes", Arrays 1370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .equals(expectBytes, resultBytes)); 1371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 1373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test 4: Now test the case where there is only urgent data. 1374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0, 5, localHost); 1376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes serverAddress = new InetSocketAddress(localHost, server.getLocalPort()); 1377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client = new Socket(); 1379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.connect(serverAddress); 1382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker = server.accept(); 1383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.setTcpNoDelay(true); 1384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Send the urgent data (one byte) which should be received 1386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.setOOBInline(true); 1387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes urgentByte = "UrgentData".getBytes()[0]; 1388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.sendUrgentData(urgentByte); 1389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.close(); 1390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Try to read the bytes back 1392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theInput = client.getInputStream(); 1393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int byteRead = theInput.read(); 1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Sole urgent data was not received", 1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes (int) (urgentByte & 0xff), byteRead); 1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#setKeepAlive(boolean) 1404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setKeepAliveZ() throws IOException { 1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class TestSocket extends Socket { 1408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public TestSocket(SocketImpl impl) throws SocketException { 1409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(impl); 1410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // There is not really a good test for this as it is there to detect 1414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // crashed machines. Just make sure we can set it 1415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 14165a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 1417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14185a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setKeepAlive(true); 14195a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setKeepAlive(false); 14205a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 14215a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-1136 1424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new TestSocket((SocketImpl) null).setKeepAlive(true); 1425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14275a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setOOBInlineZ() throws Exception { 14285a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket = new Socket(); 14295a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setOOBInline(true); 14305a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("expected OOBIline to be true", theSocket.getOOBInline()); 1431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setPerformancePreference_Int_Int_Int() throws IOException { 1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket theSocket = new Socket(); 1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theSocket.setPerformancePreferences(1, 1, 1); 1436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14385a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setReceiveBufferSizeI() throws Exception { 1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 14405a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14425a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setReceiveBufferSize(130); 14435a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Incorrect buffer size", client.getReceiveBufferSize() >= 130); 1444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14455a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 14465a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14495a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setReuseAddressZ() throws Exception { 14505a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket = new Socket(); 14515a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setReuseAddress(false); 14525a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes // Bind to any available port on the given address 14535a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 14545a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes InetSocketAddress localAddress1 = new InetSocketAddress(theSocket.getLocalAddress(), theSocket.getLocalPort()); 1455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14565a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket2 = new Socket(); 14575a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket2.setReuseAddress(false); 14585a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes 14595a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes /* 14605a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * Try to invoke a bind while the port is busy (TIME_WAIT). Note 14615a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * that we may not succeed, which will cause the test to pass 14625a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes * without testing the reuseaddr behavior. 14635a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes */ 14645a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.close(); 14655a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket2.bind(localAddress1); 14665a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes 14675a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket2.close(); 1468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14705a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setSendBufferSizeI() throws Exception { 1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 14725a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 14735a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSendBufferSize(134); 14745a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Incorrect buffer size", client.getSendBufferSize() >= 134); 14755a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 14765a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setSocketImplFactoryLjava_net_SocketImplFactory() { 1480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Cannot test as setting will cause the factory to be changed for 1481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // all subsequent sockets 1482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setSoLingerZI() throws IOException { 1485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 14865a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 14875a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoLinger(true, 500); 14885a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertEquals("Set incorrect linger", 500, client.getSoLinger()); 14895a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoLinger(false, 0); 14905a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 14915a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 14945a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setSoTimeoutI() throws Exception { 1495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 14965a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 14975a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setSoTimeout(100); 14985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertEquals("Set incorrect sotimeout", 100, client.getSoTimeout()); 14995a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 15005a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setTcpNoDelayZ() throws Exception { 1504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 15055a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server .getLocalPort()); 1506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15075a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes boolean bool; 15085a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.setTcpNoDelay(bool = !client.getTcpNoDelay()); 15095a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes assertTrue("Failed to set no delay setting: " + client.getTcpNoDelay(), client.getTcpNoDelay() == bool); 1510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15115a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes client.close(); 15125a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes server.close(); 1513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15155a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes public void test_setTrafficClassI() throws Exception { 15165a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes int IPTOS_LOWCOST = 0x2; 15175a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes int IPTOS_RELIABILTY = 0x4; 15185a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes int IPTOS_THROUGHPUT = 0x8; 15195a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes int IPTOS_LOWDELAY = 0x10; 1520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15215a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes Socket theSocket = new Socket(); 1522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15235a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes // validate that value set must be between 0 and 255 15245a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes try { 15255a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(256); 15265a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes fail("No exception was thrown when traffic class set to 256"); 15275a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes } catch (IllegalArgumentException expected) { 15285a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes } 1529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 15305a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes try { 15315a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(-1); 15325a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes fail("No exception was thrown when traffic class set to -1"); 15335a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes } catch (IllegalArgumentException expected) { 1534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 15355a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes 15365a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes // now validate that we can set it to some good values 15375a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(IPTOS_LOWCOST); 15385a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(IPTOS_RELIABILTY); 15395a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(IPTOS_THROUGHPUT); 15405a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes theSocket.setTrafficClass(IPTOS_LOWDELAY); 1541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 1544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_shutdownInput() throws IOException { 1545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int port = server.getLocalPort(); 1547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), port); 1548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.setTcpNoDelay(true); 1551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream theInput = client.getInputStream(); 1553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream theOutput = worker.getOutputStream(); 1554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // shutdown the input 1556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.shutdownInput(); 1557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // send the regular data 1559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String sendString = new String("Test"); 1560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendString.getBytes()); 1561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.flush(); 1562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // RI fails here. It is a RI bug not to return 0 to indicate EOF 1564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(0, theInput.available()); 1565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-2944 1570fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes // Port 0 is not allowed to be used in connect() on some platforms, 1571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Since server has been closed here, so the port is free now 1572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket s = new Socket("0.0.0.0", port, false); 1573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.shutdownInput(); 1574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.shutdownInput(); 1576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw SocketException"); 1577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException se) { 1578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 1579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.close(); 1581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.net.Socket#shutdownOutput() 1585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 1587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_shutdownOutput() throws IOException { 1588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int port = server.getLocalPort(); 1590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), port); 1591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket worker = server.accept(); 1593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes OutputStream theOutput = worker.getOutputStream(); 1594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // shutdown the output 1596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes worker.shutdownOutput(); 1597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // send the regular data 1599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String sendString = new String("Test"); 1600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.write(sendString.getBytes()); 1602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes theOutput.flush(); 1603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("No exception when writing on socket with output shutdown"); 1604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 1605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 1606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Regression test for HARMONY-2944 1612fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes // Port 0 is not allowed to be used in connect() on some platforms, 1613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Since server has been closed here, so the port is free now 1614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Socket s = new Socket("0.0.0.0", port, false); 1615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.shutdownOutput(); 1616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.shutdownOutput(); 1618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw SocketException"); 1619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SocketException se) { 1620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 1621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.close(); 1623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_toString() throws IOException { 1626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ServerSocket server = new ServerSocket(0); 1627249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 1628249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes // RI has "addr" and "localport" instead of "address" and "localPort". 1629249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes String expected = "Socket[address=" + InetAddress.getLocalHost() 1630249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes + ",port=" + client.getPort() + ",localPort=" 1631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + client.getLocalPort() + "]"; 1632249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes assertEquals(expected, client.toString()); 1633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes client.close(); 1634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1637