170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes/* 270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * contributor license agreements. See the NOTICE file distributed with 470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * this work for additional information regarding copyright ownership. 570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * (the "License"); you may not use this file except in compliance with 770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * the License. You may obtain a copy of the License at 870882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * 970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 1070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * 1170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * Unless required by applicable law or agreed to in writing, software 1270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 1370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * See the License for the specific language governing permissions and 1570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes * limitations under the License. 1670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes */ 1770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 184557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonpackage libcore.java.net; 1970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 2070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.io.IOException; 2170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.io.InputStream; 2270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.io.OutputStream; 2370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.ConnectException; 2470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.InetAddress; 2570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.InetSocketAddress; 2670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.ServerSocket; 2770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.Socket; 2870882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport java.net.SocketException; 2970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughesimport junit.framework.TestCase; 3070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 314e4000ed98f9056639fba0713a3fd3caacf9746cElliott Hughespublic class OldUnixSocketTest extends TestCase { 3270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 3370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes public void test_getInputStream() throws IOException { 3470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // Simple read/write test over the IO streams 3570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes final ServerSocket pingServer = new ServerSocket(0); 3655392539fea537abfb6581b474918f9d611fba27Jesse Wilson Socket pingClient = new Socket(); 3770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 3855392539fea537abfb6581b474918f9d611fba27Jesse Wilson try { 3955392539fea537abfb6581b474918f9d611fba27Jesse Wilson pingClient.connect(new InetSocketAddress( 4055392539fea537abfb6581b474918f9d611fba27Jesse Wilson InetAddress.getLocalHost(), pingServer.getLocalPort())); 4170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 4255392539fea537abfb6581b474918f9d611fba27Jesse Wilson Socket worker = pingServer.accept(); 4355392539fea537abfb6581b474918f9d611fba27Jesse Wilson pingServer.close(); 4470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 4555392539fea537abfb6581b474918f9d611fba27Jesse Wilson // Write some data to the server to provoke it 4655392539fea537abfb6581b474918f9d611fba27Jesse Wilson OutputStream clientOut = pingClient.getOutputStream(); 4755392539fea537abfb6581b474918f9d611fba27Jesse Wilson clientOut.write(new byte[256]); 4855392539fea537abfb6581b474918f9d611fba27Jesse Wilson InputStream in = worker.getInputStream(); 4970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes in.read(); 5070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 5155392539fea537abfb6581b474918f9d611fba27Jesse Wilson OutputStream out = worker.getOutputStream(); 5255392539fea537abfb6581b474918f9d611fba27Jesse Wilson out.write(new byte[42]); 5355392539fea537abfb6581b474918f9d611fba27Jesse Wilson worker.close(); 5455392539fea537abfb6581b474918f9d611fba27Jesse Wilson InputStream clientIn = pingClient.getInputStream(); 5555392539fea537abfb6581b474918f9d611fba27Jesse Wilson clientIn.read(new byte[42]); 5655392539fea537abfb6581b474918f9d611fba27Jesse Wilson 5755392539fea537abfb6581b474918f9d611fba27Jesse Wilson try { 584e4000ed98f9056639fba0713a3fd3caacf9746cElliott Hughes int i = clientIn.read(); 594e4000ed98f9056639fba0713a3fd3caacf9746cElliott Hughes fail("Should throw SocketException; got i=" + i); 6055392539fea537abfb6581b474918f9d611fba27Jesse Wilson } catch (SocketException e) { 6155392539fea537abfb6581b474918f9d611fba27Jesse Wilson // expected 6255392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 6355392539fea537abfb6581b474918f9d611fba27Jesse Wilson clientIn.close(); 6470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 6555392539fea537abfb6581b474918f9d611fba27Jesse Wilson try { 6655392539fea537abfb6581b474918f9d611fba27Jesse Wilson clientIn.read(); 6755392539fea537abfb6581b474918f9d611fba27Jesse Wilson fail("Should throw SocketException"); 6855392539fea537abfb6581b474918f9d611fba27Jesse Wilson } catch (SocketException e) { 6955392539fea537abfb6581b474918f9d611fba27Jesse Wilson // expected 7055392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 7155392539fea537abfb6581b474918f9d611fba27Jesse Wilson try { 7255392539fea537abfb6581b474918f9d611fba27Jesse Wilson clientIn.read(new byte[5]); 7355392539fea537abfb6581b474918f9d611fba27Jesse Wilson fail("Should throw SocketException"); 7455392539fea537abfb6581b474918f9d611fba27Jesse Wilson } catch (SocketException e) { 7555392539fea537abfb6581b474918f9d611fba27Jesse Wilson // expected 7655392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 7755392539fea537abfb6581b474918f9d611fba27Jesse Wilson } finally { 7855392539fea537abfb6581b474918f9d611fba27Jesse Wilson pingClient.close(); 7955392539fea537abfb6581b474918f9d611fba27Jesse Wilson pingServer.close(); 8055392539fea537abfb6581b474918f9d611fba27Jesse Wilson } 8170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } 8270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 8370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes public void test_connectLjava_net_SocketAddressI() throws Exception { 8470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // Now validate that we get a interrupted exception if we try to connect 8570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // to an address on which nobody is accepting connections and the 8670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // timeout expired 8770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes Socket theSocket = new Socket(); 8870882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes try { 8970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 9070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 1), 200); 9170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes fail("No interrupted exception when connecting to address nobody listening on with short timeout 200"); 9270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } catch (ConnectException e) { 9370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // Expected 9470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } 9570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes theSocket.close(); 9670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } 9770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes 9870882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes public void test_getOutputStream() throws Exception { 9970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // Regression test for HARMONY-2934 100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // Port 0 is not allowed to be used in connect() on some platforms, 10155392539fea537abfb6581b474918f9d611fba27Jesse Wilson // get a free port here 10255392539fea537abfb6581b474918f9d611fba27Jesse Wilson ServerSocket ss = new ServerSocket(0); 10355392539fea537abfb6581b474918f9d611fba27Jesse Wilson int port = ss.getLocalPort(); 10455392539fea537abfb6581b474918f9d611fba27Jesse Wilson ss.close(); 105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 10655392539fea537abfb6581b474918f9d611fba27Jesse Wilson Socket socket = new Socket("127.0.0.1", port, false); 10770882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes OutputStream o = socket.getOutputStream(); 10870882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes try { 10970882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes o.write(1); 11070882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } catch (SocketException e) { 11170882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes // expected 11270882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } finally { 11370882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes socket.close(); 11470882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } 11570882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes } 11670882923fb227de7a54a9b1a2a4dd2c6ec8b51aeElliott Hughes} 117