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