1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.net;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.AndroidOnly;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//import dalvik.annotation.KnownFailure;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InterruptedIOException;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.ConnectException;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Inet4Address;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Inet6Address;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.InetAddress;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.InetSocketAddress;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Proxy;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.ServerSocket;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.Socket;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketAddress;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketException;
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketImpl;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketTimeoutException;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.UnknownHostException;
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.channels.IllegalBlockingModeException;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.channels.SocketChannel;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.Support_Configuration;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.Support_PortManager;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(Socket.class)
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class SocketTest extends SocketTestCase {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ServerSocket ss;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Socket s;
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Thread t;
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    boolean interrupted = false;
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class SServer extends Thread implements Runnable {
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket s1 = null;
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void run() {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ss.setSoTimeout(5000);
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s1 = ss.accept();
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ss.close();
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Thread.sleep(4000);
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (java.io.InterruptedIOException x) {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println(Thread.currentThread()
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + ", accept() timeout fired: " + x);
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (InterruptedException x) {
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println("Unable to accept: " + e.toString());
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } finally {
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if (s1 != null)
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        s1.close();
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (java.io.IOException e) {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SecurityManager sm = new SecurityManager() {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission perm) {}
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkConnect(String host, int port) {
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new SecurityException();
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    };
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket()
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_Constructor() {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // create the socket and then validate some basic state
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket();
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("new socket should not be connected", s.isConnected());
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("new socket should not be bound", s.isBound());
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("new socket should not be closed", s.isClosed());
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("new socket should not be in InputShutdown", s
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isInputShutdown());
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("new socket should not be in OutputShutdown", s
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isOutputShutdown());
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.lang.String, int)
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class}
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_lang_StringI() throws IOException {
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.lang.String, int)
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons String,I");
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport);
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getPort() == sport);
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //regression for HARMONY-946
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket ss = null;
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket s = null;
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ss = new ServerSocket(0);
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket("0.0.0.0", ss.getLocalPort());
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ss.close();
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(Exception e) {
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //ignore
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.close();
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(Exception e) {
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //ignore
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket("unknown.host", 0);
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("UnknownHostException was not thrown.");
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(UnknownHostException uhe) {
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = null;
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket = new Socket(InetAddress.getByName(null), sport);
161b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti            InetAddress address = socket.getLocalAddress();
162b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti            if (Boolean.getBoolean("java.net.preferIPv6Addresses")) {
163b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti                assertTrue(
164b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti                    address.equals(InetAddress.getByName("::1")) ||
165b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti                    address.equals(InetAddress.getByName("0:0:0:0:0:0:0:1")));
166b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti            } else {
167b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti                assertEquals(address, InetAddress.getByName("127.0.0.1"));
168b70cc0ff07f0980009587ea9fa18e0cc0e3be078Lorenzo Colitti            }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                socket.close();
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(Exception e) {}
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost().getHostName(), sport);
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.lang.String, int,
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.net.InetAddress, int)
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, java.net.InetAddress.class, int.class}
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_lang_StringILjava_net_InetAddressI()
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.lang.String, int,
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.net.InetAddress, int)
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons String,I,InetAddress,I");
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost(), portNumber);
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getPort() == sport);
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (("true".equals(System.getProperty("java.net.preferIPv6Addresses")))
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && !("true".equals(System
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getProperty("java.net.preferIPv4Stack")))) {
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // ALTERNATE IPv6 TEST
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ("true".equals(System.getProperty("run.ipv6tests"))) {
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .println("Running testConstructorLjava_lang_StringILjava_net_InetAddressI(SocketTest) with IPv6GlobalAddressJcl4: "
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + Support_Configuration.IPv6GlobalAddressJcl4);
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int testPort = Support_PortManager.getNextPort();
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Socket s1 = null, s2 = null;
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s1 = new Socket(
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            Support_Configuration.IPv6GlobalAddressJcl4, 80,
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            InetAddress.getLocalHost(), testPort);
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // check here if InetAddress.getLocalHost() is returning the
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // loopback address.
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // if so that is likely the cause of the failure
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    String warning = "";
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    try {
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        InetAddress returnedLocalHost = InetAddress
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getLocalHost();
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        // don't use isLoopbackAddress for some configurations
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        // as they do not have it
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        if (returnedLocalHost.isLoopbackAddress()) {
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            warning = " - WARNING RETURNED LOCAL HOST IS THE LOOPBACK ADDRESS - MACHINE IS LIKELY NOT CONFIGURED CORRECTLY - THIS LIKELY CAUSED THE FAILURE";
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        }
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    } catch (Exception ex) {
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        warning = " - WARNING COULD NOT GET LOCAL HOST - " + ex;
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    fail("Exception creating 1st socket" + warning + ": " + e);
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                boolean exception = false;
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s2 = new Socket(
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            Support_Configuration.IPv6GlobalAddressJcl4, 80,
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            InetAddress.getLocalHost(), testPort);
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    exception = true;
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s1.close();
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if (!exception)
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        s2.close();
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue("Was able to create two sockets on same port",
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        exception);
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int testPort = Support_PortManager.getNextPort();
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket s1 = null, s2 = null;
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int serverPort = ss.getLocalPort();
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s1 = new Socket("127.0.0.1", serverPort, InetAddress
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getLocalHost(), testPort);
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                e.printStackTrace();
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // check here if InetAddress.getLocalHost() is returning the
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // loopback address.
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // if so that is likely the cause of the failure
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String warning = "";
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    InetAddress returnedLocalHost = InetAddress.getLocalHost();
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // don't use isLoopbackAddress for some configurations as
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // they do not have it
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if (returnedLocalHost.isLoopbackAddress()) {
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        warning = " - WARNING RETURNED LOCAL HOST IS THE LOOPBACK ADDRESS - MACHINE IS LIKELY NOT CONFIGURED CORRECTLY - THIS LIKELY CAUSED THE FAILURE";
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (Exception ex) {
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    warning = " - WARNING COULD NOT GET LOCAL HOST - " + ex;
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("Exception creating 1st socket" + warning + ": " + e);
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean exception = false;
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s2 = new Socket("127.0.0.1", serverPort, InetAddress
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getLocalHost(), testPort);
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                exception = true;
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s1.close();
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (!exception)
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s2.close();
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Was able to create two sockets on same port", exception);
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket("127.0.0.1", 0, InetAddress
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getLocalHost(), 0);
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.lang.String, int, boolean)
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class, int.class, boolean.class}
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_lang_StringIZ() throws IOException {
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.lang.String, int, boolean)
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons String,I,Z");
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport, true);
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getPort() == sport);
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport, false);
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost().getHostName(), sport, true);
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.net.InetAddress, int)
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.InetAddress.class, int.class}
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_net_InetAddressI() throws IOException {
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.net.InetAddress, int)
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons InetAddress,I");
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport);
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getPort() == sport);
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost(), sport);
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.net.InetAddress, int,
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        java.net.InetAddress, int)
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class}
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_net_InetAddressILjava_net_InetAddressI()
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IOException {
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.net.InetAddress, int,
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.net.InetAddress, int)
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons InetAddress,I,InetAddress,I");
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost(), portNumber);
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getLocalPort() == portNumber);
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost().getHostName(), sport,
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    InetAddress.getLocalHost(), portNumber);
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(java.net.InetAddress, int, boolean)
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.InetAddress.class, int.class, boolean.class}
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_net_InetAddressIZ() throws IOException {
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.Socket(java.net.InetAddress, int, boolean)
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("Cons InetAddress,I,Z");
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, true);
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Failed to create socket", s.getPort() == sport);
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, false);
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost(), sport, true);
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#close()
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "IOException checking missing.",
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_close() throws IOException {
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.net.Socket.close()
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer close");
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoLinger(false, 100);
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_LINGER);
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getOutputStream();
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was not thrown.");
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (java.io.IOException e) {
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getInetAddress()
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getInetAddress",
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getInetAddress() throws IOException {
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.InetAddress java.net.Socket.getInetAddress()
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getInetAddress");
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect InetAdrees", s.getInetAddress().equals(
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost()));
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getInputStream()
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getInputStream",
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getInputStream() throws IOException {
504f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        // Simple fetch test
505f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        ServerSocket server = new ServerSocket(0);
506f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        Socket client = new Socket(InetAddress.getLocalHost(), server.getLocalPort());
507f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        InputStream is = client.getInputStream();
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Failed to get stream", is);
509f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        is.close();
510f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        client.close();
511f3029c5855474c107861ce671b25fa119a6b4a51Elliott Hughes        server.close();
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getKeepAlive()
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getKeepAlive",
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getKeepAlive() {
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer getKeepAlive");
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket(InetAddress.getLocalHost(), sport,
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    null, portNumber);
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setKeepAlive(true);
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("getKeepAlive false when it should be true", theSocket
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getKeepAlive());
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setKeepAlive(false);
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("getKeepAlive true when it should be False", theSocket
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getKeepAlive());
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setKeepAlive(false);
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IOException was not thrown after calling setKeepAlive " +
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "method.");
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(IOException ioe) {
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getKeepAlive();
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IOException was not thrown after calling getKeepAlive +" +
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "method.");
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(IOException ioe) {
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_KEEPALIVE);
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_KEEPALIVE);
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getLocalAddress()
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getLocalAddress",
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getLocalAddress() throws IOException {
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.net.InetAddress
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.net.Socket.getLocalAddress()
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getLocAddress");
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Returned incorrect InetAddress",
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost(), s.getLocalAddress());
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate thet behaviour when the any address is returned
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String preferIPv4StackValue = System
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("java.net.preferIPv4Stack");
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String preferIPv6AddressesValue = System
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("java.net.preferIPv6Addresses");
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket();
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0));
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (((preferIPv4StackValue == null) || preferIPv4StackValue
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equalsIgnoreCase("false"))
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue != null)
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue.equals("true"))) {
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly (getLocalAddress) with preferIPv6Addresses=true, preferIPv4Stack=false "
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s.getLocalAddress() instanceof Inet6Address);
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly (getLocalAddress) with preferIPv6Addresses=true, preferIPv4Stack=true "
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s.getLocalAddress() instanceof Inet4Address);
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getLocalPort()
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getLocalPort",
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getLocalPort() throws IOException {
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.net.Socket.getLocalPort()
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getLocalPort");
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost(), portNumber);
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect port", s.getLocalPort() == portNumber);
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getOutputStream()
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @SuppressWarnings("deprecation")
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "IOException checking missing.",
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getOutputStream",
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getOutputStream() throws IOException {
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.io.OutputStream
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.net.Socket.getOutputStream()
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getOutputStream");
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        java.io.OutputStream os = s.getOutputStream();
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Failed to get stream", os);
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        os.write(1);
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression test for harmony-2934
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket("127.0.0.1", Support_PortManager.getNextPort(),
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream o = s.getOutputStream();
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        o.write(1);
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.sleep(1000);
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InterruptedException e) {
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        o.close();
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression test for harmony-2942
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket("0.0.0.0", Support_PortManager.getNextPort(),
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        o = s.getOutputStream();
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        o.write(1);
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.sleep(1000);
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InterruptedException e) {
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        o.close();
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getPort()
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getPort",
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getPort() throws IOException {
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.net.Socket.getPort()
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getPort");
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect port" + s.getPort(),
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getPort() == sport);
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getSoLinger()
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSoLinger",
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getSoLinger() {
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.net.Socket.getSoLinger()
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getSoLinger");
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoLinger(true, 200);
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Returned incorrect linger", 200, s.getSoLinger());
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_LINGER);
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoLinger(false, 0);
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_LINGER);
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.close();
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getSoLinger();
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException ioe) {
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception was thrown: " + e.toString());
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getReceiveBufferSize()
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getReceiveBufferSize",
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getReceiveBufferSize() {
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer getReceiveBufferSize");
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    null, portNumber);
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setReceiveBufferSize(130);
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Incorrect buffer size", s.getReceiveBufferSize() >= 130);
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_RCVBUF);
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_RCVBUF);
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket newSocket = new Socket();
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            newSocket.close();
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                newSocket.getReceiveBufferSize();
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException e) {
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception.");
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getSendBufferSize()
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSendBufferSize",
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getSendBufferSize() {
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer setSendBufferSize");
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    null, portNumber);
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSendBufferSize(134);
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Incorrect buffer size", s.getSendBufferSize() >= 134);
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_SNDBUF);
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_SNDBUF);
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.close();
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getSendBufferSize();
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IOException was not thrown.");
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(IOException ioe) {
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception was thrown: " + e.toString());
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getSoTimeout()
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getSoTimeout",
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getSoTimeout() {
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.net.Socket.getSoTimeout()
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getSoTimeout");
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport);
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoTimeout(100);
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Returned incorrect sotimeout", 100, s.getSoTimeout());
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_TIMEOUT);
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_TIMEOUT);
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.close();
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getSoTimeout();
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException ioe) {
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception was thrown: " + e.toString());
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getTcpNoDelay()
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getTcpNoDelay",
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getTcpNoDelay() {
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method boolean java.net.Socket.getTcpNoDelay()
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getTcpNoDelay");
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean bool = !s.getTcpNoDelay();
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setTcpNoDelay(bool);
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Failed to get no delay setting: " + s.getTcpNoDelay(),
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s.getTcpNoDelay() == bool);
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(TCP_NODELAY);
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, TCP_NODELAY);
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.close();
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getTcpNoDelay();
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException ioe) {
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception was thrown: " + e.toString());
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setKeepAlive(boolean)
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setKeepAlive",
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class}
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setKeepAliveZ() throws Exception {
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // There is not really a good test for this as it is there to detect
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // crashed machines. Just make sure we can set it
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer setKeepAlive");
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket(InetAddress.getLocalHost(), sport,
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    null, portNumber);
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setKeepAlive(true);
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setKeepAlive(false);
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_KEEPALIVE);
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_KEEPALIVE);
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for HARMONY-1136
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new TestSocket((SocketImpl) null).setKeepAlive(true);
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setKeepAlive(true);
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestSocket extends Socket {
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public TestSocket(SocketImpl impl) throws SocketException {
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(impl);
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies SecurityException.",
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setSocketImplFactory",
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketImplFactory.class}
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setSocketImplFactoryLjava_net_SocketImplFactory() {
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.net.Socket.setSocketImplFactory(java.net.SocketImplFactory)
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Cannot test as setting will cause the factory to be changed for
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // all subsequent sockets
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager sm = new SecurityManager() {
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkPermission(Permission perm) {
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void checkSetFactory() {
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException();
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket.setSocketImplFactory(null);
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setSendBufferSize(int)
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setSendBufferSize",
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setSendBufferSizeI() {
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer setSendBufferSizeI");
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSendBufferSize(134);
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Incorrect buffer size", s.getSendBufferSize() >= 134);
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_SNDBUF);
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_SNDBUF);
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setSendBufferSize(1);
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setReceiveBufferSize(int)
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setReceiveBufferSize",
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setReceiveBufferSizeI() {
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer setReceiveBufferSizeI");
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setReceiveBufferSize(130);
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Incorrect buffer size", s.getReceiveBufferSize() >= 130);
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_RCVBUF);
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_RCVBUF);
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setReceiveBufferSize(1);
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setSoLinger(boolean, int)
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setSoLinger",
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class, int.class}
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setSoLingerZI() {
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.net.Socket.setSoLinger(boolean, int)
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer setSoLingerZI");
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoLinger(true, 500);
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Set incorrect linger", 500, s.getSoLinger());
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_LINGER);
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoLinger(false, 0);
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_LINGER);
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setSoLinger(true, 1);
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setSoTimeout(int)
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setSoTimeout",
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setSoTimeoutI() {
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.net.Socket.setSoTimeout(int)
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer seSoTimeoutI");
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setSoTimeout(100);
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Set incorrect sotimeout", 100, s.getSoTimeout());
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_TIMEOUT);
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_TIMEOUT);
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setSoTimeout(1);
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setTcpNoDelay(boolean)
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setTcpNoDelay",
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class}
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setTcpNoDelayZ() {
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.net.Socket.setTcpNoDelay(boolean)
1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int sport = startServer("SServer setTcpNoDelayZ");
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int portNumber = Support_PortManager.getNextPort();
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean bool;
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.setTcpNoDelay(bool = !s.getTcpNoDelay());
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Failed to set no delay setting: " + s.getTcpNoDelay(),
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    s.getTcpNoDelay() == bool);
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(TCP_NODELAY);
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, TCP_NODELAY);
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setTcpNoDelay(true);
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#toString()
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "toString",
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_toString() throws IOException {
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.lang.String java.net.Socket.toString()
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer toString");
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost().getHostName(), sport,
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetAddress.getLocalHost(), portNumber);
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect string: " + s.toString()
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + " localHost: " + InetAddress.getLocalHost(), s.toString()
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "Socket[addr=" + InetAddress.getLocalHost() + ",port="
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + s.getPort() + ",localport="
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + s.getLocalPort() + "]"));
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#shutdownInput()
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "shutdownInput",
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @AndroidOnly("RI returns wrong value for EOF")
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_shutdownInput() throws Exception {
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetAddress addr = InetAddress.getLocalHost();
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket(port, 5, addr);
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket(addr, port);
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // shutdown the input
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.shutdownInput();
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // send the regular data
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String sendString = new String("Test");
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.write(sendString.getBytes());
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.flush();
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // give things some time to settle
1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(1000);
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // RI fails here. It is a RI bug not to return 0 to indicate EOF
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(0, theInput.available());
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = new Socket();
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        socket.close();
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.shutdownInput();
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was not thrown.");
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#shutdownOutput()
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "shutdownOutput",
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_shutdownOutput() throws IOException {
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetAddress addr = InetAddress.getLocalHost();
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket(port, 5, addr);
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket(addr, port);
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // shutdown the output
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock.shutdownOutput();
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // send the regular data
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String sendString = new String("Test");
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theOutput.write(sendString.getBytes());
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theOutput.flush();
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when writing on socket with output shutdown");
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.shutdownInput();
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was not thrown.");
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getLocalSocketAddress()
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getLocalSocketAddress",
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getLocalSocketAddress() throws IOException {
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set up server connect and then validate that we get the right
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // response for the local address
1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getLocSocketAddress");
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Returned incorrect InetSocketAddress(1):"
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + s.getLocalSocketAddress().toString()
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + "Expected: "
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + (new InetSocketAddress(InetAddress.getLocalHost(),
1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                portNumber)).toString(), s
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getLocalSocketAddress().equals(
1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), portNumber)));
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now create a socket that is not bound and validate we get the
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // right answer
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(
1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Returned incorrect InetSocketAddress -unbound socket- Expected null",
1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getLocalSocketAddress());
1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now bind the socket and make sure we get the right answer
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        portNumber = Support_PortManager.getNextPort();
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(),
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber));
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Returned incorrect InetSocketAddress(2):"
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + theSocket.getLocalSocketAddress().toString()
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + "Expected: "
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + (new InetSocketAddress(InetAddress.getLocalHost(),
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                portNumber)).toString(), theSocket
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getLocalSocketAddress().equals(
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), portNumber)));
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate thet behaviour when the any address is returned
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket();
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0));
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String preferIPv4StackValue = System
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("java.net.preferIPv4Stack");
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String preferIPv6AddressesValue = System
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getProperty("java.net.preferIPv6Addresses");
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (((preferIPv4StackValue == null) || preferIPv4StackValue
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equalsIgnoreCase("false"))
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue != null)
1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue.equals("true"))) {
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly with preferIPv6Addresses=true, preferIPv4Stack=false "
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    ((InetSocketAddress) s.getLocalSocketAddress())
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getAddress() instanceof Inet6Address);
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly with preferIPv6Addresses=true, preferIPv4Stack=true "
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    ((InetSocketAddress) s.getLocalSocketAddress())
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getAddress() instanceof Inet4Address);
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate the same for getLocalAddress
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket();
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 0));
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (((preferIPv4StackValue == null) || preferIPv4StackValue
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equalsIgnoreCase("false"))
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue != null)
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                && (preferIPv6AddressesValue.equals("true"))) {
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly with preferIPv6Addresses=true, preferIPv4Stack=false "
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    ((InetSocketAddress) s.getLocalSocketAddress())
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getAddress() instanceof Inet6Address);
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "ANY address not returned correctly with preferIPv6Addresses=true, preferIPv4Stack=true "
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + s.getLocalSocketAddress(),
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    ((InetSocketAddress) s.getLocalSocketAddress())
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getAddress() instanceof Inet4Address);
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getRemoteSocketAddress()
1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getRemoteSocketAddress",
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getRemoteSocketAddress() throws IOException {
1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // set up server connect and then validate that we get the right
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // response for the remote address
1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int sport = startServer("SServer getLocRemoteAddress");
1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s = new Socket(InetAddress.getLocalHost(), sport, null, portNumber);
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect InetSocketAddress(1):"
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + s.getLocalSocketAddress().toString(),
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.getRemoteSocketAddress()
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .equals(
1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), sport)));
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.close();
1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now create one that is not connect and validate that we get the
1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // right answer
1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        portNumber = Support_PortManager.getNextPort();
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(),
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber));
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("Returned incorrect InetSocketAddress -unconnected socket:"
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + "Expected: NULL", theSocket.getRemoteSocketAddress());
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now connect and validate we get the right answer
1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(),
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                sport));
1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Returned incorrect InetSocketAddress(2):"
1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + theSocket.getRemoteSocketAddress().toString(),
1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getRemoteSocketAddress()
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .equals(
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), sport)));
1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#isBound()
1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isBound",
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_isBound() throws IOException {
1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetAddress addr = InetAddress.getLocalHost();
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket(port, 5, addr);
1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket(addr, port);
1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated  not bound when it should be (1)",
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isBound());
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now do it with the new constructors and revalidate. Connect causes
1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // the socket to be bound
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket indicated bound when it was not (2)", theSocket
1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isBound());
1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock = serverSocket.accept();
1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated not bound when it should be (2)",
1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isBound());
1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now test when we bind explicitely
1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theLocalAddress = new InetSocketAddress(InetAddress
1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket indicated bound when it was not (3)", theSocket
1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isBound());
1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.bind(theLocalAddress);
1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated not bound when it should be (3a)",
1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isBound());
1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated not bound when it should be (3b)",
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isBound());
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#isConnected()
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isConnected",
1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_isConnected() throws IOException {
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetAddress addr = InetAddress.getLocalHost();
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket(port, 5, addr);
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket(addr, port);
1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated  not connected when it should be",
1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isConnected());
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now do it with the new constructors and revalidate
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket indicated connected when it was not", theSocket
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isConnected());
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock = serverSocket.accept();
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket indicated  not connected when it should be",
1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isConnected());
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#isClosed()
1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isClosed",
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_isClosed() throws IOException {
1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetAddress addr = InetAddress.getLocalHost();
1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket(port, 5, addr);
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket(addr, port);
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate isClosed returns expected values
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket should indicate it is not closed(1):", theSocket
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket should indicate it is closed(1):", theSocket
1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket(addr, port);
1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket should indicate it is not closed(2):", theSocket
1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket should indicate it is closed(2):", theSocket
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate that isClosed works ok for sockets returned from
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // ServerSocket.accept()
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Server Socket should indicate it is not closed:", servSock
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock.close();
1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Server Socket should indicate it is closed:", servSock
1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isClosed());
1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#bind(java.net.SocketAddress)
1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "bind",
1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class}
1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_bindLjava_net_SocketAddress() throws IOException {
1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class mySocketAddress extends SocketAddress {
1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public mySocketAddress() {
1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Address we cannot bind to
1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.bind(new InetSocketAddress(InetAddress
1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getByAddress(Support_Configuration.nonLocalAddressBytes),
1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort()));
1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when binding to bad address:"
1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                   + theSocket.getLocalSocketAddress().toString());
1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException ex) {
1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now create a socket that is not bound and then bind it
1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(),
1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber));
1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate that the localSocketAddress reflects the address we
1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // bound to
1536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Local address not correct after bind:"
1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + theSocket.getLocalSocketAddress().toString()
1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + " Expected: "
1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + (new InetSocketAddress(InetAddress.getLocalHost(),
1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                portNumber)).toString(), theSocket
1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getLocalSocketAddress().equals(
1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), portNumber)));
1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we can now connect and that connections appear to come
1547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // from the address we bound to.
1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket();
1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Returned Remote address from server connected to does not match expected local address:"
1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + servSock.getRemoteSocketAddress().toString()
1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + " Expected: "
1558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + (new InetSocketAddress(InetAddress.getLocalHost(),
1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                portNumber)).toString(), servSock
1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .getRemoteSocketAddress().equals(
1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                new InetSocketAddress(InetAddress
1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                        .getLocalHost(), portNumber)));
1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock.close();
1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate if we pass in null that it picks an address for us and
1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // all is ok
1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.bind(null);
1571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNotNull("Bind with null did not work", theSocket
1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalSocketAddress());
1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now check the error conditions
1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Address that we have allready bound to
1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket2 = new Socket();
1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.bind(theAddress);
1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket2.bind(theAddress);
1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception binding to address that is not available");
1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException ex) {
1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket2.close();
1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // unsupported SocketAddress subclass
1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.bind(new mySocketAddress());
1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when binding using unsupported SocketAddress subclass");
1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException ex) {
1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#bind(java.net.SocketAddress)
1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.ADDITIONAL,
1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks bind on proxy.",
1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "bind",
1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class}
1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_bindLjava_net_SocketAddress_Proxy() throws IOException {
1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //The Proxy will not impact on the bind operation.It can be assigned with any address.
1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 0));
1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = new Socket(proxy);
1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            InetAddress address = InetAddress.getByName("localhost");
1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int port = 0;
1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.bind(new InetSocketAddress(address, port));
1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(address, socket.getLocalAddress());
1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(port!=socket.getLocalPort());
1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.close();
1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#connect(java.net.SocketAddress)
1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "connect",
1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class}
1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_connectLjava_net_SocketAddress() throws Exception {
1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // needed for some tests
1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class mySocketAddress extends SocketAddress {
1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public mySocketAddress() {
1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class SocketCloser extends Thread {
1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int timeout = 0;
1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = null;
1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void run() {
1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Thread.sleep(timeout);
1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.close();
1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (Exception e) {
1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ;
1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public SocketCloser(int timeout, Socket theSocket) {
1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.timeout = timeout;
1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.theSocket = theSocket;
1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // start by validating the error checks
1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = null;
1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = null;
1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress theAddress = null;
1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress nonConnectableAddress = null;
1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress nonReachableAddress = null;
1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress invalidType = null;
1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // byte[] theBytes = {-1,-1,-1,-1};
1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] theBytes = { 0, 0, 0, 0 };
1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber);
1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        nonConnectableAddress = new InetSocketAddress(InetAddress
1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getByAddress(theBytes), portNumber);
1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        nonReachableAddress = new InetSocketAddress(InetAddress
1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getByName(Support_Configuration.ResolvedNotExistingHost),
1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber);
1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        invalidType = new mySocketAddress();
1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(null);
1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception after null address passed in");
1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Wrong exception null address passed in: "
1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + e.toString(), (e instanceof IllegalArgumentException));
1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(invalidType);
1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when invalid socket address type passed in: ");
1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when when invalid socket address type passed in: "
1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof IllegalArgumentException));
1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(nonConnectableAddress);
1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when non Connectable Address passed in: ");
1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when non Connectable Address passed in: "
1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof ConnectException));
1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get a connect exception if we try to connect to
1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // an address on which nobody is listening
1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress);
1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when connecting to address nobody listening on: ");
1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting to address nobody listening on: "
1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof ConnectException));
1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we can acutally connect when sombody is listening
1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we can acutally connect when sombody is listening
1739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate that when a socket is connected that it answers
1745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // correctly to related queries
1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket did not returned connected when it is: ", theSocket
1747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isConnected());
1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket returned closed when it should be connected ",
1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isClosed());
1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket returned not bound when it should be: ", theSocket
1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isBound());
1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket returned input Shutdown when it should be connected ",
1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isInputShutdown());
1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket returned output Shutdown when it should be connected ",
1757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isOutputShutdown());
1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Local port on connected socket was 0", theSocket
1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalPort() != 0);
1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get the right exception if we connect when we
1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // are already connected
1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket = new ServerSocket();
1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket.bind(theAddress);
1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress);
1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress);
1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket.close();
1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when we try to connect on a connected socket: ");
1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting on socket that is allready connected"
1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof SocketException));
1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(
1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting on socket that is allready connected"
1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof SocketTimeoutException));
1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e2) {
1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that connected socket can be used to read/write
1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput2 = servSock.getInputStream();
1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput2 = theSocket.getOutputStream();
1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String sendString = new String("Test");
1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.write(sendString.getBytes());
1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.flush();
1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(1000);
1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int totalBytesRead = 0;
1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] myBytes = new byte[100];
1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (theInput.available() > 0) {
1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int bytesRead = theInput.read(myBytes, totalBytesRead,
1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes.length - totalBytesRead);
1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            totalBytesRead = totalBytesRead + bytesRead;
1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String receivedString = new String(myBytes, 0, totalBytesRead);
1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Could not recv on socket connected with timeout:"
1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + receivedString + ":" + sendString, receivedString
1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(sendString));
1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sendString = new String("SEND - Test");
1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput2.write(sendString.getBytes());
1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput2.flush();
1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(1000);
1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        totalBytesRead = 0;
1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myBytes = new byte[100];
1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (theInput2.available() > 0) {
1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int bytesRead = theInput2.read(myBytes, totalBytesRead,
1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes.length - totalBytesRead);
1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            totalBytesRead = totalBytesRead + bytesRead;
1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        receivedString = new String(myBytes, 0, totalBytesRead);
1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Could not send on socket connected with timeout:"
1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + receivedString + ":" + sendString, receivedString
1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(sendString));
1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketChannel channel = SocketChannel.open();
1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        channel.configureBlocking(false);
1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = channel.socket();
1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.connect( new InetSocketAddress(InetAddress.getLocalHost(),
1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort()));
1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalBlockingModeException was not thrown.");
1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IllegalBlockingModeException ibme) {
1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#connect(java.net.SocketAddress, int)
1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "connect",
1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class, int.class}
1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_connectLjava_net_SocketAddressI() throws Exception {
1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // needed for some tests
1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class mySocketAddress extends SocketAddress {
1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public mySocketAddress() {
1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class SocketCloser extends Thread {
1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int timeout = 0;
1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = null;
1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void run() {
1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Thread.sleep(timeout);
1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.close();
1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (Exception e) {
1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public SocketCloser(int timeout, Socket theSocket) {
1889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.timeout = timeout;
1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.theSocket = theSocket;
1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        class SocketConnector extends Thread {
1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int timeout = 0;
1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = null;
1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            SocketAddress address = null;
1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void run() {
1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.connect(address, timeout);
1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (Exception e) {
1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public SocketConnector(int timeout, Socket theSocket,
1912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    SocketAddress address) {
1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.timeout = timeout;
1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.theSocket = theSocket;
1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                this.address = address;
1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // start by validating the error checks
1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = null;
1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = null;
1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress theAddress = null;
1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress nonConnectableAddress = null;
1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress nonReachableAddress = null;
1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress nonListeningAddress = null;
1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress invalidType = null;
1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] theBytes = { 0, 0, 0, 0 };
1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber);
1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        nonConnectableAddress = new InetSocketAddress(InetAddress
1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getByAddress(theBytes), portNumber);
1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        nonReachableAddress = new InetSocketAddress(InetAddress
1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getByName(Support_Configuration.ResolvedNotExistingHost),
1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                portNumber);
1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get another port
1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(7000);
1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        nonListeningAddress = new InetSocketAddress(InetAddress.getLocalHost(),
1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Support_PortManager.getNextPort());
1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        invalidType = new mySocketAddress();
1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress, -100);
1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception after negative timeout passed in");
1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Wrong exception when negative timeout passed in: "
1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + e.toString(), (e instanceof IllegalArgumentException));
1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(null, 0);
1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception after null address passed in");
1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Wrong exception null address passed in: "
1958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    + e.toString(), (e instanceof IllegalArgumentException));
1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(invalidType, 100000);
1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when invalid socket address type passed in: ");
1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when when invalid socket address type passed in: "
1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof IllegalArgumentException));
1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(nonConnectableAddress, 100000);
1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when non Connectable Address passed in: ");
1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when non Connectable Address passed in: "
1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof SocketException));
1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get a connect exception if we try to connect to
1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // an address on which nobody is listening
1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress, 0);
1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No timeout:No exception when connecting to address nobody listening on: ");
1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "No timeout:Wrong exception when connecting to address nobody listening on: "
1992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof ConnectException));
1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we can acutally connect when sombody is listening
1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress, 0);
2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get a connect exception if we try to connect to
2004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // an address on which nobody is listening
2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(nonListeningAddress, 100000);
2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when connecting to address nobody listening on: ");
2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting to address nobody listening on: "
2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof ConnectException));
2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get a interrupted exception if we try to connect
2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // to an address on which nobody is accepting connections and the
2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // timeout expired
2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
2021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(nonReachableAddress, 200);
2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No interrupted exception when connecting to address nobody listening on with short timeout 200: ");
2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting to address nobody listening on with short timeout 200: "
2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof SocketTimeoutException));
2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get a interrupted exception if we try to connect
2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // to an address on which nobody is accepting connections and the
2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // timeout expired
2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(nonReachableAddress, 40);
2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No interrupted exception when connecting to address nobody listening on with short timeout 40: ");
2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting to address nobody listening on with short timeout 40: "
2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof SocketTimeoutException));
2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we can acutally connect when sombody is listening
2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new InetSocketAddress(InetAddress.getLocalHost(), Support_PortManager
2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getNextPort());
2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress, 100000);
2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // validate that when a socket is connected that it answers
2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // correctly to related queries
2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket did not returned connected when it is: ", theSocket
2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isConnected());
2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket returned closed when it should be connected ",
2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isClosed());
2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Socket returned not bound when it should be: ", theSocket
2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .isBound());
2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket returned input Shutdown when it should be connected ",
2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isInputShutdown());
2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket returned output Shutdown when it should be connected ",
2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isOutputShutdown());
2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Local port on connected socket was 0", theSocket
2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalPort() != 0);
2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that we get the right exception if we connect when we
2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // are already connected
2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new InetSocketAddress(InetAddress.getLocalHost(),
2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket = new Socket();
2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket = new ServerSocket();
2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket.bind(theAddress);
2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress, 100000);
2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.connect(theAddress, 100000);
2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            serverSocket.close();
2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("No exception when we try to connect on a connected socket: ");
2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(
2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting on socket that is allready connected"
2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(), (e instanceof SocketException));
2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(
2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "Wrong exception when connecting on socket that is allready connected"
2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + e.toString(),
2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    (e instanceof SocketTimeoutException));
2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e2) {
2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now validate that connected socket can be used to read/write
2104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new InetSocketAddress(InetAddress.getLocalHost(), Support_PortManager
2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getNextPort());
2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket = new ServerSocket();
2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress, 100000);
2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput2 = servSock.getInputStream();
2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput2 = theSocket.getOutputStream();
2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String sendString = new String("Test");
2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.write(sendString.getBytes());
2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput.flush();
2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(1000);
2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int totalBytesRead = 0;
2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] myBytes = new byte[100];
2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (theInput.available() > 0) {
2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int bytesRead = theInput.read(myBytes, totalBytesRead,
2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes.length - totalBytesRead);
2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            totalBytesRead = totalBytesRead + bytesRead;
2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String receivedString = new String(myBytes, 0, totalBytesRead);
2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Could not recv on socket connected with timeout:"
2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + receivedString + ":" + sendString, receivedString
2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(sendString));
2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sendString = new String("SEND - Test");
2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput2.write(sendString.getBytes());
2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theOutput2.flush();
2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        totalBytesRead = 0;
2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        myBytes = new byte[100];
2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(1000);
2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (theInput2.available() > 0) {
2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int bytesRead = theInput2.read(myBytes, totalBytesRead,
2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes.length - totalBytesRead);
2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            totalBytesRead = totalBytesRead + bytesRead;
2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        receivedString = new String(myBytes, 0, totalBytesRead);
2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Could not send on socket connected with timeout:"
2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                + receivedString + ":" + sendString, receivedString
2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .equals(sendString));
2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // now try to set options while we are connecting
2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket = new Socket();
2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketConnector connector = new SocketConnector(5000, theSocket,
2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                nonReachableAddress);
2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        connector.start();
2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.setSoTimeout(100);
2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(10);
2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Socket option not set during connect: 10 ", 100,
2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getSoTimeout());
2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(50);
2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.setSoTimeout(200);
2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Socket option not set during connect: 50 ", 200,
2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getSoTimeout());
2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread.sleep(5000);
2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketChannel channel = SocketChannel.open();
2173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        channel.configureBlocking(false);
2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = channel.socket();
2175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int port = Support_PortManager.getNextPort();
2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.connect( new InetSocketAddress(InetAddress.getLocalHost(),
2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort()), port);
2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalBlockingModeException was not thrown.");
2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IllegalBlockingModeException ibme) {
2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#isInputShutdown()
2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isInputShutdown",
2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_isInputShutdown() throws IOException {
2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket();
2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer with newly connected socket
2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket indicated input shutdown when it should not have",
2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isInputShutdown());
2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // shutdown the output
2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.shutdownInput();
2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer once it is shut down
2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket indicated input was NOT shutdown when it should have been",
2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isInputShutdown());
2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer for closed sockets
2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket indicated input was shutdown when socket was closed",
2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.isInputShutdown());
2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#isOutputShutdown()
2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "isOutputShutdown",
2234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_isOutputShutdown() throws IOException {
2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .getLocalHost(), Support_PortManager.getNextPort());
2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket serverSocket = new ServerSocket();
2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.bind(theAddress);
2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.connect(theAddress);
2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket servSock = serverSocket.accept();
2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        InputStream theInput = theSocket.getInputStream();
2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream theOutput = servSock.getOutputStream();
2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer with newly connected socket
2248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Socket indicated output shutdown when it should not have",
2249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.isOutputShutdown());
2250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // shutdown the output
2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        servSock.shutdownOutput();
2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer once it is shut down
2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue(
2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket indicated output was NOT shutdown when it should have been",
2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.isOutputShutdown());
2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.close();
2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        serverSocket.close();
2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // make sure we get the right answer for closed sockets
2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse(
2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Socket indicated output was output shutdown when the socket was closed",
2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.isOutputShutdown());
2266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setReuseAddress(boolean)
2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setReuseAddress",
2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class}
2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setReuseAddressZ() {
2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            InetAddress allAddresses[] = InetAddress.getAllByName(InetAddress
2282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getLocalHost().getHostName());
2283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (allAddresses.length > 1) {
2284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetSocketAddress theAddress = new InetSocketAddress(
2286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        InetAddress.getLocalHost(), Support_PortManager
2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getNextPort());
2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ServerSocket serverSocket = new ServerSocket();
2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.bind(theAddress);
2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // try to bind to port address that is already in use with
2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // reuseAddress = false.
2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // On windows platforms the bind is allowed even then
2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // reUseAddress is false (ONLY IF BOTH SOCKETS
2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // ARE IPV4 Sockets) so our test uses the platform to determine
2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // what the expected result is. It seems that on linux
2297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // platforms we also don't get an exception.
2298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetSocketAddress theLocalAddress = new InetSocketAddress(
2299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[1], Support_PortManager
2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getNextPort());
2301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetSocketAddress theOtherLocalAddress = new InetSocketAddress(
2302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[0], theLocalAddress
2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getPort());
2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Socket theSocket = new Socket();
2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setReuseAddress(false);
2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.bind(theLocalAddress);
2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Socket theSocket2 = null;
2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String platform = System.getProperty("os.name");
2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2 = new Socket();
2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.setReuseAddress(false);
2312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.bind(theOtherLocalAddress);
2313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if ((!platform.startsWith("Linux"))
2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            && ((!platform.startsWith("Windows")) ||
2316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            // for windows we don't get an exception with
2317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            // setreuse set to false unless one of the
2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            // addresses we bind to is an IPv6 address and we
2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            // are therefore using the IPv6 stack.
2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            !((((InetAddress) allAddresses[0]) instanceof Inet4Address) && (((InetAddress) allAddresses[1]) instanceof Inet4Address)))) {
2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        fail("No exception when setReuseAddress is false and we bind:"
2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theLocalAddress.toString()
2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + ":"
2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theOtherLocalAddress.toString());
2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException ex) {
2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if ((platform.startsWith("Linux"))
2328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            || ((platform.startsWith("Windows")) && ((((InetAddress) allAddresses[0]) instanceof Inet4Address) && (((InetAddress) allAddresses[1]) instanceof Inet4Address)))) {
2329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        fail("Got unexpected exception when binding with setReuseAddress false on windows platform:"
2330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theAddress.toString() + ":" + ex.toString());
2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket2.close();
2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // try to bind to port that is allready in use with reuseAddress
2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // = true
2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theLocalAddress = new InetSocketAddress(
2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[0], Support_PortManager
2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getNextPort());
2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOtherLocalAddress = new InetSocketAddress(
2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[1], theLocalAddress
2343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getPort());
2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket = new Socket();
2346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setReuseAddress(true);
2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.bind(theLocalAddress);
2348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
2349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2 = new Socket();
2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.setReuseAddress(true);
2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.bind(theOtherLocalAddress);
2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.close();
2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException ex) {
2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    fail("IOException when setReuseAddress is true and we bind :"
2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            + ex.toString());
2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // try with default behavior which should be the same on all
2361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // platforms
2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theLocalAddress = new InetSocketAddress(
2363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[0], Support_PortManager
2364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getNextPort());
2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOtherLocalAddress = new InetSocketAddress(
2366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        (InetAddress) allAddresses[1], theLocalAddress
2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getPort());
2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket = new Socket();
2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.bind(theLocalAddress);
2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2 = new Socket();
2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.bind(theOtherLocalAddress);
2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket2.close();
2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if ((!platform.startsWith("Linux"))
2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            && ((!platform.startsWith("Windows")) || !((((InetAddress) allAddresses[0]) instanceof Inet4Address) && (((InetAddress) allAddresses[1]) instanceof Inet4Address)))) {
2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        fail("No exception when setReuseAddress is default and we bind:"
2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theLocalAddress.toString()
2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + ":"
2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theOtherLocalAddress.toString());
2381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException ex) {
2383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    if ((platform.startsWith("Linux"))
2384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            || ((platform.startsWith("Windows")) && ((((InetAddress) allAddresses[0]) instanceof Inet4Address) && (((InetAddress) allAddresses[1]) instanceof Inet4Address)))) {
2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        fail("Got unexpected exception when binding with setReuseAddress default on windows platform:"
2386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + theAddress.toString() + ":" + ex.toString());
2387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_REUSEADDR);
2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_REUSEADDR);
2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setReuseAddress(true);
2402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
2404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
2405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getReuseAddress()
2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getReuseAddress",
2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getReuseAddress() {
2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setReuseAddress(true);
2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("getReuseAddress false when it should be true",
2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.getReuseAddress());
2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setReuseAddress(false);
2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("getReuseAddress true when it should be False",
2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.getReuseAddress());
2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_REUSEADDR);
2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_REUSEADDR);
2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket newSocket = new Socket();
2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            newSocket.close();
2436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                newSocket.getReuseAddress();
2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
2439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException e) {
2440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(Exception e) {
2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception.");
2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setOOBInline(boolean)
2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setOOBInline",
2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class}
2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setOOBInlineZ() {
2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // mostly tested in getOOBInline. Just set to make sure call works ok
2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new InetSocketAddress(InetAddress.getLocalHost(),
2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
2461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setOOBInline(true);
2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("expected OOBIline to be true", theSocket.getOOBInline());
2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_OOBINLINE);
2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_OOBINLINE);
2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setOOBInline(true);
2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getOOBInline()
2483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getOOBInline",
2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getOOBInline() {
2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new InetSocketAddress(InetAddress.getLocalHost(),
2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
2495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // validate that value reflects what we set it to true after true,
2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // false after false and false after false false
2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setOOBInline(true);
2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("expected OOBIline to be true", theSocket.getOOBInline());
2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setOOBInline(false);
2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("expected OOBIline to be true", theSocket
2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getOOBInline());
2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setOOBInline(false);
2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("expected OOBIline to be true", theSocket
2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .getOOBInline());
2507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.getOOBInline();
2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("SocketException was not thrown.");
2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(SocketException se) {
2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(SO_OOBINLINE);
2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, SO_OOBINLINE);
2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setTrafficClass(int)
2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setTrafficClass",
2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setTrafficClassI() {
2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_LOWCOST = 0x2;
2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_RELIABILTY = 0x4;
2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_THROUGHPUT = 0x8;
2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_LOWDELAY = 0x10;
2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new InetSocketAddress(InetAddress.getLocalHost(),
2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
2539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // validate that value set must be between 0 and 255
2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setTrafficClass(256);
2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("No exception was thrown when traffic class set to 256");
2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalArgumentException e) {
2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setTrafficClass(-1);
2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("No exception was thrown when traffic class set to -1");
2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalArgumentException e) {
2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // now validate that we can set it to some good values
2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setTrafficClass(IPTOS_LOWCOST);
2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setTrafficClass(IPTOS_THROUGHPUT);
2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(IP_TOS);
2558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, IP_TOS);
2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.setTrafficClass(0);
2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was not thrown.");
2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(SocketException ioe) {
2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getTrafficClass()
2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "SocketException checking missing.",
2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getTrafficClass",
2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getTrafficClass() {
2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_LOWCOST = 0x2;
2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_RELIABILTY = 0x4;
2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_THROUGHPUT = 0x8;
2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int IPTOS_LOWDELAY = 0x10;
2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new InetSocketAddress(InetAddress.getLocalHost(),
2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_PortManager.getNextPort());
2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            /*
2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project             * we cannot actually check that the values are set as if a platform
2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project             * does not support the option then it may come back unset even
2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project             * though we set it so just get the value to make sure we can get it
2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project             */
2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int trafficClass = theSocket.getTrafficClass();
2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ensureExceptionThrownIfOptionIsUnsupportedOnOS(IP_TOS);
2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            handleException(e, IP_TOS);
2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#getChannel()
2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getChannel",
2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getChannel() throws Exception {
2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new Socket().getChannel());
2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketChannel channel = SocketChannel.open();
2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = channel.socket();
2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(channel, socket.getChannel());
2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        socket.close();
2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        channel.close();
2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#sendUrgentData(int)
2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "sendUrgentData",
2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_sendUrgentDataI() {
2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Some platforms may not support urgent data in this case we will not
2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // run these tests. For now run on all platforms until we find those
2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // that do not support urgent data
2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String platform = System.getProperty("os.name");
2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!platform.equals("Dummy")) {
2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // validate that when OOBInline is false that any urgent data
2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // is silently ignored
2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String urgentData = "U";
2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InetSocketAddress theAddress = new InetSocketAddress(
2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        InetAddress.getLocalHost(), Support_PortManager
2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                .getNextPort());
2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Socket theSocket = new Socket();
2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ServerSocket serverSocket = new ServerSocket();
2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.bind(theAddress);
2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.connect(theAddress);
2652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Socket servSock = serverSocket.accept();
2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                InputStream theInput = theSocket.getInputStream();
2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                OutputStream theOutput = servSock.getOutputStream();
2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the regular data
2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String sendString = new String("Test");
2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the urgent data which should not be received
2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setOOBInline(false);
2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.sendUrgentData(urgentData.getBytes()[0]);
2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // give things some time to settle
2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Thread.sleep(1000);
2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int totalBytesRead = 0;
2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                byte[] myBytes = new byte[100];
2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                while (theInput.available() > 0) {
2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    int bytesRead = theInput.read(myBytes, totalBytesRead,
2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            myBytes.length - totalBytesRead);
2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = totalBytesRead + bytesRead;
2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                String receivedString = new String(myBytes, 0, totalBytesRead);
2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //assertTrue("Urgent Data seems to have been received:"
2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //        + receivedString + ":" + sendString, receivedString
2681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //        .equals(sendString + sendString));
2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // now validate that urgent data is received as expected. Expect
2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // that it should be between the two writes.
2688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
2689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        Support_PortManager.getNextPort());
2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket = new Socket();
2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket = new ServerSocket();
2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.bind(theAddress);
2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.connect(theAddress);
2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock = serverSocket.accept();
2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theInput = theSocket.getInputStream();
2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput = servSock.getOutputStream();
2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the regular data
2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                sendString = new String("Test - Urgent Data");
2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the urgent data which should be received
2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setOOBInline(true);
2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.sendUrgentData(urgentData.getBytes()[0]);
2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Thread.sleep(1000);
2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                totalBytesRead = 0;
2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                myBytes = new byte[100];
2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                while (theInput.available() > 0) {
2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    int bytesRead = theInput.read(myBytes, totalBytesRead,
2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            myBytes.length - totalBytesRead);
2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = totalBytesRead + bytesRead;
2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                receivedString = new String(myBytes, 0, totalBytesRead);
2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue("Urgent Data was not received with one urgent byte:"
2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + receivedString + ":" + sendString + urgentData
2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + sendString, receivedString.equals(sendString
2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + urgentData + sendString));
2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // now test case where we try to send two urgent bytes.
2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        Support_PortManager.getNextPort());
2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket = new Socket();
2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket = new ServerSocket();
2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.bind(theAddress);
2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.connect(theAddress);
2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock = serverSocket.accept();
2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theInput = theSocket.getInputStream();
2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput = servSock.getOutputStream();
2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the regular data
2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                sendString = new String("Test - Urgent Data");
2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the urgent data which should not be received
2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setOOBInline(true);
2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.sendUrgentData(urgentData.getBytes()[0]);
2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.sendUrgentData(urgentData.getBytes()[0]);
2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.write(sendString.getBytes());
2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput.flush();
2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Thread.sleep(1000);
2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                totalBytesRead = 0;
2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                myBytes = new byte[100];
2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                while (theInput.available() > 0) {
2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    int bytesRead = theInput.read(myBytes, totalBytesRead,
2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            myBytes.length - totalBytesRead);
2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = totalBytesRead + bytesRead;
2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                receivedString = new String(myBytes, 0, totalBytesRead);
2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue(
2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "Did not get right byte of urgent data when two sent:"
2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + receivedString + ":" + sendString
2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + urgentData + urgentData + sendString,
2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        receivedString.equals(sendString + urgentData
2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                + urgentData + sendString));
2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.close();
2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.close();
2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                /*
2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                 * TODO : These do not currently pass on XP SP2 and Server 2003
2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                 */
2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (!platform.startsWith("Windows")) {
2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // now test the case were we send turn the OOBInline on/off
2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theAddress = new InetSocketAddress(InetAddress
2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            .getLocalHost(), Support_PortManager.getNextPort());
2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket = new Socket();
2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    serverSocket = new ServerSocket();
2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    serverSocket.bind(theAddress);
2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.connect(theAddress);
2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    servSock = serverSocket.accept();
2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theInput = theSocket.getInputStream();
2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput = servSock.getOutputStream();
2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the regular data
2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sendString = new String("Test - Urgent Data");
2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the urgent data which should be received
2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.setOOBInline(true);
2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    servSock.sendUrgentData(urgentData.getBytes()[0]);
2797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Thread.sleep(1000);
2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = 0;
2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes = new byte[100];
2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    while (theInput.available() > 0) {
2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        int bytesRead = theInput.read(myBytes, totalBytesRead,
2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                myBytes.length - totalBytesRead);
2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        totalBytesRead = totalBytesRead + bytesRead;
2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    receivedString = new String(myBytes, 0, totalBytesRead);
2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    assertTrue(
2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            "Did not get urgent data when turning on/off(1):"
2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    + receivedString + ":" + sendString
2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    + urgentData + sendString, receivedString
2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    .equals(sendString + urgentData
2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                            + sendString));
2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the regular data
2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sendString = new String("Test - Urgent Data");
2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the urgent data which should not be received
2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.setOOBInline(false);
2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    servSock.sendUrgentData(urgentData.getBytes()[0]);
2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send trailing data
2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Thread.sleep(1000);
2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = 0;
2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes = new byte[100];
2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    while (theInput.available() > 0) {
2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        int bytesRead = theInput.read(myBytes, totalBytesRead,
2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                myBytes.length - totalBytesRead);
2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        totalBytesRead = totalBytesRead + bytesRead;
2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    receivedString = new String(myBytes, 0, totalBytesRead);
2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //assertTrue(
2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //        "Got unexpected data data when turning on/off(2):"
2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + receivedString + ":" + sendString
2846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //               + sendString, receivedString
2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                .equals(sendString + sendString));
2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // now turn back on and get data. Here we also
2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // get the previously sent byte of urgent data as it is
2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // still in the urgent buffer
2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the regular data
2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    sendString = new String("Test - Urgent Data");
2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // send the urgent data which should be received again
2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.setOOBInline(true);
2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    servSock.sendUrgentData(urgentData.getBytes()[0]);
2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.write(sendString.getBytes());
2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theOutput.flush();
2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Thread.sleep(1000);
2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = 0;
2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    myBytes = new byte[100];
2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    while (theInput.available() > 0) {
2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        int bytesRead = theInput.read(myBytes, totalBytesRead,
2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                myBytes.length - totalBytesRead);
2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        totalBytesRead = totalBytesRead + bytesRead;
2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    receivedString = new String(myBytes, 0, totalBytesRead);
2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // depending on the platform we may get the previously sent
2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // urgent data or not (examples windows-yes, Linux-no).
2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // So accept either so long as we get the urgent data from
2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    // when it was on.
2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //assertTrue(
2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //        "Did not get urgent data when turning on/off(3) GOT:"
2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + receivedString + ":Expected" + urgentData
2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + sendString + urgentData + sendString
2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + ":OR:" + sendString + urgentData
2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + sendString,
2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //        (receivedString.equals(urgentData + sendString
2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                + urgentData + sendString) || receivedString
2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                .equals(sendString + urgentData
2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    //                        + sendString)));
2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    theSocket.close();
2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    serverSocket.close();
2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // now test the case where there is only urgent data
2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theAddress = new InetSocketAddress(InetAddress.getLocalHost(),
2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        Support_PortManager.getNextPort());
2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket = new Socket();
2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket = new ServerSocket();
2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                serverSocket.bind(theAddress);
2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.connect(theAddress);
2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock = serverSocket.accept();
2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theInput = theSocket.getInputStream();
2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theOutput = servSock.getOutputStream();
2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // send the urgent data which should not be received.
2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                theSocket.setOOBInline(true);
2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                servSock.sendUrgentData(urgentData.getBytes()[0]);
2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Thread.sleep(1000);
2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                totalBytesRead = 0;
2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                myBytes = new byte[100];
2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                while (theInput.available() > 0) {
2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    int bytesRead = theInput.read(myBytes, totalBytesRead,
2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            myBytes.length - totalBytesRead);
2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    totalBytesRead = totalBytesRead + bytesRead;
2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                receivedString = new String(myBytes, 0, totalBytesRead);
2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue("Did not get urgent data only urgent data sent:"
2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + receivedString + ":" + urgentData, receivedString
2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        .equals(urgentData));
2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // for platforms that do not support urgent data we expect an
2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // exception. For the others report an error.
2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // TODO : Need to introduce a better test for the exception
2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // so that the failure only occurs on platforms that support
2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // urgent data
2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("Platform:" + platform
2932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + ": Got exception during sendUrgent data tests"
2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + e.toString());
2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Socket theSocket = new Socket();
2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.close();
2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            theSocket.sendUrgentData(0);
2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was not thrown.");
2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IOException ioe) {
2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
2948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#setPerformancePreference()
2949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "setPerformancePreferences",
2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class, int.class, int.class}
2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_setPerformancePreference_Int_Int_Int() throws Exception {
2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket theSocket = new Socket();
2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        theSocket.setPerformancePreferences(1, 1, 1);
2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.net.Socket#Socket(Proxy)
2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.Proxy.class}
2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_net_Proxy_Exception() {
2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress addr1 = InetSocketAddress.createUnresolved("127.0.0.1",
2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                80);
2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketAddress addr2 = new InetSocketAddress("localhost", 80);
2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Proxy proxy1 = new Proxy(Proxy.Type.HTTP, addr1);
2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // IllegalArgumentException test
2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(proxy1);
2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw IllegalArgumentException");
2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalArgumentException e) {
2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Proxy proxy2 = new Proxy(Proxy.Type.SOCKS, addr1);
2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // should not throw any exception
2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Socket(proxy2);
2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Socket(Proxy.NO_PROXY);
2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // SecurityException test
2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager originalSecurityManager = System.getSecurityManager();
2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(new MockSecurityManager());
2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.err
2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    .println("No permission to setSecurityManager, security related test in test_ConstructorLjava_net_Proxy_Security is ignored");
2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Proxy proxy3 = new Proxy(Proxy.Type.SOCKS, addr1);
3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Proxy proxy4 = new Proxy(Proxy.Type.SOCKS, addr2);
3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new Socket(proxy3);
3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw SecurityException");
3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // expected
3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new Socket(proxy4);
3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("should throw SecurityException");
3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (SecurityException e) {
3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // expected
3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(originalSecurityManager);
3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager oldSm = System.getSecurityManager();
3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(sm);
3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket(InetAddress.getLocalHost(), 0, true);
3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException should be thrown.");
3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (UnknownHostException e) {
3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("UnknownHostException was thrown.");
3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IOException was thrown.");
3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(oldSm);
3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Socket((Proxy) null);
3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalArgumentException was not thrown.");
3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IllegalArgumentException iae) {
3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
3046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "SocketException depends on the underlying protocol.",
3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "Socket",
3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {SocketImpl.class}
3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLSocketImpl() {
3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MockSocketImpl msi = new MockSocketImpl();
3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new TestSocket(msi);
3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException e) {
3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SocketException was thrown.");
3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#connect(SocketAddress) try an unknownhost
3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL,
3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "UnknownHostException checking only.",
3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "connect",
3066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class, int.class}
3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_connect_unknownhost() throws Exception {
3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = new Socket();
3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.connect(new InetSocketAddress("unknownhost", 12345));
3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw UnknownHostException");
3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (UnknownHostException e) {
3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#connect(SocketAddress) try an unknownhost created by
3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        createUnresolved()
3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL,
3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "UnknownHostException checking only.",
3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "connect",
3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class, int.class}
3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_connect_unresolved_unknown() throws Exception {
3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = new Socket();
3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.connect(InetSocketAddress.createUnresolved("unknownhost",
3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    12345));
3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw UnknownHostException");
3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (UnknownHostException e) {
3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#connect(SocketAddress) try a known host created by
3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *        createUnresolved()
3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL,
3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "UnknownHostException checking only.",
3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "connect",
3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.net.SocketAddress.class, int.class}
3108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_connect_unresolved() throws Exception {
3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = new Socket();
3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.connect(InetSocketAddress.createUnresolved(
3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_Configuration.SocksServerTestHost,
3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_Configuration.SocksServerTestPort));
3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Should throw UnknownHostException");
3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (UnknownHostException e) {
3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#getOutputStream()
3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "SocketException, IllegalBlockingModeException checking.",
3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "getOutputStream",
3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getOutputStream_shutdownOutput() throws Exception {
3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-873
3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ServerSocket ss = new ServerSocket(0);
3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket s = new Socket("127.0.0.1", ss.getLocalPort());
3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ss.accept();
3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.shutdownOutput();
3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.getOutputStream();
3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SocketException");
3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.close();
3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SocketChannel channel = SocketChannel.open(
3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new InetSocketAddress(ss.getInetAddress(), ss.getLocalPort()));
3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        channel.configureBlocking(false);
3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ss.accept();
3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket socket = channel.socket();
3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        OutputStream out = null;
3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            out = socket.getOutputStream();
3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            out.write(1);
3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IllegalBlockingModeException was not thrown.");
3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch(IllegalBlockingModeException ibme) {
3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //expected
3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if(out != null) out.close();
3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            socket.close();
3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            channel.close();
3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#shutdownInput()
3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests Socket#shutdownOutput()
3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.ADDITIONAL,
3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Regression test.",
3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "shutdownInput",
3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_shutdownInputOutput_twice() throws Exception {
3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // regression test for Harmony-2944
3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Socket s = new Socket("0.0.0.0", 0, false);
3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.shutdownInput();
3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.shutdownInput();
3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SocketException");
3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException se) {
3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        s.shutdownOutput();
3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            s.shutdownOutput();
3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("should throw SocketException");
3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SocketException se) {
3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is called before a test is executed.
3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws Exception
3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method is called after a test is executed.
3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void tearDown() {
3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (s != null)
3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                s.close();
3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (ss != null)
3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ss.close();
3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (t != null)
3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                t.interrupt();
3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception e) {
3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class MockSecurityManager extends SecurityManager {
3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkConnect(String host, int port) {
3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ("127.0.0.1".equals(host)) {
3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException("permission is not allowed");
3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void checkPermission(Permission permission) {
3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected int startServer(String name) {
3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int portNumber = Support_PortManager.getNextPort();
3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ss = new ServerSocket(portNumber, 5);
3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail(name + ": " + e);
3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return ss.getLocalPort();
3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class MockSocketImpl extends SocketImpl {
3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MockSocketImpl() {
3259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
3260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void accept(SocketImpl arg0) throws IOException {
3264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected int available() throws IOException {
3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return 0;
3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void bind(InetAddress arg0, int arg1) throws IOException {
3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void close() throws IOException {
3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void connect(String arg0, int arg1) throws IOException {
3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void connect(InetAddress arg0, int arg1) throws IOException {
3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void connect(SocketAddress arg0, int arg1) throws IOException {
3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void create(boolean arg0) throws IOException {
3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected InputStream getInputStream() throws IOException {
3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected OutputStream getOutputStream() throws IOException {
3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void listen(int arg0) throws IOException {
3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected void sendUrgentData(int arg0) throws IOException {
3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Object getOption(int arg0) throws SocketException {
3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setOption(int arg0, Object arg1) throws SocketException {
3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // TODO Auto-generated method stub
3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
3347