11f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson/* 21f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 31f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 41f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * this work for additional information regarding copyright ownership. 51f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 61f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * (the "License"); you may not use this file except in compliance with 71f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * the License. You may obtain a copy of the License at 81f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * 91f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 101f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * 111f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * Unless required by applicable law or agreed to in writing, software 121f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 131f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * See the License for the specific language governing permissions and 151f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * limitations under the License. 161f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson */ 171f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonpackage libcore.java.net; 191f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 201f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.io.IOException; 211f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.io.InputStream; 221f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.io.OutputStream; 231f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.InetAddress; 241f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.InetSocketAddress; 251f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.ServerSocket; 261f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.Socket; 271f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.SocketAddress; 281f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.SocketException; 291f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.SocketImpl; 301f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.SocketImplFactory; 311f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.net.SocketTimeoutException; 321f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.nio.channels.IllegalBlockingModeException; 331f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.nio.channels.ServerSocketChannel; 341f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.security.Permission; 351f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonimport java.util.Properties; 361f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 371f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilsonpublic class OldServerSocketTest extends OldSocketTestCase { 381f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 391f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson boolean isCreateCalled = false; 401f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket s; 411f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Socket sconn; 421f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Thread t; 431f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 441f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_setPerformancePreference_Int_Int_Int() throws Exception { 451f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson performancePreferenceTest(1, 0, 0); 461f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson performancePreferenceTest(1, 1, 1); 471f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson performancePreferenceTest(0, 1, 2); 481f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson performancePreferenceTest(Integer.MAX_VALUE, Integer.MAX_VALUE, 491f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Integer.MAX_VALUE); 501f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 511f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 521f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson void performancePreferenceTest(int connectionTime, int latency, 531f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson int bandwidth) throws Exception { 541f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket theSocket = new ServerSocket(); 551f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson theSocket.setPerformancePreferences(connectionTime, latency, bandwidth); 561f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 571f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson InetSocketAddress theAddress = new InetSocketAddress(InetAddress 581f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson .getLocalHost(), 0); 591f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson theSocket.bind(theAddress); 601f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson int portNumber = theSocket.getLocalPort(); 611f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertTrue( 621f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson "Returned incorrect InetSocketAddress(2):" 631f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson + theSocket.getLocalSocketAddress().toString() 641f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson + "Expected: " 651f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson + (new InetSocketAddress(InetAddress.getLocalHost(), 661f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson portNumber)).toString(), theSocket 671f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson .getLocalSocketAddress().equals( 681f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson new InetSocketAddress(InetAddress 691f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson .getLocalHost(), portNumber))); 701f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertTrue("Server socket not bound when it should be:", theSocket 711f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson .isBound()); 721f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 731f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // now make sure that it is actually bound and listening on the 741f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // address we provided 751f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Socket clientSocket = new Socket(); 761f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson InetSocketAddress clAddress = new InetSocketAddress(InetAddress 771f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson .getLocalHost(), portNumber); 781f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson clientSocket.connect(clAddress); 791f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Socket servSock = theSocket.accept(); 801f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 811f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertEquals(clAddress, clientSocket.getRemoteSocketAddress()); 821f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson theSocket.close(); 831f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson servSock.close(); 841f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson clientSocket.close(); 851f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 861f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 871f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_ConstructorII() throws IOException { 88903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes s = new ServerSocket(0, 1); 891f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.setSoTimeout(2000); 90903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes startClient(s.getLocalPort()); 911f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn = s.accept(); 921f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn.close(); 931f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.close(); 941f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 951f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 961f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson static class SSClient implements Runnable { 971f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Socket cs; 981f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 991f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson int port; 1001f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1011f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public SSClient(int prt) { 1021f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson port = prt; 1031f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1041f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1051f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void run() { 1061f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 1071f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // Go to sleep so the server can setup and wait for connection 1081f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Thread.sleep(1000); 1091f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson cs = new Socket(InetAddress.getLocalHost().getHostName(), port); 1101f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // Sleep again to allow server side processing. Thread is 1111f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // stopped by server. 1121f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Thread.sleep(10000); 1131f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (InterruptedException e) { 1141f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return; 1151f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (Throwable e) { 1161f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson System.out.println("Error establishing client: " + e.toString()); 1171f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } finally { 1181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 1191f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson if (cs != null) 1201f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson cs.close(); 1211f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (Exception e) { 1221f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1231f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1241f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1251f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1261f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1271f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_Constructor() throws IOException { 1281f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss = new ServerSocket(); 1291f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertEquals(-1, ss.getLocalPort()); 1301f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss.close(); 1311f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1321f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1331f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_ConstructorI() throws Exception { 134903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes s = new ServerSocket(0); 1351f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 136903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes new ServerSocket(s.getLocalPort()); 1371f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("IOException was not thrown."); 1381f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(IOException ioe) { 1391f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson //expected 1401f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1411f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 1421f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson startClient(s.getLocalPort()); 1431f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn = s.accept(); 1441f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertNotNull("Was unable to accept connection", sconn); 1451f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn.close(); 1461f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } finally { 1471f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.close(); 1481f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1491f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1501f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s = new ServerSocket(0); 1511f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 1521f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson startClient(s.getLocalPort()); 1531f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn = s.accept(); 1541f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertNotNull("Was unable to accept connection", sconn); 1551f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn.close(); 1561f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } finally { 1571f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.close(); 1581f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1591f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1601f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1611f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_ConstructorIILjava_net_InetAddress() throws IOException { 162903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes ServerSocket ss = new ServerSocket(0, 10, InetAddress.getLocalHost()); 1631f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 164903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes new ServerSocket(ss.getLocalPort(), 10, InetAddress.getLocalHost()); 1651f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("IOException was not thrown."); 1661f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(IOException expected) { 1671f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1681f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss.close(); 1691f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1701f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 1711f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson new ServerSocket(65536, 10, InetAddress.getLocalHost()); 1721f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("IllegalArgumentException was not thrown."); 1731f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(IllegalArgumentException expected) { 1741f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1751f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1761f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1771f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_LocalPort() throws IOException { 1781f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss1 = new ServerSocket(4242); 1791f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertEquals(ss1.getLocalPort(), 4242); 1801f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss1.close(); 1811f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1821f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss2 = new ServerSocket(); 1831f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss2.bind(new InetSocketAddress("127.0.0.1", 4343)); 1841f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertEquals(ss2.getLocalPort(), 4343); 1851f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss2.close(); 1861f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1871f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss3 = new ServerSocket(0); 1881f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertTrue(ss3.getLocalPort() != 0); 1891f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss3.close(); 1901f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1911f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1921f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson class MockSocketFactory implements SocketImplFactory { 1931f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public SocketImpl createSocketImpl() { 1941f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return new MockSocketImpl(); 1951f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1961f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 1971f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 1981f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_ConstructorI_SocksSet() throws IOException { 1991f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson // Harmony-623 regression test 2001f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss = null; 2011f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Properties props = (Properties) System.getProperties().clone(); 2021f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2031f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson System.setProperty("socksProxyHost", "127.0.0.1"); 2041f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson System.setProperty("socksProxyPort", "12345"); 2051f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss = new ServerSocket(0); 2061f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } finally { 2071f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson System.setProperties(props); 2081f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson if (null != ss) { 2091f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss.close(); 2101f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2111f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2121f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2131f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2141f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_accept() throws IOException { 215903b3f5b6a6e524cb4d88b83ea32e7c355392271Elliott Hughes ServerSocket newSocket = new ServerSocket(0); 2161f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.setSoTimeout(500); 2171f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Socket accepted = newSocket.accept(); 2191f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketTimeoutException was not thrown: " + accepted); 2201f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(SocketTimeoutException expected) { 2211f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2221f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.close(); 2231f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2241f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocketChannel ssc = ServerSocketChannel.open(); 2251f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket ss = ssc.socket(); 2261f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2271f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2281f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss.accept(); 2291f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("IllegalBlockingModeException was not thrown."); 2301f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(IllegalBlockingModeException ibme) { 2311f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson //expected 2321f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } finally { 2331f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ss.close(); 2341f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ssc.close(); 2351f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2361f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2371f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 23804e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes public void test_getSoTimeout_setSoTimeout() throws Exception { 23904e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes // TODO: a useful test would check that setSoTimeout actually causes timeouts! 24004e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes ServerSocket s = new ServerSocket(); 24104e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.setSoTimeout(1500); 24204e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes int ms = s.getSoTimeout(); 24304e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes if (ms < 1500-10 || ms > 1500+10) { 24404e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes fail("suspicious timeout: " + ms); 24504e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } 24604e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.close(); 2471f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 24804e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.getSoTimeout(); 2491f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 25004e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (SocketException expected) { 2511f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2521f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 25304e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes s.setSoTimeout(1000); 2541f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 25504e25f30524dc7b51f280912d6ca97d991ae84b0Elliott Hughes } catch (SocketException expected) { 2561f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2571f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2581f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2591f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_toString() throws Exception { 2601f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s = new ServerSocket(0); 2611f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson int portNumber = s.getLocalPort(); 2621f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson assertTrue(s.toString().contains("" + portNumber)); 2631f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.close(); 2641f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2651f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2661f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_setReuseAddressZ() throws IOException { 2671f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket newSocket = new ServerSocket(); 2681f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.close(); 2691f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2701f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.setReuseAddress(true); 2711f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 2721f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(SocketException expected) { 2731f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2741f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2751f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2761f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_getReuseAddress() throws IOException { 2771f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket newSocket = new ServerSocket(); 2781f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.close(); 2791f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2801f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.getReuseAddress(); 2811f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 2821f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(SocketException e) { 2831f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson //expected 2841f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2851f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2861f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2871f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_setReceiveBufferSizeI() throws IOException { 2881f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket newSocket = new ServerSocket(); 2891f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.close(); 2901f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 2911f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.setReceiveBufferSize(10); 2921f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 2931f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch(SocketException se) { 2941f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson //expected 2951f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2961f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 2971f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 2981f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void test_getReceiveBufferSize() throws IOException { 2991f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson ServerSocket newSocket = new ServerSocket(); 3001f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.close(); 3011f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 3021f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson newSocket.getReceiveBufferSize(); 3031f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson fail("SocketException was not thrown."); 3041f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (SocketException e) { 3051f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson //expected 3061f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3071f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3081f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3091f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void tearDown() { 3101f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 3111f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson if (s != null) 3121f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson s.close(); 3131f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson if (sconn != null) 3141f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson sconn.close(); 3151f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson if (t != null) 3161f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson t.interrupt(); 3171f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (Exception e) { 3181f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3191f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3201f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3211f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson /** 3221f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * Sets up the fixture, for example, open a network connection. This method 3231f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson * is called before a test is executed. 3241f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson */ 3251f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void startClient(int port) { 3261f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson t = new Thread(new SSClient(port), "SSClient"); 3271f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson t.start(); 3281f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson try { 3291f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson Thread.sleep(1000); 3301f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } catch (InterruptedException e) { 3311f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson System.out.println("Exception during startClinet()" + e.toString()); 3321f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3331f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3341f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3351f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson class MockSocketImpl extends SocketImpl { 3361f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public MockSocketImpl() { 3371f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson isCreateCalled = true; 3381f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3391f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3401f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void create(boolean arg0) throws IOException { 3411f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3421f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3431f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void connect(String arg0, int arg1) throws IOException { 3441f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3451f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3461f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void connect(InetAddress arg0, int arg1) throws IOException { 3471f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3481f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3491f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void connect(SocketAddress arg0, int arg1) throws IOException { 3501f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3511f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3521f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void bind(InetAddress arg0, int arg1) throws IOException { 3531f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3541f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3551f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void listen(int arg0) throws IOException { 3561f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3571f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3581f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void accept(SocketImpl arg0) throws IOException { 3591f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3601f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3611f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected InputStream getInputStream() throws IOException { 3621f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return null; 3631f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3641f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3651f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected OutputStream getOutputStream() throws IOException { 3661f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return null; 3671f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3681f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3691f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected int available() throws IOException { 3701f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return 0; 3711f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3721f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3731f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void close() throws IOException { 3741f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3751f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3761f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson protected void sendUrgentData(int arg0) throws IOException { 3771f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3781f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3791f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public void setOption(int arg0, Object arg1) throws SocketException { 3801f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3811f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson 3821f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson public Object getOption(int arg0) throws SocketException { 3831f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson return null; 3841f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3851f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson } 3861f8243e3d2b5a3f8e0398c304d1dea0395cbc368Jesse Wilson} 387