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