1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InterruptedIOException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.BindException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.DatagramPacket;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.DatagramSocket;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.DatagramSocketImpl;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.DatagramSocketImplFactory;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Inet4Address;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Inet6Address;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetAddress;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.NetworkInterface;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.PortUnreachableException;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketAddress;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketException;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.UnknownHostException;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Date;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Configuration;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_PortManager;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
415a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughespublic class DatagramSocketTest extends junit.framework.TestCase {
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    java.net.DatagramSocket ds;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    java.net.DatagramPacket dp;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    DatagramSocket sds = null;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    String retval;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    String testString = "Test String";
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    boolean interrupted;
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class DatagramServer extends Thread {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public DatagramSocket ms;
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean running = true;
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public volatile byte[] rbuf = new byte[512];
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        volatile DatagramPacket rdp = null;
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void run() {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                while (running) {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ms.receive(rdp);
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // echo the packet back
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ms.send(rdp);
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (java.io.InterruptedIOException e) {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        Thread.yield();
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ;
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ;
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (java.io.IOException e) {
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                System.out.println("DatagramServer server failed: " + e);
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } finally {
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ms.close();
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void stopServer() {
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            running = false;
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public DatagramServer(int aPort, InetAddress address)
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throws IOException {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            rbuf = new byte[512];
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            rbuf[0] = -1;
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            rdp = new DatagramPacket(rbuf, rbuf.length);
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ms = new DatagramSocket(aPort, address);
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ms.setSoTimeout(2000);
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#DatagramSocket()
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_Constructor() throws SocketException {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new DatagramSocket();
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#DatagramSocket(int)
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorI() throws SocketException {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(0);
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#DatagramSocket(int, java.net.InetAddress)
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorILjava_net_InetAddress() throws IOException {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(0, InetAddress.getLocalHost());
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Created socket with incorrect port", ds.getLocalPort() != 0);
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Created socket with incorrect address", InetAddress
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalHost(), ds.getLocalAddress());
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#close()
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_close() throws UnknownHostException, SocketException {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(0);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket dp = new DatagramPacket("Test String".getBytes(), 11,
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress.getLocalHost(), 0);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(dp);
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Data sent after close");
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_connectLjava_net_InetAddressI() throws Exception {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress inetAddress = InetAddress.getLocalHost();
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(inetAddress, 0);
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Incorrect InetAddress", inetAddress, ds.getInetAddress());
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Incorrect Port", 0, ds.getPort());
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
148249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds = new java.net.DatagramSocket();
149249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        inetAddress = InetAddress.getByName("FE80:0000:0000:0000:020D:60FF:FE0F:A776%4");
150249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
151249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds.connect(inetAddress, portNumber);
152249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        assertTrue("Incorrect InetAddress", ds.getInetAddress().equals(inetAddress));
153249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        assertTrue("Incorrect Port", ds.getPort() == portNumber);
154249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds.disconnect();
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Create a connected datagram socket to test
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // PlainDatagramSocketImpl.peek()
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress localHost = InetAddress.getLocalHost();
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket();
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = ds.getLocalPort();
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, port);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket send = new DatagramPacket(new byte[10], 10, localHost,
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                port);
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket receive = new DatagramPacket(new byte[20], 20);
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong size: " + receive.getLength(),
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength() == 10);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong receiver", receive.getAddress().equals(localHost));
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class DatagramServer extends Thread {
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public DatagramSocket ms;
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean running = true;
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public byte[] rbuf = new byte[512];
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket rdp = null;
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void run() {
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    while (running) {
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            ms.receive(rdp);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            // echo the packet back
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            ms.send(rdp);
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (java.io.InterruptedIOException e) {
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            Thread.yield();
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ;
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ;
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (java.io.IOException e) {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    System.out.println("Multicast server failed: " + e);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } finally {
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ms.close();
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void stopServer() {
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                running = false;
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public DatagramServer(int aPort, InetAddress address)
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throws java.io.IOException {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                rbuf = new byte[512];
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                rbuf[0] = -1;
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                rdp = new DatagramPacket(rbuf, rbuf.length);
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ms = new DatagramSocket(aPort, address);
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ms.setSoTimeout(2000);
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we get the PortUnreachable exception if we try to
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send a dgram to a server that is not running and then do a recv
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            inetAddress = InetAddress.getLocalHost();
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            portNumber = Support_PortManager.getNextPortForUDP();
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(inetAddress, portNumber);
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            send = new DatagramPacket(new byte[10], 10);
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(send);
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            receive = new DatagramPacket(new byte[20], 20);
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.setSoTimeout(10000);
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.receive(receive);
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No PortUnreachableException when connected at native level on recv ");
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (PortUnreachableException e) {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can send/receive with datagram sockets connected at
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the native level
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramServer server = null;
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int serverPortNumber = ports[0];
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds2 = new DatagramSocket(ports[2]);
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber);
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final byte[] sendBytes = { 'T', 'e', 's', 't', 0 };
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length);
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong size data received: " + receive.getLength(), receive
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLength() == sendBytes.length);
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong data received"
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong receiver:" + receive.getAddress() + ":" + localHost,
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getAddress().equals(localHost));
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can disconnect
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            inetAddress = InetAddress.getLocalHost();
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            portNumber = Support_PortManager.getNextPortForUDP();
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(inetAddress, portNumber);
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.disconnect();
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (PortUnreachableException e) {
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that once connected we cannot send to another address
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            inetAddress = InetAddress.getLocalHost();
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            portNumber = Support_PortManager.getNextPortForUDP();
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(inetAddress, portNumber);
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            send = new DatagramPacket(new byte[10], 10, inetAddress,
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    portNumber + 1);
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(send);
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No Exception when trying to send to a different address on a connected socket ");
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect, then disconnect, then connect then
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send/recv
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber + 1);
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber);
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length);
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong size data received: "
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getLength(), receive.getLength() == sendBytes.length);
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong data received"
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong receiver:"
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getAddress() + ":" + localHost, receive.getAddress()
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(localHost));
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect/disconnect then send/recv to any address
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber + 1);
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length, localHost,
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                serverPortNumber);
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong size data received: "
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getLength(), receive.getLength() == sendBytes.length);
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong data received"
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong receiver:"
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getAddress() + ":" + localHost, receive.getAddress()
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(localHost));
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect on an allready connected socket and then
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send/recv
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber + 1);
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(localHost, serverPortNumber);
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong size data received: "
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getLength(), receive.getLength() == sendBytes.length);
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong data received"
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong receiver:" + receive.getAddress()
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + ":" + localHost, receive.getAddress().equals(localHost));
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test for when we fail to connect at the native level. Even though we
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // fail at the native level there is no way to return an exception so
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // there should be no exception
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new java.net.DatagramSocket();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] addressBytes = { 0, 0, 0, 0 };
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        inetAddress = InetAddress.getByAddress(addressBytes);
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        portNumber = Support_PortManager.getNextPortForUDP();
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(inetAddress, portNumber);
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if ("true".equals(System.getProperty("run.ipv6tests"))) {
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .println("Running test_connectLjava_net_InetAddressI(DatagramSocketTest) with IPv6 address");
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte[] addressTestBytes = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    0, 0, 0 };
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            inetAddress = InetAddress.getByAddress(addressTestBytes);
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            portNumber = Support_PortManager.getNextPortForUDP();
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(inetAddress, portNumber);
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_disconnect() throws Exception {
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress inetAddress = InetAddress.getLocalHost();
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(inetAddress, 0);
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Incorrect InetAddress", ds.getInetAddress());
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Incorrect Port", -1, ds.getPort());
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
443249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds = new DatagramSocket();
444249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        inetAddress = InetAddress.getByName("FE80:0000:0000:0000:020D:60FF:FE0F:A776%4");
445249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds.connect(inetAddress, 0);
446249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        ds.disconnect();
447249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        assertNull("Incorrect InetAddress", ds.getInetAddress());
448249c40b94b9f5c8944a44be8e30aa01a90f1cf48Elliott Hughes        assertEquals("Incorrect Port", -1, ds.getPort());
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#getInetAddress()
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getInetAddress() {
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Used to test", true);
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getLocalAddress() throws Exception {
4596067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        // Test for method java.net.InetAddress
4606067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        // java.net.DatagramSocket.getLocalAddress()
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
4626067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        InetAddress local = InetAddress.getLocalHost();
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new java.net.DatagramSocket(portNumber, local);
4646067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertEquals(InetAddress.getByName(InetAddress.getLocalHost().getHostName()), ds.getLocalAddress());
4656067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes
4666067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        // now check behavior when the ANY address is returned
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket s = new DatagramSocket(0);
4686067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertTrue("ANY address not IPv6: " + s.getLocalSocketAddress(), s.getLocalAddress() instanceof Inet6Address);
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s.close();
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#getLocalPort()
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getLocalPort() throws SocketException {
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned incorrect port", ds.getLocalPort() != 0);
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#getPort()
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPort() throws IOException {
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket();
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Expected -1 for remote port as not connected", -1,
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.getPort());
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Now connect the socket and validate that we get the right port
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int portNumber = 49152; // any valid port, even if it is unreachable
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(InetAddress.getLocalHost(), portNumber);
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("getPort returned wrong value", portNumber, theSocket
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPort());
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
4955a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getReceiveBufferSize() throws Exception {
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
4975a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setReceiveBufferSize(130);
4985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("Incorrect buffer size", ds.getReceiveBufferSize() >= 130);
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
5015a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getSendBufferSize() throws Exception {
5025a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
5035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds = new java.net.DatagramSocket(portNumber);
5045a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setSendBufferSize(134);
5055a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("Incorrect buffer size", ds.getSendBufferSize() >= 134);
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
5085a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getSoTimeout() throws Exception {
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
5105a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setSoTimeout(100);
5115a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertEquals("Returned incorrect timeout", 100, ds.getSoTimeout());
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_receiveLjava_net_DatagramPacket() throws IOException {
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Test for method void
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // java.net.DatagramSocket.receive(java.net.DatagramPacket)
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive_oversize_java_net_DatagramPacket();
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int[] ports = Support_PortManager.getNextPortsForUDP(2);
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int portNumber = ports[0];
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class TestDGRcv implements Runnable {
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void run() {
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress localHost = null;
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    localHost = InetAddress.getLocalHost();
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(1000);
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DatagramSocket sds = new DatagramSocket(ports[1]);
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DatagramPacket rdp = new DatagramPacket("Test String"
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getBytes(), 11, localHost, portNumber);
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.send(rdp);
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.close();
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    System.err.println("host " + localHost + " port "
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + portNumber + " failed to send data: " + e);
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    e.printStackTrace();
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Thread(new TestDGRcv(), "DGSender").start();
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket(portNumber);
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.setSoTimeout(6000);
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte rbuf[] = new byte[1000];
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length);
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.receive(rdp);
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Send/Receive failed to return correct data: "
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + new String(rbuf, 0, 11), new String(rbuf, 0, 11)
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals("Test String"));
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            interrupted = false;
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final DatagramSocket ds = new DatagramSocket();
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.setSoTimeout(12000);
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Runnable runnable = new Runnable() {
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ds.receive(new DatagramPacket(new byte[1], 1));
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InterruptedIOException e) {
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        interrupted = true;
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException e) {
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread = new Thread(runnable, "DatagramSocket.receive1");
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread.start();
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                do {
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } while (!thread.isAlive());
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InterruptedException e) {
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int c = 0;
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            do {
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InterruptedException e) {
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (interrupted) {
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("received interrupt");
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (++c > 4) {
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("read call did not exit");
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } while (thread.isAlive());
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            interrupted = false;
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int[] ports1 = Support_PortManager.getNextPortsForUDP(2);
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final int portNum = ports[0];
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final DatagramSocket ds2 = new DatagramSocket(ports[1]);
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds2.setSoTimeout(12000);
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Runnable runnable2 = new Runnable() {
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ds2.receive(new DatagramPacket(new byte[1], 1,
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getLocalHost(), portNum));
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InterruptedIOException e) {
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        interrupted = true;
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException e) {
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread2 = new Thread(runnable2, "DatagramSocket.receive2");
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread2.start();
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                do {
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } while (!thread2.isAlive());
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InterruptedException e) {
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds2.close();
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int c2 = 0;
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            do {
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InterruptedException e) {
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (interrupted) {
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("receive2 was interrupted");
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (++c2 > 4) {
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("read2 call did not exit");
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } while (thread2.isAlive());
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            interrupted = false;
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramSocket ds3 = new DatagramSocket();
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds3.setSoTimeout(500);
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Date start = new Date();
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ds3.receive(new DatagramPacket(new byte[1], 1));
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InterruptedIOException e) {
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                interrupted = true;
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds3.close();
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("receive not interrupted", interrupted);
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int delay = (int) (new Date().getTime() - start.getTime());
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("timeout too soon: " + delay, delay >= 490);
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected IOException : " + e.getMessage());
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests receive() method in various combinations with
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * DatagramPacket#getLength() and DatagramPacket#getLength(). This is
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * regression test for HARMONY-2276.
656fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *             if some I/O error occured
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // public void test2276() throws IOException {
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // final String ADDRESS = "239.255.2.3";
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // final int PORT = Support_PortManager.getNextPortForUDP();
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // InetAddress group = InetAddress.getByName(ADDRESS);
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // MulticastSocket socket = new MulticastSocket(PORT);
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // byte[] recvData = new byte[100];
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // DatagramPacket recvDatagram = new DatagramPacket(recvData,
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvData.length);
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // String message = "Hello, world!";
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // String longerMessage = message + " again.";
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // String veryLongMessage = longerMessage + " Forever!";
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.joinGroup(group);
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.setSoTimeout(5000); // prevent eternal block in
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // socket.receive()
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // send & recieve packet
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // byte[] sendData = message.getBytes();
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // DatagramPacket sendDatagram = new DatagramPacket(sendData, 0,
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendData.length, group, PORT);
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.send(sendDatagram);
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.receive(recvDatagram);
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // String recvMessage = new String(recvData, 0, recvDatagram.getLength());
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // assertEquals(message, recvMessage);
684fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    //
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // send & receive longer packet
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendData = longerMessage.getBytes();
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendDatagram = new DatagramPacket(sendData, 0, sendData.length,
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // group, PORT);
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.send(sendDatagram);
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.receive(recvDatagram);
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvMessage = new String(recvData, 0, recvDatagram.getLength());
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // assertEquals(longerMessage, recvMessage);
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // tricky case, added to test compatibility with RI;
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // depends on the previous test case
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendData = veryLongMessage.getBytes();
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendDatagram = new DatagramPacket(sendData, 0, sendData.length, group,
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // PORT);
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.send(sendDatagram);
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvDatagram.setLength(recvDatagram.getLength()); // !!!
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.receive(recvDatagram);
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvMessage = new String(recvData, 0, recvDatagram.getLength());
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // assertEquals(longerMessage, recvMessage);
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // // tests if received packet is truncated after length was set to 1
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendData = message.getBytes();
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // sendDatagram = new DatagramPacket(sendData, 0, sendData.length,
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // group, PORT);
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.send(sendDatagram);
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvDatagram.setLength(1);
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.receive(recvDatagram);
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // assertEquals("Received message was not truncated", 1,
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // recvDatagram.getLength());
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // assertSame("Received message is invalid", sendData[0], recvData[0]);
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.leaveGroup(group);
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // socket.close();
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // }
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#send(java.net.DatagramPacket)
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_sendLjava_net_DatagramPacket() throws Exception {
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Test for method void
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // java.net.DatagramSocket.send(java.net.DatagramPacket)
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(2);
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int portNumber = ports[0];
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class TestDGSend implements Runnable {
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread pThread;
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public TestDGSend(Thread t) {
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                pThread = t;
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void run() {
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    byte[] rbuf = new byte[1000];
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds = new DatagramSocket(portNumber);
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DatagramPacket sdp = new DatagramPacket(rbuf, rbuf.length);
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.setSoTimeout(6000);
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.receive(sdp);
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    retval = new String(rbuf, 0, testString.length());
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    pThread.interrupt();
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (java.io.InterruptedIOException e) {
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    System.out.println("Recv operation timed out");
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    pThread.interrupt();
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ds.close();
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    return;
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    System.out
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .println("Failed to establish Dgram server: " + e);
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Thread(new TestDGSend(Thread.currentThread()), "DGServer")
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .start();
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket(ports[1]);
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            dp = new DatagramPacket(testString.getBytes(), testString.length(),
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    InetAddress.getLocalHost(), portNumber);
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Wait to allow send to occur
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Thread.sleep(500);
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ds.send(dp);
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Thread.sleep(5000);
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InterruptedException e) {
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ds.close();
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Incorrect data sent: " + retval, retval
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .equals(testString));
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-1118
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class testDatagramSocket extends DatagramSocket {
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public testDatagramSocket(DatagramSocketImpl impl) {
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                super(impl);
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class testDatagramSocketImpl extends DatagramSocketImpl {
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void create() throws SocketException {
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void bind(int arg0, InetAddress arg1)
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throws SocketException {
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void send(DatagramPacket arg0) throws IOException {
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected int peek(InetAddress arg0) throws IOException {
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return 0;
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected int peekData(DatagramPacket arg0) throws IOException {
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return 0;
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void receive(DatagramPacket arg0) throws IOException {
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void setTTL(byte arg0) throws IOException {
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected byte getTTL() throws IOException {
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return 0;
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void setTimeToLive(int arg0) throws IOException {
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected int getTimeToLive() throws IOException {
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return 0;
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void join(InetAddress arg0) throws IOException {
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void leave(InetAddress arg0) throws IOException {
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void joinGroup(SocketAddress arg0, NetworkInterface arg1)
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throws IOException {
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void leaveGroup(SocketAddress arg0, NetworkInterface arg1)
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throws IOException {
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            protected void close() {
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setOption(int arg0, Object arg1) throws SocketException {
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public Object getOption(int arg0) throws SocketException {
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return null;
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-2938
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress i = InetAddress.getByName("127.0.0.1");
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket d = new DatagramSocket(0, i);
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            d.send(new DatagramPacket(new byte[] { 1 }, 1));
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NPE.");
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected;
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            d.close();
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-6413
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetSocketAddress addr = InetSocketAddress.createUnresolved(
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "localhost", 0);
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket dp = new DatagramPacket(new byte[272], 3, addr);
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IllegalArgumentException");
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
864fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * If the InetAddress of DatagramPacket is null, DatagramSocket.send(DatagramPacket)
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * should throw NullPointer Exception.
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#send(java.net.DatagramPacket)
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_sendLjava_net_DatagramPacket2() throws IOException {
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int udp_port = 20000;
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int send_port = 23000;
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket udpSocket = new DatagramSocket(udp_port);
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] data = {65};
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket sendPacket = new DatagramPacket(data, data.length, null, send_port);
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            udpSocket.send(sendPacket);
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw SocketException");
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes          // Expected
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            udpSocket.close();
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
886fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
8875a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_setSendBufferSizeI() throws Exception {
8885a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
8895a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds = new java.net.DatagramSocket(portNumber);
8905a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setSendBufferSize(134);
8915a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("Incorrect buffer size", ds.getSendBufferSize() >= 134);
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
8945a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_setReceiveBufferSizeI() throws Exception {
8955a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
8965a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds = new java.net.DatagramSocket(portNumber);
8975a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setReceiveBufferSize(130);
8985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("Incorrect buffer size", ds.getReceiveBufferSize() >= 130);
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
9015a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_setSoTimeoutI() throws Exception {
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket();
9035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        ds.setSoTimeout(100);
9045a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("Set incorrect timeout", ds.getSoTimeout() >= 100);
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_net_DatagramSocketImpl() {
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class SimpleTestDatagramSocket extends DatagramSocket {
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SimpleTestDatagramSocket(DatagramSocketImpl impl) {
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                super(impl);
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new SimpleTestDatagramSocket((DatagramSocketImpl) null);
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("exception expected");
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ex) {
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#DatagramSocket(java.net.SocketAddress)
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_net_SocketAddress() throws Exception {
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class UnsupportedSocketAddress extends SocketAddress {
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedSocketAddress() {
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(new InetSocketAddress(
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress.getLocalHost(), 0));
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(ds.getBroadcast());
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Created socket with incorrect port", ds.getLocalPort() != 0);
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Created socket with incorrect address", InetAddress
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalHost(), ds.getLocalAddress());
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket(new UnsupportedSocketAddress());
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No exception when constructing datagramSocket with unsupported SocketAddress type");
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression for HARMONY-894
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket((SocketAddress) null);
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(ds.getBroadcast());
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#bind(java.net.SocketAddress)
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_bindLjava_net_SocketAddress() throws Exception {
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class mySocketAddress extends SocketAddress {
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public mySocketAddress() {
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramServer server = null;
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now create a socket that is not bound and then bind it
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int portNumber = ports[0];
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int serverPortNumber = ports[1];
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(new InetSocketAddress(
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress.getLocalHost(), portNumber));
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that the localSocketAddress reflects the address we
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // bound to
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Local address not correct after bind:"
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + theSocket.getLocalSocketAddress().toString()
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "Expected: "
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + (new InetSocketAddress(InetAddress.getLocalHost(),
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                portNumber)).toString(), theSocket
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getLocalSocketAddress().equals(
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                new InetSocketAddress(InetAddress
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .getLocalHost(), portNumber)));
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now make sure that datagrams sent from this socket appear to come
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // from the address we bound to
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress localHost = InetAddress.getLocalHost();
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        portNumber = ports[2];
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(null);
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.bind(new InetSocketAddress(localHost, portNumber));
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber));
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] sendBytes = { 'T', 'e', 's', 't', 0 };
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket send = new DatagramPacket(sendBytes, sendBytes.length);
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Address in packet sent does not match address bound to:"
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + server.rdp.getAddress() + ":" + server.rdp.getPort() + ":"
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + localHost + ":" + portNumber, (server.rdp.getAddress()
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(localHost))
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                && (server.rdp.getPort() == portNumber));
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate if we pass in null that it picks an address for us and
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // all is ok
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.bind(null);
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull("Bind with null did not work", theSocket
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalSocketAddress());
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now check the error conditions
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Address we cannot bind to
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket.bind(new InetSocketAddress(InetAddress
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getByAddress(Support_Configuration.nonLocalAddressBytes),
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Support_PortManager.getNextPortForUDP()));
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No exception when binding to bad address");
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SocketException ex) {
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Address that we have allready bound to
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(2);
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket2 = new DatagramSocket(ports[0]);
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetSocketAddress theAddress = new InetSocketAddress(InetAddress
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getLocalHost(), ports[1]);
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket.bind(theAddress);
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket2.bind(theAddress);
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No exception binding to address that is not available");
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (SocketException ex) {
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket2.close();
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // unsupported SocketAddress subclass
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket.bind(new mySocketAddress());
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No exception when binding using unsupported SocketAddress subclass");
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ex) {
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#connect(java.net.SocketAddress)
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_connectLjava_net_SocketAddress() throws Exception {
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we get the PortUnreachable exception if we try to
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send a dgram to a server that is not running and then do a recv
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetAddress inetAddress = InetAddress.getLocalHost();
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int portNumber = Support_PortManager.getNextPortForUDP();
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(new InetSocketAddress(inetAddress, portNumber));
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket send = new DatagramPacket(new byte[10], 10);
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(send);
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket receive = new DatagramPacket(new byte[20], 20);
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.setSoTimeout(10000);
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.receive(receive);
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No PortUnreachableException when connected at native level on recv ");
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (PortUnreachableException e) {
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can send/receive with datagram sockets connected at
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the native level
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramServer server = null;
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int serverPortNumber = ports[0];
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress localHost = InetAddress.getLocalHost();
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds = new DatagramSocket(ports[1]);
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket ds2 = new DatagramSocket(ports[2]);
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = ds.getLocalPort();
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber));
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final byte[] sendBytes = { 'T', 'e', 's', 't', 0 };
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket send = new DatagramPacket(sendBytes, sendBytes.length);
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket receive = new DatagramPacket(new byte[20], 20);
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong size data received: " + receive.getLength(), receive
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLength() == sendBytes.length);
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong data received"
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Wrong receiver:" + receive.getAddress() + ":" + localHost,
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getAddress().equals(localHost));
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can disconnect
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetAddress inetAddress = InetAddress.getLocalHost();
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int portNumber = Support_PortManager.getNextPortForUDP();
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(new InetSocketAddress(inetAddress, portNumber));
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.disconnect();
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (PortUnreachableException e) {
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that once connected we cannot send to another address
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetAddress inetAddress = InetAddress.getLocalHost();
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int portNumber = Support_PortManager.getNextPortForUDP();
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(new InetSocketAddress(inetAddress, portNumber));
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket senddp = new DatagramPacket(new byte[10], 10,
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    inetAddress, portNumber + 1);
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(senddp);
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No Exception when trying to send to a different address on a connected socket ");
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect, then disconnect, then connect then
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send/recv
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1));
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber));
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length);
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong size data received: "
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getLength(), receive.getLength() == sendBytes.length);
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong data received"
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect/connect - Wrong receiver:"
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getAddress() + ":" + localHost, receive.getAddress()
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(localHost));
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect/disconnect then send/recv to any address
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1));
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.disconnect();
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendBytes, sendBytes.length, localHost,
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                serverPortNumber);
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        receive = new DatagramPacket(new byte[20], 20);
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receive);
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong size data received: "
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getLength(), receive.getLength() == sendBytes.length);
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong data received"
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receive.getData(), 0, receive.getLength()) + ":"
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(sendBytes), new String(receive.getData(), 0,
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receive.getLength()).equals(new String(sendBytes)));
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/disconnect - Wrong receiver:"
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receive.getAddress() + ":" + localHost, receive.getAddress()
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(localHost));
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate that we can connect on an allready connected socket and then
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // send/recv
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = null;
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ports = Support_PortManager.getNextPortsForUDP(3);
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        serverPortNumber = ports[0];
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        localHost = InetAddress.getLocalHost();
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds = new DatagramSocket(ports[1]);
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds2 = new DatagramSocket(ports[2]);
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server = new DatagramServer(serverPortNumber, localHost);
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        server.start();
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread.sleep(1000);
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        port = ds.getLocalPort();
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1));
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.connect(new InetSocketAddress(localHost, serverPortNumber));
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] sendTestBytes = { 'T', 'e', 's', 't', 0 };
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        send = new DatagramPacket(sendTestBytes, sendTestBytes.length);
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.send(send);
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramPacket receivedp = new DatagramPacket(new byte[20], 20);
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.setSoTimeout(2000);
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.receive(receivedp);
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ds.close();
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong size data received: "
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + receivedp.getLength(),
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                receivedp.getLength() == sendTestBytes.length);
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong data received"
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + new String(receivedp.getData(), 0, receivedp.getLength())
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + ":" + new String(sendTestBytes), new String(receivedp
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getData(), 0, receivedp.getLength()).equals(new String(
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sendTestBytes)));
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("connect/connect - Wrong receiver:" + receivedp.getAddress()
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + ":" + localHost, receivedp.getAddress().equals(localHost));
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (server != null) {
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.stopServer();
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test for when we fail to connect at the native level. It seems to
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // fail for the any address so we use this. Now to be compatible we
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // don't throw the exception but eat it and then act as if we were
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // connected at the Java level.
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket();
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte[] addressBytes = { 0, 0, 0, 0 };
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetAddress inetAddress = InetAddress.getByAddress(addressBytes);
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int portNumber = Support_PortManager.getNextPortForUDP();
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InetAddress localHostIA = InetAddress.getLocalHost();
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.connect(new InetSocketAddress(inetAddress, portNumber));
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Is not connected after connect to inaddr any", ds
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .isConnected());
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte[] sendBytesArray = { 'T', 'e', 's', 't', 0 };
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket senddp = new DatagramPacket(sendBytesArray,
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sendBytesArray.length, localHostIA, portNumber);
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.send(senddp);
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No exception when trying to connect at native level with bad address (exception from send)  ");
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#isBound()
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isBound() throws Exception {
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress addr = InetAddress.getLocalHost();
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = ports[0];
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(ports[1]);
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated  not bound when it should be (1)",
1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(new InetSocketAddress(addr, port));
1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated  not bound when it should be (2)",
1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket indicated  bound when it should not be (1)",
1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // connect causes implicit bind
1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(new InetSocketAddress(addr, port));
1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated not bound when it should be (3)",
1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now test when we bind explicitely
1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetSocketAddress theLocalAddress = new InetSocketAddress(InetAddress
1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalHost(), ports[2]);
1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(null);
1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket indicated bound when it should not be (2)",
1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.bind(theLocalAddress);
1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated not bound when it should be (4)",
1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated not bound when it should be (5)",
1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isBound());
1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#isConnected()
1329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isConnected() throws Exception {
1331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetAddress addr = InetAddress.getLocalHost();
1332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(4);
1333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int port = ports[0];
1334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // base test
1336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(ports[1]);
1337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket indicated connected when it should not be",
1338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isConnected());
1339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(new InetSocketAddress(addr, port));
1340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated  not connected when it should be",
1341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isConnected());
1342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reconnect the socket and make sure we get the right answer
1344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(new InetSocketAddress(addr, ports[2]));
1345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated  not connected when it should be",
1346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isConnected());
1347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now disconnect the socket and make sure we get the right answer
1349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.disconnect();
1350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket indicated connected when it should not be",
1351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isConnected());
1352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now check behavior when socket is closed when connected
1355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(ports[3]);
1356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(new InetSocketAddress(addr, port));
1357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket indicated  not connected when it should be",
1359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.isConnected());
1360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#getRemoteSocketAddress()
1364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRemoteSocketAddress() throws Exception {
1366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
1367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int sport = ports[0];
1368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int portNumber = ports[1];
1369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket s = new DatagramSocket(new InetSocketAddress(InetAddress
1370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalHost(), portNumber));
1371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s.connect(new InetSocketAddress(InetAddress.getLocalHost(), sport));
1372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned incorrect InetSocketAddress(1):"
1373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + s.getLocalSocketAddress().toString(),
1374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                s.getRemoteSocketAddress()
1375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .equals(
1376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                new InetSocketAddress(InetAddress
1377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .getLocalHost(), sport)));
1378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s.close();
1379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now create one that is not connected and validate that we get the
1381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // right answer
1382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(null);
1383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        portNumber = ports[2];
1384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(),
1385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                portNumber));
1386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Returned incorrect InetSocketAddress -unconnected socket:"
1387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + "Expected: NULL", theSocket.getRemoteSocketAddress());
1388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now connect and validate we get the right answer
1390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(),
1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sport));
1392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned incorrect InetSocketAddress(2):"
1393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + theSocket.getRemoteSocketAddress().toString(),
1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                theSocket.getRemoteSocketAddress()
1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .equals(
1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                new InetSocketAddress(InetAddress
1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .getLocalHost(), sport)));
1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
14016067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes    public void test_getLocalSocketAddress_late_bind() throws Exception {
14026067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        // An unbound socket should return null as its local address.
14036067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        DatagramSocket theSocket = new DatagramSocket((SocketAddress) null);
14046067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertNull(theSocket.getLocalSocketAddress());
1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // now bind the socket and make sure we get the right answer
14076067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
14086067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        InetSocketAddress localAddress = new InetSocketAddress(InetAddress.getLocalHost(), portNumber);
14096067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        theSocket.bind(localAddress);
14106067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertEquals(localAddress, theSocket.getLocalSocketAddress());
1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
14126067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes    }
1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
14146067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes    public void test_getLocalSocketAddress_unbound() throws Exception {
14156067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        int portNumber = Support_PortManager.getNextPortForUDP();
14166067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        InetSocketAddress localAddress1 = new InetSocketAddress(InetAddress.getLocalHost(), portNumber);
14176067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        DatagramSocket s = new DatagramSocket(localAddress1);
14186067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertEquals(localAddress1, s.getLocalSocketAddress());
1419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s.close();
14206067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes
14216067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        InetSocketAddress remoteAddress = (InetSocketAddress) s.getRemoteSocketAddress();
14226067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        assertNull(remoteAddress);
14236067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes    }
14246067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes
14256067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes    public void test_getLocalSocketAddress_ANY() throws Exception {
14266067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        DatagramSocket s = new DatagramSocket(0);
14276067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        try {
14286067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes            assertTrue("ANY address not IPv6: " + s.getLocalSocketAddress(),
14296067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes                    ((InetSocketAddress) s.getLocalSocketAddress()).getAddress() instanceof Inet6Address);
14306067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        } finally {
14316067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes            s.close();
14326067762af2ef856d3761da07d072bf02b63f4b35Elliott Hughes        }
1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_setReuseAddressZ() throws Exception {
14365a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // test case were we set it to false
14375a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket1 = null;
14385a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket2 = null;
1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
14405a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            InetSocketAddress theAddress = new InetSocketAddress(InetAddress.getLocalHost(), Support_PortManager.getNextPortForUDP());
1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket1 = new DatagramSocket(null);
1442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket2 = new DatagramSocket(null);
14435a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1.setReuseAddress(false);
14445a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2.setReuseAddress(false);
1445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket1.bind(theAddress);
1446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theSocket2.bind(theAddress);
14475a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            fail("No exception when trying to connect to do duplicate socket bind with re-useaddr set to false");
14485a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        } catch (BindException expected) {
14495a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
14505a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket1 != null) {
14515a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1.close();
14525a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
14535a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket2 != null) {
14545a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2.close();
14555a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
1456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
14575a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // test case were we set it to true
14585a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        InetSocketAddress theAddress = new InetSocketAddress(InetAddress.getLocalHost(), Support_PortManager.getNextPortForUDP());
14595a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket1 = new DatagramSocket(null);
14605a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket2 = new DatagramSocket(null);
14615a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket1.setReuseAddress(true);
14625a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket2.setReuseAddress(true);
14635a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket1.bind(theAddress);
14645a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket2.bind(theAddress);
14655a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes
14665a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket1 != null) {
14675a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1.close();
14685a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
14695a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket2 != null) {
14705a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2.close();
1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
14735a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // test the default case which we expect to be the same on all
14745a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // platforms
1475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
14765a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theAddress = new InetSocketAddress(InetAddress.getLocalHost(),Support_PortManager.getNextPortForUDP());
14775a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1 = new DatagramSocket(null);
14785a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2 = new DatagramSocket(null);
14795a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1.bind(theAddress);
14805a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2.bind(theAddress);
14815a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            fail("No exception when trying to connect to do duplicate socket bind with re-useaddr left as default");
14825a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        } catch (BindException expected) {
14835a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
14845a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket1 != null) {
14855a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket1.close();
14865a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
14875a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        if (theSocket2 != null) {
14885a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket2.close();
1489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
14925a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getReuseAddress() throws Exception {
14935a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket = new DatagramSocket();
14945a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setReuseAddress(true);
14955a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("getReuseAddress false when it should be true", theSocket.getReuseAddress());
14965a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setReuseAddress(false);
14975a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertFalse("getReuseAddress true when it should be False", theSocket.getReuseAddress());
14985a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    }
1499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15005a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_setBroadcastZ() throws Exception {
15015a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(3);
15025a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(ports[0]);
15035a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setBroadcast(false);
15045a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        byte theBytes[] = { -1, -1, -1, -1 };
15055a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes
15065a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // validate we cannot connect to the broadcast address when
15075a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // setBroadcast is false
1508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
15095a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket.connect(new InetSocketAddress(InetAddress.getByAddress(theBytes), ports[1]));
15105a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            assertFalse("No exception when connecting to broadcast address with setBroadcast(false)", theSocket.getBroadcast());
15115a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        } catch (Exception ex) {
15125a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
1513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15145a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // now validate that we can connect to the broadcast address when
15155a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // setBroadcast is true
15165a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setBroadcast(true);
15175a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.connect(new InetSocketAddress(InetAddress.getByAddress(theBytes), ports[2]));
15185a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    }
1519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15205a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getBroadcast() throws Exception {
15215a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket = new DatagramSocket();
15225a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setBroadcast(true);
15235a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertTrue("getBroadcast false when it should be true", theSocket.getBroadcast());
15245a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setBroadcast(false);
15255a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        assertFalse("getBroadcast true when it should be False", theSocket.getBroadcast());
1526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15285a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_setTrafficClassI() throws Exception {
15295a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_LOWCOST = 0x2;
15305a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_RELIABILTY = 0x4;
15315a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_THROUGHPUT = 0x8;
15325a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_LOWDELAY = 0x10;
15335a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(2);
15345a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes
15355a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        new InetSocketAddress(InetAddress.getLocalHost(), ports[0]);
15365a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(ports[1]);
15375a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes
15385a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // validate that value set must be between 0 and 255
1539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
15405a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket.setTrafficClass(256);
15415a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            fail("No exception when traffic class set to 256");
15425a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        } catch (IllegalArgumentException e) {
1543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
15465a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            theSocket.setTrafficClass(-1);
15475a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes            fail("No exception when traffic class set to -1");
15485a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        } catch (IllegalArgumentException e) {
15495a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        }
1550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15515a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        // now validate that we can set it to some good values
15525a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setTrafficClass(IPTOS_LOWCOST);
15535a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        theSocket.setTrafficClass(IPTOS_THROUGHPUT);
15545a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    }
1555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15565a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes    public void test_getTrafficClass() throws Exception {
15575a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_LOWCOST = 0x2;
15585a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_RELIABILTY = 0x4;
15595a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_THROUGHPUT = 0x8;
15605a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int IPTOS_LOWDELAY = 0x10;
15615a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int[] ports = Support_PortManager.getNextPortsForUDP(2);
1562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15635a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        new InetSocketAddress(InetAddress.getLocalHost(), ports[0]);
15645a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        DatagramSocket theSocket = new DatagramSocket(ports[1]);
1565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15665a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        /*
15675a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes         * we cannot actually check that the values are set as if a platform
15685a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes         * does not support the option then it may come back unset even
15695a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes         * though we set it so just get the value to make sure we can get it
15705a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes         */
15715a4ecd15a879353ab17c7910a445ab25c6462484Elliott Hughes        int trafficClass = theSocket.getTrafficClass();
1572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isClosed() throws Exception {
1575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        DatagramSocket theSocket = new DatagramSocket();
1576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // validate isClosed returns expected values
1578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket should indicate it is not closed(1):", theSocket
1579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isClosed());
1580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket should indicate it is not closed(1):", theSocket
1582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isClosed());
1583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InetSocketAddress theAddress = new InetSocketAddress(InetAddress
1585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getLocalHost(), Support_PortManager.getNextPortForUDP());
1586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket = new DatagramSocket(theAddress);
1587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket should indicate it is not closed(2):", theSocket
1588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isClosed());
1589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theSocket.close();
1590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Socket should indicate it is not closed(2):", theSocket
1591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .isClosed());
1592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.DatagramSocket#getChannel()
1596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getChannel() throws SocketException {
1598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(new DatagramSocket().getChannel());
1599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Sets up the fixture, for example, open a network connection. This method
1603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * is called before a test is executed.
1604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() {
1606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        retval = "Bogus retval";
1607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tears down the fixture, for example, close a network connection. This
1611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method is called after a test is executed.
1612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() {
1614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sds.close();
1617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
1618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void receive_oversize_java_net_DatagramPacket() {
1622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int[] ports = Support_PortManager.getNextPortsForUDP(2);
1623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int portNumber = ports[0];
1624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        class TestDGRcvOver implements Runnable {
1626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void run() {
1627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress localHost = null;
1628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    localHost = InetAddress.getLocalHost();
1630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(1000);
1631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DatagramSocket sds = new DatagramSocket(ports[1]);
1632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    DatagramPacket rdp = new DatagramPacket("0123456789"
1633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getBytes(), 10, localHost, portNumber);
1634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.send(rdp);
1635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sds.close();
1636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
1637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    System.err.println("host " + localHost + " port "
1638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + portNumber + " failed to send oversize data: "
1639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + e);
1640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    e.printStackTrace();
1641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Thread(new TestDGRcvOver(), "DGSenderOver").start();
1647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds = new java.net.DatagramSocket(portNumber);
1648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.setSoTimeout(6000);
1649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte rbuf[] = new byte[5];
1650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length);
1651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ;
1652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.receive(rdp);
1653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Send/Receive oversize failed to return correct data: "
1655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + new String(rbuf, 0, 5), new String(rbuf, 0, 5)
1656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals("01234"));
1657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
1658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.err.println("Exception during send test: " + e);
1659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            e.printStackTrace();
1660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("port " + portNumber + " Exception: " + e
1661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + " during oversize send test");
1662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ds.close();
1664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1667