1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonpackage libcore.java.net; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 23a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughesimport java.net.BindException; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.ConnectException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Inet4Address; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Inet6Address; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.InetAddress; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.InetSocketAddress; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Proxy; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.ServerSocket; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.Socket; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketAddress; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketException; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketImpl; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.SocketTimeoutException; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.UnknownHostException; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.channels.IllegalBlockingModeException; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.channels.SocketChannel; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission; 40ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughesimport tests.net.StuckServer; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_Configuration; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 431f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonpublic class OldSocketTest extends OldSocketTestCase { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ServerSocket ss; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket s; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread t; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) {} 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkConnect(String host, int port) { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Constructor() { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // create the socket and then validate some basic state 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("new socket should not be connected", s.isConnected()); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("new socket should not be bound", s.isBound()); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("new socket should not be closed", s.isClosed()); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("new socket should not be in InputShutdown", s 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isInputShutdown()); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("new socket should not be in OutputShutdown", s 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isOutputShutdown()); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_lang_StringI() throws IOException { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.Socket(java.lang.String, int) 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons String,I"); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to create socket", s.getPort() == sport); 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //regression for HARMONY-946 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ServerSocket ss = null; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket s = null; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ss = new ServerSocket(0); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket("0.0.0.0", ss.getLocalPort()); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ss.close(); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ignore 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //ignore 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 99a7d651e95e38974fa0de19247e8341df98a0b1b1Elliott Hughes new Socket("unknown.host.google.com", 0); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("UnknownHostException was not thrown."); 101a7d651e95e38974fa0de19247e8341df98a0b1b1Elliott Hughes } catch (UnknownHostException expected) { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = null; 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket = new Socket(InetAddress.getByName(null), sport); 106a72ee9c1b176d02ad5b87ec92c9aa470f7ce75c5Lorenzo Colitti InetAddress address = socket.getLocalAddress(); 107a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes assertTrue(address.isLoopbackAddress()); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.close(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) {} 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes public void test_ConstructorLjava_lang_StringILjava_net_InetAddressI1() throws IOException { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons String,I,InetAddress,I"); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, 1182b096f630d94f957b981ef511c70c856893dc47eElliott Hughes InetAddress.getLocalHost(), 0); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to create socket", s.getPort() == sport); 120a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes public void test_ConstructorLjava_lang_StringILjava_net_InetAddressI2() throws IOException { 12340122b34be21ad22816427c807d88a2d8fcd8b22Jason Parks int sport = startServer("Cons String,I,InetAddress,I"); 12440122b34be21ad22816427c807d88a2d8fcd8b22Jason Parks Socket s1 = new Socket(InetAddress.getLocalHost(), sport, null, 0); 1257e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes try { 12640122b34be21ad22816427c807d88a2d8fcd8b22Jason Parks Socket s2 = new Socket(InetAddress.getLocalHost(), sport, null, s1.getLocalPort()); 127a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes try { 1287e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes s2.close(); 129a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } catch (IOException ignored) { 130a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } 131a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes fail("second connect should have failed with EADDRINUSE"); 132a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } catch (BindException expected) { 133a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes // success! 134a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } finally { 135a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes try { 136a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes s1.close(); 137a29cfae03ee194774639c8ee7d2d69747caeacfbElliott Hughes } catch (IOException ignored) { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_lang_StringIZ() throws IOException { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.Socket(java.lang.String, int, boolean) 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons String,I,Z"); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, true); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to create socket", s.getPort() == sport); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, false); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_net_InetAddressI() throws IOException { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.Socket(java.net.InetAddress, int) 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons InetAddress,I"); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost(), sport); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to create socket", s.getPort() == sport); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_net_InetAddressILjava_net_InetAddressI() 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.Socket(java.net.InetAddress, int, 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.net.InetAddress, int) 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons InetAddress,I,InetAddress,I"); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, 1642b096f630d94f957b981ef511c70c856893dc47eElliott Hughes InetAddress.getLocalHost(), 0); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_net_InetAddressIZ() throws IOException { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.Socket(java.net.InetAddress, int, boolean) 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons InetAddress,I,Z"); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost(), sport, true); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to create socket", s.getPort() == sport); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost(), sport, false); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_close() throws IOException { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.net.Socket.close() 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer close"); 1792b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSoLinger(false, 100); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_LINGER); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getOutputStream(); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown."); 189f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } catch (java.io.IOException e) { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInetAddress() throws IOException { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.InetAddress java.net.Socket.getInetAddress() 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getInetAddress"); 1972b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 1981f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertTrue("Returned incorrect InetAddress", s.getInetAddress().equals( 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress.getLocalHost())); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInputStream() throws IOException { 20470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // Simple fetch test 20570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes ServerSocket server = new ServerSocket(0); 20670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort()); 20770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes InputStream is = client.getInputStream(); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Failed to get stream", is); 20970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes is.close(); 21070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes client.close(); 21170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes server.close(); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getKeepAlive() { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getKeepAlive"); 2172b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(InetAddress.getLocalHost(), sport, null, 0); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(true); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("getKeepAlive false when it should be true", theSocket 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getKeepAlive()); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(false); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("getKeepAlive true when it should be False", theSocket 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getKeepAlive()); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(false); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown after calling setKeepAlive " + 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "method."); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getKeepAlive(); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown after calling getKeepAlive +" + 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "method."); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_KEEPALIVE); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_KEEPALIVE); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getLocalAddress() throws IOException { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.net.InetAddress 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.net.Socket.getLocalAddress() 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getLocAddress"); 2492b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Returned incorrect InetAddress", 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress.getLocalHost(), s.getLocalAddress()); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2537e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes // now check behavior when the ANY address is returned 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2577e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes assertTrue("ANY address not IPv6: " + s.getLocalSocketAddress(), 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getLocalAddress() instanceof Inet6Address); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getLocalPort() throws IOException { 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method int java.net.Socket.getLocalPort() 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getLocalPort"); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, 2662b096f630d94f957b981ef511c70c856893dc47eElliott Hughes InetAddress.getLocalHost(), 0); 2672b096f630d94f957b981ef511c70c856893dc47eElliott Hughes // There's nothing we can usefully assert about the kernel-assigned port. 2682b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s.getLocalPort(); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("deprecation") 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOutputStream() throws IOException { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.io.OutputStream 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.net.Socket.getOutputStream() 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getOutputStream"); 2762b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project java.io.OutputStream os = s.getOutputStream(); 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Failed to get stream", os); 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project os.write(1); 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression test for harmony-2934 2822b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket("127.0.0.1", sport, false); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream o = s.getOutputStream(); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o.write(1); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o.close(); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression test for harmony-2942 2932b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket("0.0.0.0", sport, false); 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o = s.getOutputStream(); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o.write(1); 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o.close(); 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getPort() throws IOException { 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method int java.net.Socket.getPort() 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getPort"); 3072b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 3082b096f630d94f957b981ef511c70c856893dc47eElliott Hughes assertTrue("Returned incorrect port" + s.getPort(), s.getPort() == sport); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSoLinger() { 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method int java.net.Socket.getSoLinger() 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getSoLinger"); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3152b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSoLinger(true, 200); 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Returned incorrect linger", 200, s.getSoLinger()); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_LINGER); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSoLinger(false, 0); 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_LINGER); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3252b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getSoLinger(); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown: " + e.toString()); 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getReceiveBufferSize() { 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getReceiveBufferSize"); 3412b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost().getHostName(), sport, null, 0); 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setReceiveBufferSize(130); 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect buffer size", s.getReceiveBufferSize() >= 130); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_RCVBUF); 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_RCVBUF); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 348f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket newSocket = new Socket(); 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newSocket.close(); 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newSocket.getReceiveBufferSize(); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException e) { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception."); 360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getSendBufferSize() { 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setSendBufferSize"); 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3662b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost().getHostName(), sport, null, 0); 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSendBufferSize(134); 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect buffer size", s.getSendBufferSize() >= 134); 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_SNDBUF); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_SNDBUF); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3742b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getSendBufferSize(); 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown."); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown: " + e.toString()); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38704e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes public void test_getSoTimeout_setSoTimeout() throws Exception { 38804e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes // TODO: a useful test would check that setSoTimeout actually causes timeouts! 38904e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes Socket s = new Socket(); 39004e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.setSoTimeout(1500); 39104e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes int ms = s.getSoTimeout(); 3926566167989735858978d062a4385104ce5eca7e3Neil Fuller assertTrue("suspicious timeout: " + ms, Math.abs(ms - 1500) <= 10); 39304e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.close(); 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 39504e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.getSoTimeout(); 39604e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes fail("SocketException was not thrown."); 39704e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (SocketException expected) { 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 40004e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.setSoTimeout(1000); 40104e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes fail("SocketException was not thrown."); 40204e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (SocketException expected) { 403f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTcpNoDelay() { 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method boolean java.net.Socket.getTcpNoDelay() 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getTcpNoDelay"); 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 4102b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean bool = !s.getTcpNoDelay(); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setTcpNoDelay(bool); 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to get no delay setting: " + s.getTcpNoDelay(), 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getTcpNoDelay() == bool); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(TCP_NODELAY); 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, TCP_NODELAY); 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 419f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 4212b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getTcpNoDelay(); 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception was thrown: " + e.toString()); 431f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setKeepAliveZ() throws Exception { 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // There is not really a good test for this as it is there to detect 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // crashed machines. Just make sure we can set it 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setKeepAlive"); 4392b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(InetAddress.getLocalHost(), sport, null, 0); 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(true); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(false); 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_KEEPALIVE); 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_KEEPALIVE); 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // regression test for HARMONY-1136 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new TestSocket((SocketImpl) null).setKeepAlive(true); 448f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setKeepAlive(true); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class TestSocket extends Socket { 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TestSocket(SocketImpl impl) throws SocketException { 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(impl); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 462f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setSocketImplFactoryLjava_net_SocketImplFactory() { 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.net.Socket.setSocketImplFactory(java.net.SocketImplFactory) 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Cannot test as setting will cause the factory to be changed for 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // all subsequent sockets 470f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecurityManager sm = new SecurityManager() { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission perm) { 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 475f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkSetFactory() { 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException(); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setSendBufferSizeI() { 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setSendBufferSizeI"); 4852b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSendBufferSize(134); 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect buffer size", s.getSendBufferSize() >= 134); 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_SNDBUF); 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_SNDBUF); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setSendBufferSize(1); 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 502f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setReceiveBufferSizeI() { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setReceiveBufferSizeI"); 5082b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setReceiveBufferSize(130); 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect buffer size", s.getReceiveBufferSize() >= 130); 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_RCVBUF); 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_RCVBUF); 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 515f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReceiveBufferSize(1); 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 525f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setSoLingerZI() { 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.net.Socket.setSoLinger(boolean, int) 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setSoLingerZI"); 5322b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSoLinger(true, 500); 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Set incorrect linger", 500, s.getSoLinger()); 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_LINGER); 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setSoLinger(false, 0); 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_LINGER); 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setSoLinger(true, 1); 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 550f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setTcpNoDelayZ() { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.net.Socket.setTcpNoDelay(boolean) 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer setTcpNoDelayZ"); 5572b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean bool; 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.setTcpNoDelay(bool = !s.getTcpNoDelay()); 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to set no delay setting: " + s.getTcpNoDelay(), 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getTcpNoDelay() == bool); 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(TCP_NODELAY); 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, TCP_NODELAY); 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 566f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTcpNoDelay(true); 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 576f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_toString() throws IOException { 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.lang.String java.net.Socket.toString() 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer toString"); 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(InetAddress.getLocalHost().getHostName(), sport, 5832b096f630d94f957b981ef511c70c856893dc47eElliott Hughes InetAddress.getLocalHost(), 0); 584c08b5f81dbe5aba03208538570c5434a9dd0eb36Jesse Wilson assertEquals("Socket[address=" + InetAddress.getLocalHost() + ",port=" + s.getPort() 585c08b5f81dbe5aba03208538570c5434a9dd0eb36Jesse Wilson + ",localPort=" + s.getLocalPort() + "]", s.toString()); 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5881f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // AndroidOnly: RI returns wrong value for EOF 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_shutdownInput() throws Exception { 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress addr = InetAddress.getLocalHost(); 5912b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5, addr); 5922b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(addr, serverSocket.getLocalPort()); 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // shutdown the input 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.shutdownInput(); 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sendString = new String("Test"); 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // give things some time to settle 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // RI fails here. It is a RI bug not to return 0 to indicate EOF 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, theInput.available()); 611f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 614f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = new Socket(); 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.close(); 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.shutdownInput(); 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown."); 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_shutdownOutput() throws IOException { 6262b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 6272b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(serverSocket.getInetAddress(), serverSocket.getLocalPort()); 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // shutdown the output 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.shutdownOutput(); 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sendString = new String("Test"); 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when writing on socket with output shutdown"); 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 647f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.shutdownInput(); 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown."); 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getLocalSocketAddress() throws IOException { 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // set up server connect and then validate that we get the right 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // response for the local address 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getLocSocketAddress"); 6602b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 6612b096f630d94f957b981ef511c70c856893dc47eElliott Hughes assertEquals(new InetSocketAddress(InetAddress.getLocalHost(), s.getLocalPort()), 6622b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s.getLocalSocketAddress()); 663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now create a socket that is not bound and validate we get the 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // right answer 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull( 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Returned incorrect InetSocketAddress -unbound socket- Expected null", 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getLocalSocketAddress()); 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now bind the socket and make sure we get the right answer 6732b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 6742b096f630d94f957b981ef511c70c856893dc47eElliott Hughes assertEquals(new InetSocketAddress(InetAddress.getLocalHost(), theSocket.getLocalPort()), 6752b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.getLocalSocketAddress()); 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6782b096f630d94f957b981ef511c70c856893dc47eElliott Hughes // now validate that behavior when the any address is returned 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(); 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6827e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes assertTrue("ANY address not IPv6: " + s.getLocalSocketAddress(), 6837e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes ((InetSocketAddress) s.getLocalSocketAddress()).getAddress() instanceof Inet6Address); 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate the same for getLocalAddress 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s = new Socket(); 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0)); 6897e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes assertTrue("ANY address not IPv6: " + s.getLocalSocketAddress(), 6907e6cee7a973ebf3cdc32638580d777d9b45088aeElliott Hughes ((InetSocketAddress) s.getLocalSocketAddress()).getAddress() instanceof Inet6Address); 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getRemoteSocketAddress() throws IOException { 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // set up server connect and then validate that we get the right 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // response for the remote address 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("SServer getLocRemoteAddress"); 6982b096f630d94f957b981ef511c70c856893dc47eElliott Hughes s = new Socket(InetAddress.getLocalHost(), sport, null, 0); 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned incorrect InetSocketAddress(1):" 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + s.getLocalSocketAddress().toString(), 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getRemoteSocketAddress() 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals( 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress(InetAddress 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalHost(), sport))); 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now create one that is not connect and validate that we get the 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // right answer 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 7102b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 0)); 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Returned incorrect InetSocketAddress -unconnected socket:" 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "Expected: NULL", theSocket.getRemoteSocketAddress()); 714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now connect and validate we get the right answer 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sport)); 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Returned incorrect InetSocketAddress(2):" 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + theSocket.getRemoteSocketAddress().toString(), 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getRemoteSocketAddress() 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals( 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress(InetAddress 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalHost(), sport))); 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isBound() throws IOException { 7292b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 7302b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(serverSocket.getInetAddress(), serverSocket.getLocalPort()); 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not bound when it should be (1)", 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isBound()); 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now do it with the new constructors and revalidate. Connect causes 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the socket to be bound 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket indicated bound when it was not (2)", theSocket 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isBound()); 7422b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 7432b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not bound when it should be (2)", 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isBound()); 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7501f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // now test when we bind explicitly 751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket indicated bound when it was not (3)", theSocket 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isBound()); 7542b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.bind(null); 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not bound when it should be (3a)", 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isBound()); 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not bound when it should be (3b)", 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isBound()); 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isConnected() throws IOException { 7632b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 7642b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(serverSocket.getInetAddress(), serverSocket.getLocalPort()); 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not connected when it should be", 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isConnected()); 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now do it with the new constructors and revalidate 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket indicated connected when it was not", theSocket 774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isConnected()); 7752b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 7762b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket indicated not connected when it should be", 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isConnected()); 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isClosed() throws IOException { 7852b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 7862b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = new Socket(serverSocket.getInetAddress(), serverSocket.getLocalPort()); 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate isClosed returns expected values 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket should indicate it is not closed(1):", theSocket 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket should indicate it is closed(1):", theSocket 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7962b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket = new Socket(serverSocket.getInetAddress(), serverSocket.getLocalPort()); 797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket should indicate it is not closed(2):", theSocket 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket should indicate it is closed(2):", theSocket 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that isClosed works ok for sockets returned from 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ServerSocket.accept() 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Server Socket should indicate it is not closed:", servSock 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.close(); 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Server Socket should indicate it is closed:", servSock 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isClosed()); 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_bindLjava_net_SocketAddress() throws IOException { 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class mySocketAddress extends SocketAddress { 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySocketAddress() { 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Address we cannot bind to 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(new InetSocketAddress(InetAddress 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getByAddress(Support_Configuration.nonLocalAddressBytes), 8252b096f630d94f957b981ef511c70c856893dc47eElliott Hughes 80)); 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when binding to bad address:" 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + theSocket.getLocalSocketAddress().toString()); 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ex) { 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now create a socket that is not bound and then bind it 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8352b096f630d94f957b981ef511c70c856893dc47eElliott Hughes 0)); 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that the localSocketAddress reflects the address we 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // bound to 8392b096f630d94f957b981ef511c70c856893dc47eElliott Hughes assertEquals(new InetSocketAddress(InetAddress.getLocalHost(), theSocket.getLocalPort()), 8402b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.getLocalSocketAddress()); 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we can now connect and that connections appear to come 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // from the address we bound to. 8442b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 8452b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 8472b096f630d94f957b981ef511c70c856893dc47eElliott Hughes assertEquals(new InetSocketAddress(InetAddress.getLocalHost(), theSocket.getLocalPort()), 8482b096f630d94f957b981ef511c70c856893dc47eElliott Hughes servSock.getRemoteSocketAddress()); 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.close(); 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate if we pass in null that it picks an address for us and 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // all is ok 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(null); 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Bind with null did not work", theSocket 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalSocketAddress()); 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now check the error conditions 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8631f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // Address that we have already bound to 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket2 = new Socket(); 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 8672b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.bind(null); 8682b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.bind(theSocket.getLocalSocketAddress()); 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception binding to address that is not available"); 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ex) { 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket2.close(); 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // unsupported SocketAddress subclass 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(new mySocketAddress()); 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when binding using unsupported SocketAddress subclass"); 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException ex) { 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_bindLjava_net_SocketAddress_Proxy() throws IOException { 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //The Proxy will not impact on the bind operation.It can be assigned with any address. 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 0)); 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = new Socket(proxy); 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress address = InetAddress.getByName("localhost"); 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 0; 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.bind(new InetSocketAddress(address, port)); 894f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(address, socket.getLocalAddress()); 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(port!=socket.getLocalPort()); 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.close(); 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_connectLjava_net_SocketAddress() throws Exception { 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // needed for some tests 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class mySocketAddress extends SocketAddress { 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySocketAddress() { 908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class SocketCloser extends Thread { 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int timeout = 0; 914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = null; 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(timeout); 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ; 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public SocketCloser(int timeout, Socket theSocket) { 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.timeout = timeout; 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.theSocket = theSocket; 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // start by validating the error checks 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 935ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes byte[] theBytes = { 0, 0, 0, 0 }; 936ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes SocketAddress theAddress = new InetSocketAddress(InetAddress.getLocalHost(), 0); 937ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes SocketAddress nonConnectableAddress = new InetSocketAddress(InetAddress.getByAddress(theBytes), 0); 938ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes SocketAddress nonReachableAddress = new InetSocketAddress(StuckServer.UNREACHABLE_ADDRESS, 0); 939ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes SocketAddress invalidType = new mySocketAddress(); 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 941ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes Socket theSocket = null; 942ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes ServerSocket serverSocket = null; 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(null); 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception after null address passed in"); 947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong exception null address passed in: " 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof IllegalArgumentException)); 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(invalidType); 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when invalid socket address type passed in: "); 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when when invalid socket address type passed in: " 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof IllegalArgumentException)); 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(nonConnectableAddress); 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when non Connectable Address passed in: "); 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when non Connectable Address passed in: " 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof ConnectException)); 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get a connect exception if we try to connect to 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // an address on which nobody is listening 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(theAddress); 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when connecting to address nobody listening on: "); 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting to address nobody listening on: " 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof ConnectException)); 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 9861f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // now validate that we can actually connect when somebody is listening 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 9882b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 9892b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that when a socket is connected that it answers 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // correctly to related queries 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket did not returned connected when it is: ", theSocket 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isConnected()); 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket returned closed when it should be connected ", 996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isClosed()); 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket returned not bound when it should be: ", theSocket 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isBound()); 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket returned input Shutdown when it should be connected ", 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isInputShutdown()); 1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket returned output Shutdown when it should be connected ", 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isOutputShutdown()); 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Local port on connected socket was 0", theSocket 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalPort() != 0); 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get the right exception if we connect when we 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // are already connected 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 10142b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 10152b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 10162b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when we try to connect on a connected socket: "); 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting on socket that is allready connected" 1024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof SocketException)); 1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting on socket that is allready connected" 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof SocketTimeoutException)); 1029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e2) { 1033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that connected socket can be used to read/write 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 10392b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 10402b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput2 = servSock.getInputStream(); 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput2 = theSocket.getOutputStream(); 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sendString = new String("Test"); 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int totalBytesRead = 0; 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] myBytes = new byte[100]; 1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String receivedString = new String(myBytes, 0, totalBytesRead); 1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Could not recv on socket connected with timeout:" 1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString, receivedString 1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(sendString)); 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("SEND - Test"); 1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput2.write(sendString.getBytes()); 1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput2.flush(); 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput2.available() > 0) { 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput2.read(myBytes, totalBytesRead, 1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Could not send on socket connected with timeout:" 1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString, receivedString 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(sendString)); 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1086f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketChannel channel = SocketChannel.open(); 1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project channel.configureBlocking(false); 1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = channel.socket(); 1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 10912b096f630d94f957b981ef511c70c856893dc47eElliott Hughes socket.connect(serverSocket.getLocalSocketAddress()); 1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalBlockingModeException was not thrown."); 109304e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (IllegalBlockingModeException expected) { 1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109504e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes socket.close(); 1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_connectLjava_net_SocketAddressI() throws Exception { 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // needed for some tests 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class mySocketAddress extends SocketAddress { 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySocketAddress() { 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class SocketCloser extends Thread { 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int timeout = 0; 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = null; 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(timeout); 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public SocketCloser(int timeout, Socket theSocket) { 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.timeout = timeout; 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.theSocket = theSocket; 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class SocketConnector extends Thread { 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int timeout = 0; 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = null; 1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress address = null; 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(address, timeout); 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public SocketConnector(int timeout, Socket theSocket, 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress address) { 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.timeout = timeout; 1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.theSocket = theSocket; 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.address = address; 1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // start by validating the error checks 1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] theBytes = { 0, 0, 0, 0 }; 11552b096f630d94f957b981ef511c70c856893dc47eElliott Hughes SocketAddress theAddress = new InetSocketAddress(InetAddress.getLocalHost(), 0); 11562b096f630d94f957b981ef511c70c856893dc47eElliott Hughes SocketAddress nonConnectableAddress = new InetSocketAddress(InetAddress.getByAddress(theBytes), 0); 1157ca9037fc1f060c071d6711bbe31c9f9de63a0b89Elliott Hughes SocketAddress nonReachableAddress = new InetSocketAddress(StuckServer.UNREACHABLE_ADDRESS, 0); 11582b096f630d94f957b981ef511c70c856893dc47eElliott Hughes SocketAddress invalidType = new mySocketAddress(); 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 11602b096f630d94f957b981ef511c70c856893dc47eElliott Hughes Socket theSocket = null; 11612b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = null; 1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(theAddress, -100); 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception after negative timeout passed in"); 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong exception when negative timeout passed in: " 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof IllegalArgumentException)); 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(null, 0); 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception after null address passed in"); 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong exception null address passed in: " 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof IllegalArgumentException)); 1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(invalidType, 100000); 1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when invalid socket address type passed in: "); 1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when when invalid socket address type passed in: " 1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof IllegalArgumentException)); 1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(nonConnectableAddress, 100000); 1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when non Connectable Address passed in: "); 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when non Connectable Address passed in: " 1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof SocketException)); 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get a connect exception if we try to connect to 1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // an address on which nobody is listening 1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(theAddress, 0); 1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No timeout:No exception when connecting to address nobody listening on: "); 1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "No timeout:Wrong exception when connecting to address nobody listening on: " 1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof ConnectException)); 1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 12151f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // now validate that we can actually connect when somebody is listening 1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 12172b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 12182b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get a connect exception if we try to connect to 1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // an address on which nobody is listening 1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 12262b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 80), 100000); 1227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when connecting to address nobody listening on: "); 1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting to address nobody listening on: " 1232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof ConnectException)); 1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get a interrupted exception if we try to connect 1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // to an address on which nobody is accepting connections and the 1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // timeout expired 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(nonReachableAddress, 200); 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No interrupted exception when connecting to address nobody listening on with short timeout 200: "); 1243d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana } catch (ConnectException ce) { 1244d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana // some networks will quickly reset the TCP connection attempt to this fake IP 1245d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana assertTrue( 1246d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana "Wrong exception when connecting to address nobody listening on with short timeout 200: " 1247d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana + ce.toString(), 1248d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana (ce.getMessage() != null && ce.getMessage().contains("ECONNREFUSED"))); 1249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting to address nobody listening on with short timeout 200: " 1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof SocketTimeoutException)); 1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get a interrupted exception if we try to connect 1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // to an address on which nobody is accepting connections and the 1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // timeout expired 1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(nonReachableAddress, 40); 1262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No interrupted exception when connecting to address nobody listening on with short timeout 40: "); 1264d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana } catch (ConnectException ce) { 1265d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana // some networks will quickly reset the TCP connection attempt to this fake IP 1266d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana assertTrue( 1267d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana "Wrong exception when connecting to address nobody listening on with short timeout 40: " 1268d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana + ce.toString(), 1269d3ba3eb7a3fa67c1de2cb7a5ba999dcf91c13a91Tiberiu Breana (ce.getMessage() != null && ce.getMessage().contains("ECONNREFUSED"))); 1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Wrong exception when connecting to address nobody listening on with short timeout 40: " 1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof SocketTimeoutException)); 1275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 12771f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // now validate that we can actually connect when somebody is listening 1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 12792b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 12802b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that when a socket is connected that it answers 1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // correctly to related queries 1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket did not returned connected when it is: ", theSocket 1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isConnected()); 1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket returned closed when it should be connected ", 1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isClosed()); 1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Socket returned not bound when it should be: ", theSocket 1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .isBound()); 1290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket returned input Shutdown when it should be connected ", 1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isInputShutdown()); 1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket returned output Shutdown when it should be connected ", 1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isOutputShutdown()); 1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Local port on connected socket was 0", theSocket 1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalPort() != 0); 1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we get the right exception if we connect when we 1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // are already connected 1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket = new ServerSocket(); 1306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.bind(theAddress); 1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(theAddress, 100000); 1308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.connect(theAddress, 100000); 1309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when we try to connect on a connected socket: "); 1312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 13151f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson "Wrong exception when connecting on socket that is already connected" 1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), (e instanceof SocketException)); 1317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 13181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson "Wrong exception when connecting on socket that is already connected" 1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString(), 1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (e instanceof SocketTimeoutException)); 1321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e2) { 1325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that connected socket can be used to read/write 1330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 13312b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 13322b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 1334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 1336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput2 = servSock.getInputStream(); 1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput2 = theSocket.getOutputStream(); 1338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sendString = new String("Test"); 1340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int totalBytesRead = 0; 1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] myBytes = new byte[100]; 1347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String receivedString = new String(myBytes, 0, totalBytesRead); 1354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Could not recv on socket connected with timeout:" 1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString, receivedString 1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(sendString)); 1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("SEND - Test"); 1359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput2.write(sendString.getBytes()); 1360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput2.flush(); 1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput2.available() > 0) { 1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput2.read(myBytes, totalBytesRead, 1367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Could not send on socket connected with timeout:" 1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString, receivedString 1374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(sendString)); 1375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now try to set options while we are connecting 1380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 138104e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes SocketConnector connector = new SocketConnector(5000, theSocket, nonReachableAddress); 1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project connector.start(); 138304e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes theSocket.setSoTimeout(1000); 1384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(10); 13856566167989735858978d062a4385104ce5eca7e3Neil Fuller assertTrue("Socket option not set during connect: 10 ", Math.abs(1000 - theSocket.getSoTimeout()) <= 10); 1386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(50); 138704e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes theSocket.setSoTimeout(2000); 13886566167989735858978d062a4385104ce5eca7e3Neil Fuller assertTrue("Socket option not set during connect: 50 ", Math.abs(2000 - theSocket.getSoTimeout()) <= 10); 1389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(5000); 1390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1391f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketChannel channel = SocketChannel.open(); 1393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project channel.configureBlocking(false); 1394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = channel.socket(); 1395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 13962b096f630d94f957b981ef511c70c856893dc47eElliott Hughes socket.connect(serverSocket.getLocalSocketAddress()); 1397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalBlockingModeException was not thrown."); 139804e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (IllegalBlockingModeException expected) { 1399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140004e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes channel.close(); 1401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isInputShutdown() throws IOException { 1404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 14052b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 14062b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 1408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 1409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 1410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer with newly connected socket 1412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket indicated input shutdown when it should not have", 1413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isInputShutdown()); 1414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // shutdown the output 1416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.shutdownInput(); 1417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer once it is shut down 1419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket indicated input was NOT shutdown when it should have been", 1421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isInputShutdown()); 1422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer for closed sockets 1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket indicated input was shutdown when socket was closed", 1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.isInputShutdown()); 1430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_isOutputShutdown() throws IOException { 1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 14352b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 14362b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 1438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer with newly connected socket 1442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Socket indicated output shutdown when it should not have", 1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.isOutputShutdown()); 1444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // shutdown the output 1446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.shutdownOutput(); 1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer once it is shut down 1449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket indicated output was NOT shutdown when it should have been", 1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.isOutputShutdown()); 1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make sure we get the right answer for closed sockets 1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse( 1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Socket indicated output was output shutdown when the socket was closed", 1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.isOutputShutdown()); 1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14632b096f630d94f957b981ef511c70c856893dc47eElliott Hughes public void test_setReuseAddressZ() throws Exception { 1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress allAddresses[] = InetAddress.getAllByName(InetAddress 1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getLocalHost().getHostName()); 1468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (allAddresses.length > 1) { 1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14702b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 1471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // try to bind to port address that is already in use with 1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // reuseAddress = false. 1474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // On windows platforms the bind is allowed even then 1475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // reUseAddress is false (ONLY IF BOTH SOCKETS 1476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // ARE IPV4 Sockets) so our test uses the platform to determine 1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // what the expected result is. It seems that on linux 1478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // platforms we also don't get an exception. 1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress theLocalAddress = new InetSocketAddress( 14802b096f630d94f957b981ef511c70c856893dc47eElliott Hughes (InetAddress) allAddresses[1], 0); 1481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetSocketAddress theOtherLocalAddress = new InetSocketAddress( 14822b096f630d94f957b981ef511c70c856893dc47eElliott Hughes (InetAddress) allAddresses[0], theLocalAddress.getPort()); 1483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReuseAddress(false); 1485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(theLocalAddress); 1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket2 = null; 1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String platform = System.getProperty("os.name"); 14882b096f630d94f957b981ef511c70c856893dc47eElliott Hughes 1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket2 = new Socket(); 1490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket2.setReuseAddress(false); 1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket2.bind(theOtherLocalAddress); 1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((!platform.startsWith("Linux")) 1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && ((!platform.startsWith("Windows")) || 1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // for windows we don't get an exception with 1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // setreuse set to false unless one of the 1497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // addresses we bind to is an IPv6 address and we 1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // are therefore using the IPv6 stack. 1499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project !((((InetAddress) allAddresses[0]) instanceof Inet4Address) && (((InetAddress) allAddresses[1]) instanceof Inet4Address)))) { 1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception when setReuseAddress is false and we bind:" 1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + theLocalAddress.toString() 1502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ":" 1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + theOtherLocalAddress.toString()); 1504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket2.close(); 1507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 15081f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // try to bind to port that is already in use with reuseAddress 1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // = true 15102b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theLocalAddress = new InetSocketAddress((InetAddress) allAddresses[0], 0); 1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReuseAddress(true); 1514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(theLocalAddress); 15152b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2 = new Socket(); 15162b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.setReuseAddress(true); 15172b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theOtherLocalAddress = new InetSocketAddress((InetAddress) allAddresses[1], theSocket.getLocalPort()); 15182b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.bind(theOtherLocalAddress); 15192b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.close(); 1520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // try with default behavior which should be the same on all 1524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // platforms 15252b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theLocalAddress = new InetSocketAddress((InetAddress) allAddresses[0], 0); 1526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 1528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.bind(theLocalAddress); 15292b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2 = new Socket(); 15302b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theOtherLocalAddress = new InetSocketAddress((InetAddress) allAddresses[1], theSocket.getLocalPort()); 15312b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.bind(theOtherLocalAddress); 15322b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket2.close(); 1533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_REUSEADDR); 1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_REUSEADDR); 1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReuseAddress(true); 1546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 1547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 1550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 1551f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 1552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getReuseAddress() { 1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReuseAddress(true); 1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("getReuseAddress false when it should be true", 1559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getReuseAddress()); 1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setReuseAddress(false); 1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("getReuseAddress true when it should be False", 1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getReuseAddress()); 1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_REUSEADDR); 1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_REUSEADDR); 1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1567f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket newSocket = new Socket(); 1570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newSocket.close(); 1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newSocket.getReuseAddress(); 1573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException e) { 1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception."); 1579f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 1580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setOOBInlineZ() { 1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // mostly tested in getOOBInline. Just set to make sure call works ok 1584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("expected OOBIline to be true", theSocket.getOOBInline()); 1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_OOBINLINE); 1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_OOBINLINE); 1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1592f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOOBInline() { 1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that value reflects what we set it to true after true, 1611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // false after false and false after false false 1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("expected OOBIline to be true", theSocket.getOOBInline()); 1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(false); 1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("expected OOBIline to be true", theSocket 1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getOOBInline()); 1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(false); 1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("expected OOBIline to be true", theSocket 1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getOOBInline()); 1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.getOOBInline(); 1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException se) { 1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_OOBINLINE); 1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, SO_OOBINLINE); 1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setTrafficClassI() { 1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int IPTOS_LOWCOST = 0x2; 1637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int IPTOS_THROUGHPUT = 0x8; 1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that value set must be between 0 and 255 1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTrafficClass(256); 1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception was thrown when traffic class set to 256"); 1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTrafficClass(-1); 1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("No exception was thrown when traffic class set to -1"); 1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that we can set it to some good values 1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTrafficClass(IPTOS_LOWCOST); 1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTrafficClass(IPTOS_THROUGHPUT); 1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(IP_TOS); 1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, IP_TOS); 1660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1661f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setTrafficClass(0); 1666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was not thrown."); 1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(SocketException ioe) { 1668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 1670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 1671f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 1672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1673f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getTrafficClass() { 1675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * we cannot actually check that the values are set as if a platform 1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * does not support the option then it may come back unset even 1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * though we set it so just get the value to make sure we can get it 1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int trafficClass = theSocket.getTrafficClass(); 1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ensureExceptionThrownIfOptionIsUnsupportedOnOS(IP_TOS); 1685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project handleException(e, IP_TOS); 1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getChannel() throws Exception { 1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(new Socket().getChannel()); 1692f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketChannel channel = SocketChannel.open(); 1694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = channel.socket(); 1695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(channel, socket.getChannel()); 1696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.close(); 1697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project channel.close(); 1698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_sendUrgentDataI() { 1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Some platforms may not support urgent data in this case we will not 1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // run these tests. For now run on all platforms until we find those 1704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // that do not support urgent data 1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String platform = System.getProperty("os.name"); 1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!platform.equals("Dummy")) { 1707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // validate that when OOBInline is false that any urgent data 1708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // is silently ignored 1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String urgentData = "U"; 1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 17122b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ServerSocket serverSocket = new ServerSocket(0, 5); 17132b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1714adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket servSock = serverSocket.accept(); 1715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream theInput = theSocket.getInputStream(); 1716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream theOutput = servSock.getOutputStream(); 1717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String sendString = new String("Test"); 1720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should not be received 1724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(false); 1725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // give things some time to settle 1730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int totalBytesRead = 0; 1733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] myBytes = new byte[100]; 1734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1737adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String receivedString = new String(myBytes, 0, totalBytesRead); 1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //assertTrue("Urgent Data seems to have been received:" 1742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + receivedString + ":" + sendString, receivedString 1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // .equals(sendString + sendString)); 1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now validate that urgent data is received as expected. Expect 1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // that it should be between the two writes. 1750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 17512b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 17522b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 1754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theInput = theSocket.getInputStream(); 1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput = servSock.getOutputStream(); 1756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("Test - Urgent Data"); 1759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should be received 1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Urgent Data was not received with one urgent byte:" 1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString + urgentData 1782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + sendString, receivedString.equals(sendString 1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + urgentData + sendString)); 1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now test case where we try to send two urgent bytes. 1789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 17902b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 17912b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theInput = theSocket.getInputStream(); 1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput = servSock.getOutputStream(); 1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("Test - Urgent Data"); 1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should not be received 1802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Did not get right byte of urgent data when two sent:" 1822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString 1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + urgentData + urgentData + sendString, 1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString.equals(sendString + urgentData 1825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + urgentData + sendString)); 1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TODO : These do not currently pass on XP SP2 and Server 2003 1832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!platform.startsWith("Windows")) { 1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now test the case were we send turn the OOBInline on/off 1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 18362b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 18372b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theInput = theSocket.getInputStream(); 1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput = servSock.getOutputStream(); 1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("Test - Urgent Data"); 1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should be received 1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue( 1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Did not get urgent data when turning on/off(1):" 1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + sendString 1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + urgentData + sendString, receivedString 1869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(sendString + urgentData 1870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + sendString)); 1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("Test - Urgent Data"); 1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should not be received 1878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(false); 1879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send trailing data 1882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //assertTrue( 1897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // "Got unexpected data data when turning on/off(2):" 1898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + receivedString + ":" + sendString 1899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + sendString, receivedString 1900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // .equals(sendString + sendString)); 1901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now turn back on and get data. Here we also 1903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // get the previously sent byte of urgent data as it is 1904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // still in the urgent buffer 1905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the regular data 1907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sendString = new String("Test - Urgent Data"); 1908adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should be received again 1912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1914adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.write(sendString.getBytes()); 1916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput.flush(); 1917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // depending on the platform we may get the previously sent 1930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // urgent data or not (examples windows-yes, Linux-no). 1931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // So accept either so long as we get the urgent data from 1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // when it was on. 1933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //assertTrue( 1934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // "Did not get urgent data when turning on/off(3) GOT:" 1935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + receivedString + ":Expected" + urgentData 1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + sendString + urgentData + sendString 1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + ":OR:" + sendString + urgentData 1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + sendString, 1939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // (receivedString.equals(urgentData + sendString 1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + urgentData + sendString) || receivedString 1941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // .equals(sendString + urgentData 1942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + sendString))); 1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project serverSocket.close(); 1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // now test the case where there is only urgent data 1949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket = new Socket(); 19502b096f630d94f957b981ef511c70c856893dc47eElliott Hughes serverSocket = new ServerSocket(0, 5); 19512b096f630d94f957b981ef511c70c856893dc47eElliott Hughes theSocket.connect(serverSocket.getLocalSocketAddress()); 1952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock = serverSocket.accept(); 1953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theInput = theSocket.getInputStream(); 1954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theOutput = servSock.getOutputStream(); 1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send the urgent data which should not be received. 1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setOOBInline(true); 1958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project servSock.sendUrgentData(urgentData.getBytes()[0]); 1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(1000); 1961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = 0; 1963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes = new byte[100]; 1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (theInput.available() > 0) { 1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int bytesRead = theInput.read(myBytes, totalBytesRead, 1966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myBytes.length - totalBytesRead); 1967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project totalBytesRead = totalBytesRead + bytesRead; 1968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project receivedString = new String(myBytes, 0, totalBytesRead); 1971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Did not get urgent data only urgent data sent:" 1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + receivedString + ":" + urgentData, receivedString 1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(urgentData)); 1974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 1976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // for platforms that do not support urgent data we expect an 1977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exception. For the others report an error. 1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO : Need to introduce a better test for the exception 1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // so that the failure only occurs on platforms that support 1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // urgent data 1981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Platform:" + platform 1982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ": Got exception during sendUrgent data tests" 1983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + e.toString()); 1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1986f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 1987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.close(); 1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.sendUrgentData(0); 1991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was not thrown."); 1992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IOException ioe) { 1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 1994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_setPerformancePreference_Int_Int_Int() throws Exception { 1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket theSocket = new Socket(); 1999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project theSocket.setPerformancePreferences(1, 1, 1); 2000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLjava_net_Proxy_Exception() { 2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress addr1 = InetSocketAddress.createUnresolved("127.0.0.1", 2005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80); 2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketAddress addr2 = new InetSocketAddress("localhost", 80); 2007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Proxy proxy1 = new Proxy(Proxy.Type.HTTP, addr1); 2009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // IllegalArgumentException test 2010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Socket(proxy1); 2012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("should throw IllegalArgumentException"); 2013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 2014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Proxy proxy2 = new Proxy(Proxy.Type.SOCKS, addr1); 2018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // should not throw any exception 2019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Socket(proxy2); 2020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Socket(Proxy.NO_PROXY); 2021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new Socket((Proxy) null); 2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException was not thrown."); 2025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalArgumentException iae) { 2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 2027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2029f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2030adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_ConstructorLSocketImpl() { 2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project MockSocketImpl msi = new MockSocketImpl(); 2032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new TestSocket(msi); 2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SocketException e) { 2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("SocketException was thrown."); 2036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2038f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_connect_unknownhost() throws Exception { 2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = new Socket(); 2041747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson InetSocketAddress socketAddress = new InetSocketAddress("unknownhost", 12345); 2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2043747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson socket.connect(socketAddress); 2044747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson fail("Should throw IOException"); 2045747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson } catch (IOException e) { 2046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_connect_unresolved_unknown() throws Exception { 2051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = new Socket(); 2052747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson InetSocketAddress unresolved = InetSocketAddress.createUnresolved("unknownhost", 12345); 2053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2054747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson socket.connect(unresolved); 2055747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson fail("Should throw IOException"); 2056747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson } catch (IOException e) { 2057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_connect_unresolved() throws Exception { 2062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = new Socket(); 2063747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson InetSocketAddress unresolvedSocketAddress = InetSocketAddress.createUnresolved( 2064747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson Support_Configuration.SocksServerTestHost, 2065747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson Support_Configuration.SocksServerTestPort); 2066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2067747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson socket.connect(unresolvedSocketAddress); 2068747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson fail("Should throw IOException"); 2069747f40360f7e98bb9c88f9c945b68c04cd36a8d0Jesse Wilson } catch (IOException e) { 2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2073f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOutputStream_shutdownOutput() throws Exception { 2075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // regression test for Harmony-873 2076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ServerSocket ss = new ServerSocket(0); 2077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket s = new Socket("127.0.0.1", ss.getLocalPort()); 2078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ss.accept(); 2079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.shutdownOutput(); 2080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.getOutputStream(); 2082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("should throw SocketException"); 2083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 2084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 2087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2088f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SocketChannel channel = SocketChannel.open( 2090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new InetSocketAddress(ss.getInetAddress(), ss.getLocalPort())); 2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project channel.configureBlocking(false); 2092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ss.accept(); 2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket socket = channel.socket(); 2094f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream out = null; 2096f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out = socket.getOutputStream(); 2099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.write(1); 2100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalBlockingModeException was not thrown."); 2101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalBlockingModeException ibme) { 2102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 2103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 2104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(out != null) out.close(); 2105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project socket.close(); 2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project channel.close(); 2107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_shutdownInputOutput_twice() throws Exception { 2111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // regression test for Harmony-2944 2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Socket s = new Socket("0.0.0.0", 0, false); 2113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.shutdownInput(); 2114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.shutdownInput(); 2117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("should throw SocketException"); 2118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SocketException se) { 2119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.shutdownOutput(); 2122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.shutdownOutput(); 2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("should throw SocketException"); 2126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SocketException se) { 2127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets up the fixture, for example, open a network connection. This method 2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is called before a test is executed. 2134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws Exception 2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 2138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 2139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tears down the fixture, for example, close a network connection. This 2143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method is called after a test is executed. 2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() { 2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (s != null) 2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project s.close(); 2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 2150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (ss != null) 2153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ss.close(); 2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (t != null) 2158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project t.interrupt(); 2159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 2160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class MockSecurityManager extends SecurityManager { 2164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkConnect(String host, int port) { 2166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("127.0.0.1".equals(host)) { 2167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new SecurityException("permission is not allowed"); 2168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkPermission(Permission permission) { 2172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 2173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int startServer(String name) { 2178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 21792b096f630d94f957b981ef511c70c856893dc47eElliott Hughes ss = new ServerSocket(0, 5); 2180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 2181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(name + ": " + e); 2182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ss.getLocalPort(); 2184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class MockSocketImpl extends SocketImpl { 2187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public MockSocketImpl() { 2189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 2190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2191f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 2192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void accept(SocketImpl arg0) throws IOException { 2194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int available() throws IOException { 2198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 2199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void bind(InetAddress arg0, int arg1) throws IOException { 2203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void close() throws IOException { 2207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void connect(String arg0, int arg1) throws IOException { 2211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void connect(InetAddress arg0, int arg1) throws IOException { 2215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void connect(SocketAddress arg0, int arg1) throws IOException { 2219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void create(boolean arg0) throws IOException { 2223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected InputStream getInputStream() throws IOException { 2227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 2228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected OutputStream getOutputStream() throws IOException { 2232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 2233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void listen(int arg0) throws IOException { 2237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 2240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void sendUrgentData(int arg0) throws IOException { 2241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getOption(int arg0) throws SocketException { 2244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 2245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setOption(int arg0, Object arg1) throws SocketException { 2248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 2251