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