diff options
author | Narayan Kamath <narayan@google.com> | 2014-01-02 16:21:53 +0000 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-01-06 17:43:44 +0000 |
commit | 82c642531ba3c9ad29cb3125f7547a226b661b11 (patch) | |
tree | 62f5f0fbd5d5a0b2181710fdbd2aa6fe920e4f86 /luni | |
parent | 4ca6580dc932f84a9b15e37e59ec795cba21c7c6 (diff) | |
download | libcore-82c642531ba3c9ad29cb3125f7547a226b661b11.zip libcore-82c642531ba3c9ad29cb3125f7547a226b661b11.tar.gz libcore-82c642531ba3c9ad29cb3125f7547a226b661b11.tar.bz2 |
Delete Support_PortManager & OldDatagramSocketTest
Support_PortManager didn't really work, so rewrite all tests
that use it.
Also, dedup OldDatagramSocketTest with the harmony DatagramSocketTest.
Fix various broken test cases and terribly written tests.
bug: 11689863
Change-Id: I4efb9e02eb88517273fff50a0dec1d0262feafb2
Diffstat (limited to 'luni')
-rw-r--r-- | luni/src/test/java/libcore/java/net/OldDatagramSocketTest.java | 2183 |
1 files changed, 0 insertions, 2183 deletions
diff --git a/luni/src/test/java/libcore/java/net/OldDatagramSocketTest.java b/luni/src/test/java/libcore/java/net/OldDatagramSocketTest.java deleted file mode 100644 index d51d461..0000000 --- a/luni/src/test/java/libcore/java/net/OldDatagramSocketTest.java +++ /dev/null @@ -1,2183 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package libcore.java.net; - -import java.io.IOException; -import java.io.InterruptedIOException; -import java.net.BindException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.DatagramSocketImpl; -import java.net.DatagramSocketImplFactory; -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.NetworkInterface; -import java.net.PortUnreachableException; -import java.net.SocketAddress; -import java.net.SocketException; -import java.net.SocketTimeoutException; -import java.net.UnknownHostException; -import java.nio.channels.DatagramChannel; -import java.nio.channels.IllegalBlockingModeException; -import java.util.Date; -import java.util.Vector; -import tests.support.Support_Configuration; -import tests.support.Support_PortManager; - -public class OldDatagramSocketTest extends junit.framework./*Socket*/TestCase { - - java.net.DatagramSocket ds; - - java.net.DatagramPacket dp; - - DatagramSocket sds = null; - - String retval; - - String testString = "Test String"; - - boolean interrupted; - - class DatagramServer extends Thread { - - public DatagramSocket ms; - - boolean running = true; - - public volatile byte[] rbuf = new byte[512]; - - volatile DatagramPacket rdp = null; - - public void run() { - try { - while (running) { - try { - ms.receive(rdp); - // echo the packet back - ms.send(rdp); - } catch (java.io.InterruptedIOException e) { - Thread.yield(); - } - ; - } - ; - } catch (java.io.IOException e) { - System.out.println("DatagramServer server failed: " + e); - } finally { - ms.close(); - } - } - - public void stopServer() { - running = false; - } - - public DatagramServer(int aPort, InetAddress address) - throws java.io.IOException { - rbuf = new byte[512]; - rbuf[0] = -1; - rdp = new DatagramPacket(rbuf, rbuf.length); - ms = new DatagramSocket(aPort, address); - ms.setSoTimeout(2000); - } - } - - public void test_Constructor() { - // Test for method java.net.DatagramSocket() - try { - ds = new java.net.DatagramSocket(); - } catch (Exception e) { - fail("Could not create DatagramSocket : " + e.getMessage()); - } - - /* - SecurityManager sm = new SecurityManager() { - - public void checkPermission(Permission perm) { - } - - public void checkListen(int port) { - throw new SecurityException(); - } - }; - - SecurityManager oldSm = System.getSecurityManager(); - System.setSecurityManager(sm); - try { - new DatagramSocket(); - fail("SecurityException should be thrown."); - } catch (SecurityException e) { - // expected - } catch (SocketException e) { - fail("SocketException was thrown."); - } finally { - System.setSecurityManager(oldSm); - } - */ - } - - public void test_ConstructorI() { - // Test for method java.net.DatagramSocket(int) - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - assertTrue("Created socket with incorrect port", - ds.getLocalPort() == portNumber); - } catch (Exception e) { - fail("Could not create DatagramSocket : " + e.getMessage()); - } - - /* - SecurityManager sm = new SecurityManager() { - - public void checkPermission(Permission perm) { - } - - public void checkListen(int port) { - throw new SecurityException(); - } - }; - - SecurityManager oldSm = System.getSecurityManager(); - System.setSecurityManager(sm); - try { - new DatagramSocket(8080); - fail("SecurityException should be thrown."); - } catch (SecurityException e) { - // expected - } catch (SocketException e) { - fail("SocketException was thrown."); - } finally { - System.setSecurityManager(oldSm); - } - */ - - try { - DatagramSocket ds = new java.net.DatagramSocket(1); - if (!("root".equals(System.getProperty("user.name")))) { - fail("SocketException was not thrown."); - } - } catch (SocketException e) { - //expected - } - - } - - public void test_ConstructorILjava_net_InetAddress() { - // Test for method java.net.DatagramSocket(int, java.net.InetAddress) - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber, InetAddress - .getLocalHost()); - assertTrue("Created socket with incorrect port", - ds.getLocalPort() == portNumber); - assertTrue("Created socket with incorrect address", ds - .getLocalAddress().equals(InetAddress.getLocalHost())); - } catch (Exception e) { - fail("Could not create DatagramSocket : " + e.getMessage()); - } - - /* - SecurityManager sm = new SecurityManager() { - - public void checkPermission(Permission perm) { - } - - public void checkListen(int port) { - throw new SecurityException(); - } - }; - - SecurityManager oldSm = System.getSecurityManager(); - System.setSecurityManager(sm); - try { - new java.net.DatagramSocket(8080, InetAddress - .getLocalHost()); - fail("SecurityException should be thrown."); - } catch (SecurityException e) { - // expected - } catch (SocketException e) { - fail("SocketException was thrown."); - } catch (UnknownHostException e) { - fail("UnknownHostException was thrown."); - } finally { - System.setSecurityManager(oldSm); - } - */ - - try { - new java.net.DatagramSocket(1, InetAddress - .getLocalHost()); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } catch (UnknownHostException e) { - fail("UnknownHostException was thrown."); - } - } - - public void test_close() { - // Test for method void java.net.DatagramSocket.close() - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - dp = new DatagramPacket("Test String".getBytes(), 11, InetAddress - .getLocalHost(), 0); - ds.close(); - try { - ds.send(dp); - fail("IOException was not thrown."); - } catch(IOException ioe) { - //expected - } - } catch (Exception e) { - fail("Unexpected exception: " + e.getMessage()); - } - } - - public void test_connectLjava_net_InetAddressI() throws - UnknownHostException, SocketException { - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - assertTrue("Incorrect InetAddress", ds.getInetAddress().equals( - inetAddress)); - assertTrue("Incorrect Port", ds.getPort() == portNumber); - ds.disconnect(); - } catch (Exception e) { - fail("Exception during test : " + e.getMessage()); - } - - System.out - .println("Running test_connectLjava_net_InetAddressI" + - "(DatagramSocketTest) with IPv6GlobalAddressJcl4: " - + Support_Configuration.IPv6GlobalAddressJcl4); - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress - .getByName(Support_Configuration.IPv6GlobalAddressJcl4); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - assertTrue("Incorrect InetAddress", ds.getInetAddress().equals( - inetAddress)); - assertTrue("Incorrect Port", ds.getPort() == portNumber); - ds.disconnect(); - } catch (Exception e) { - fail("Exception during test : " + e.getMessage()); - } - - try { - // Create a connected datagram socket to test - // PlainDatagramSocketImpl.peek() - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(); - int port = ds.getLocalPort(); - ds.connect(localHost, port); - DatagramPacket send = new DatagramPacket(new byte[10], 10, - localHost, port); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("Wrong size: " + receive.getLength(), receive - .getLength() == 10); - assertTrue("Wrong receiver", receive.getAddress().equals(localHost)); - } catch (IOException e) { - fail("Unexpected IOException : " + e.getMessage()); - } - - class DatagramServer extends Thread { - - public DatagramSocket ms; - - boolean running = true; - - public byte[] rbuf = new byte[512]; - - DatagramPacket rdp = null; - - public void run() { - try { - while (running) { - try { - ms.receive(rdp); - // echo the packet back - ms.send(rdp); - } catch (java.io.InterruptedIOException e) { - Thread.yield(); - } - - } - - } catch (java.io.IOException e) { - System.out.println("Multicast server failed: " + e); - } finally { - ms.close(); - } - } - - public void stopServer() { - running = false; - } - - public DatagramServer(int aPort, InetAddress address) - throws java.io.IOException { - rbuf = new byte[512]; - rbuf[0] = -1; - rdp = new DatagramPacket(rbuf, rbuf.length); - ms = new DatagramSocket(aPort, address); - ms.setSoTimeout(2000); - } - } - - // validate that we get the PortUnreachable exception if we try to - // send a dgram to a server that is not running and then do a recv - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - DatagramPacket send = new DatagramPacket(new byte[10], 10); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(10000); - ds.receive(receive); - ds.close(); - fail( - "No PortUnreachableException when connected at native level on recv "); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to connect at native level on recv: " - + e.toString(), - (e instanceof PortUnreachableException)); - } - - // validate that we can send/receive with datagram sockets connected at - // the native level - DatagramServer server = null; - int[] ports = Support_PortManager.getNextPortsForUDP(3); - int serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(localHost, serverPortNumber); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("Wrong size data received: " + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("Wrong receiver:" + receive.getAddress() + ":" - + localHost, receive.getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can disconnect - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - ds.disconnect(); - ds.close(); - } catch (Exception e) { - assertTrue("Unexpected exception when trying to connect at native" - + e.toString(), (e instanceof PortUnreachableException)); - } - - // validate that once connected we cannot send to another address - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - DatagramPacket send = new DatagramPacket(new byte[10], 10, - inetAddress, portNumber + 1); - ds.send(send); - ds.close(); - fail( - "No Exception when trying to send to a different address on a connected socket "); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to send to a different address on a connected socket: " - + e.toString(), - (e instanceof IllegalArgumentException)); - } - - // validate that we can connect, then disconnect, then connect then - // send/recv - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(localHost, serverPortNumber + 1); - ds.disconnect(); - ds.connect(localHost, serverPortNumber); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue( - "connect/disconnect/connect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/disconnect/connect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/disconnect/connect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/disconnect/connect:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can connect/disconnect then send/recv to any address - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(localHost, serverPortNumber + 1); - ds.disconnect(); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length, localHost, serverPortNumber); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("connect/disconnect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/disconnect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/disconnect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/disconnect:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can connect on an allready connected socket and then - // send/recv - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(localHost, serverPortNumber + 1); - ds.connect(localHost, serverPortNumber); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("connect/connect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/connect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/connect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/connect: " - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // test for when we fail to connect at the native level. Even though we - // fail at the native level there is no way to return an exception so - // there should be no exception - try { - ds = new java.net.DatagramSocket(); - byte[] addressBytes = { 0, 0, 0, 0 }; - InetAddress inetAddress = InetAddress.getByAddress(addressBytes); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - } catch (Exception e) { - fail( - "Unexcpected exception when trying to connect at native level with bad address for signature with no exception to be returned: " - + e.toString()); - } - - System.out - .println("Running test_connectLjava_net_InetAddressI(DatagramSocketTest) with IPv6 address"); - try { - ds = new java.net.DatagramSocket(); - byte[] addressBytes = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 }; - InetAddress inetAddress = InetAddress - .getByAddress(addressBytes); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - } catch (Exception e) { - fail( - "Unexcpected exception when trying to connect at native level with bad IPv6 address for signature with no exception to be returned: " - + e.toString()); - } - } - - public void test_disconnect() { - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - ds.disconnect(); - assertNull("Incorrect InetAddress", ds.getInetAddress()); - assertEquals("Incorrect Port", -1, ds.getPort()); - } catch (Exception e) { - fail("Exception during test : " + e.getMessage()); - } - - System.out - .println("Running test_disconnect(DatagramSocketTest) with IPv6GlobalAddressJcl4: " - + Support_Configuration.IPv6GlobalAddressJcl4); - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress - .getByName(Support_Configuration.IPv6GlobalAddressJcl4); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(inetAddress, portNumber); - ds.disconnect(); - assertNull("Incorrect InetAddress", ds.getInetAddress()); - assertEquals("Incorrect Port", -1, ds.getPort()); - } catch (Exception e) { - fail("Exception during test : " + e.getMessage()); - } - } - - public void test_getInetAddress() { - Vector<InetAddress> ias = new Vector<InetAddress>(); - try { - ias.add(InetAddress.getLocalHost()); - ias.add(InetAddress - .getByName(Support_Configuration.IPv6GlobalAddressJcl4)); - ias.add(InetAddress - .getByName(Support_Configuration.InetTestAddress2)); - ias.add(InetAddress - .getByName(Support_Configuration.InetTestAddress2)); - ias.add(InetAddress - .getByName(Support_Configuration.InetTestIP)); - } catch(Exception e) { - fail("Unexpected exception was thrown: " + e.toString()); - } - - for(InetAddress ia:ias) { - int portNumber = Support_PortManager.getNextPortForUDP(); - DatagramSocket ds = null; - try { - ds = new DatagramSocket(); - ds.connect(ia, portNumber); - assertEquals(ia, ds.getInetAddress()); - assertEquals("" + ia, ia, ds.getInetAddress()); - } catch (SocketException e) { - fail("SocketException was thrown."); - } finally { - ds.disconnect(); - ds.close(); - } - } - - try { - assertNull(new DatagramSocket().getInetAddress()); - } catch (SocketException e) { - fail("SocketException was thrown."); - } - - } - - public void test_getLocalPort() { - // Test for method int java.net.DatagramSocket.getLocalPort() - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - assertTrue("Returned incorrect port", - ds.getLocalPort() == portNumber); - } catch (Exception e) { - fail("Exception during getLocalAddress : " + e.getMessage()); - } - } - - public void test_getPort() { - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - DatagramSocket theSocket = new DatagramSocket(portNumber); - assertEquals("Expected -1 for remote port as not connected", - -1, theSocket.getPort()); - - // now connect the socket and validate that we get the right port - theSocket.connect(InetAddress.getLocalHost(), portNumber); - assertTrue("getPort returned wrong value:" + theSocket.getPort() - + ":Expected:" + portNumber, - theSocket.getPort() == portNumber); - } catch (Exception e) { - fail("unexpected exception during getPort test : " + e.getMessage()); - } - } - - public void test_getReceiveBufferSize() throws Exception { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - ds.setReceiveBufferSize(130); - assertTrue("Incorrect buffer size", ds.getReceiveBufferSize() >= 130); - ds.close(); - try { - ds.getReceiveBufferSize(); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_getSendBufferSize() throws Exception { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - ds.setSendBufferSize(134); - assertTrue("Incorrect buffer size", ds.getSendBufferSize() >= 134); - ds.close(); - try { - ds.getSendBufferSize(); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_getSoTimeout_setSoTimeout() throws Exception { - // TODO: a useful test would check that setSoTimeout actually causes timeouts! - DatagramSocket s = new DatagramSocket(); - s.setSoTimeout(1500); - int ms = s.getSoTimeout(); - if (ms < 1500-10 || ms > 1500+10) { - fail("suspicious timeout: " + ms); - } - s.close(); - try { - s.getSoTimeout(); - fail("SocketException was not thrown."); - } catch (SocketException expected) { - } - try { - s.setSoTimeout(1000); - fail("SocketException was not thrown."); - } catch (SocketException expected) { - } - } - - public void test_receiveLjava_net_DatagramPacket() throws Exception { - // Test for method void - // java.net.DatagramSocket.receive(java.net.DatagramPacket) - - receive_oversize_java_net_DatagramPacket(); - final int[] ports = Support_PortManager.getNextPortsForUDP(2); - final int portNumber = ports[0]; - - class TestDGRcv implements Runnable { - public void run() { - try { - InetAddress localHost = InetAddress.getLocalHost(); - Thread.sleep(1000); - DatagramSocket sds = new DatagramSocket(ports[1]); - sds.send(new DatagramPacket("Test".getBytes("UTF-8"), "Test".length(), localHost, portNumber)); - sds.send(new DatagramPacket("Longer test".getBytes("UTF-8"), "Longer test".length(), localHost, portNumber)); - sds.send(new DatagramPacket("3 Test".getBytes("UTF-8"), "3 Test".length(), localHost, portNumber)); - sds.send(new DatagramPacket("4 Test".getBytes("UTF-8"), "4 Test".length(), localHost, portNumber)); - sds.send(new DatagramPacket("5".getBytes("UTF-8"), "5".length(), localHost, portNumber)); - sds.close(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - - try { - new Thread(new TestDGRcv(), "datagram receiver").start(); - ds = new java.net.DatagramSocket(portNumber); - ds.setSoTimeout(6000); - byte[] rbuf = new byte[1000]; - DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length); - - // Receive the first packet. - ds.receive(rdp); - assertEquals("Test", new String(rbuf, 0, rdp.getLength())); - // Check that we can still receive a longer packet (http://code.google.com/p/android/issues/detail?id=24748). - ds.receive(rdp); - assertEquals("Longer test", new String(rbuf, 0, rdp.getLength())); - // See what happens if we manually call DatagramPacket.setLength. - rdp.setLength(4); - ds.receive(rdp); - assertEquals("3 Te", new String(rbuf, 0, rdp.getLength())); - // And then another. - ds.receive(rdp); - assertEquals("4 Te", new String(rbuf, 0, rdp.getLength())); - // And then a packet shorter than the user-supplied length. - ds.receive(rdp); - assertEquals("5", new String(rbuf, 0, rdp.getLength())); - - ds.close(); - } finally { - ds.close(); - } - DatagramSocket socket = null; - try { - byte rbuf[] = new byte[1000]; - DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length); - DatagramChannel channel = DatagramChannel.open(); - channel.configureBlocking(false); - socket = channel.socket(); - socket.receive(rdp); - fail("IllegalBlockingModeException was not thrown."); - } catch(IllegalBlockingModeException expected) { - } finally { - socket.close(); - } - - try { - ds = new java.net.DatagramSocket(portNumber); - ds.setSoTimeout(1000); - byte rbuf[] = new byte[1000]; - DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length); - ds.receive(rdp); - fail("SocketTimeoutException was not thrown."); - } catch(SocketTimeoutException expected) { - } finally { - ds.close(); - } - - interrupted = false; - final DatagramSocket ds = new DatagramSocket(); - ds.setSoTimeout(12000); - Runnable runnable = new Runnable() { - public void run() { - try { - ds.receive(new DatagramPacket(new byte[1], 1)); - } catch (InterruptedIOException e) { - interrupted = true; - } catch (IOException ignored) { - } - } - }; - Thread thread = new Thread(runnable, "DatagramSocket.receive1"); - thread.start(); - do { - Thread.sleep(500); - } while (!thread.isAlive()); - ds.close(); - int c = 0; - do { - Thread.sleep(500); - if (interrupted) { - fail("received interrupt"); - } - if (++c > 4) { - fail("read call did not exit"); - } - } while (thread.isAlive()); - - interrupted = false; - final int portNum = ports[0]; - final DatagramSocket ds2 = new DatagramSocket(ports[1]); - ds2.setSoTimeout(12000); - Runnable runnable2 = new Runnable() { - public void run() { - try { - ds2.receive(new DatagramPacket(new byte[1], 1, - InetAddress.getLocalHost(), portNum)); - } catch (InterruptedIOException e) { - interrupted = true; - } catch (IOException ignored) { - } - } - }; - Thread thread2 = new Thread(runnable2, "DatagramSocket.receive2"); - thread2.start(); - try { - do { - Thread.sleep(500); - } while (!thread2.isAlive()); - } catch (InterruptedException ignored) { - } - ds2.close(); - int c2 = 0; - do { - Thread.sleep(500); - if (interrupted) { - fail("receive2 was interrupted"); - } - if (++c2 > 4) { - fail("read2 call did not exit"); - } - } while (thread2.isAlive()); - - interrupted = false; - DatagramSocket ds3 = new DatagramSocket(); - ds3.setSoTimeout(500); - Date start = new Date(); - try { - ds3.receive(new DatagramPacket(new byte[1], 1)); - } catch (InterruptedIOException e) { - interrupted = true; - } - ds3.close(); - assertTrue("receive not interrupted", interrupted); - int delay = (int) (new Date().getTime() - start.getTime()); - assertTrue("timeout too soon: " + delay, delay >= 490); - } - - public void test_sendLjava_net_DatagramPacket() throws Exception { - // Test for method void - // java.net.DatagramSocket.send(java.net.DatagramPacket) - int[] ports = Support_PortManager.getNextPortsForUDP(2); - final int portNumber = ports[0]; - - class TestDGSend implements Runnable { - Thread pThread; - - public TestDGSend(Thread t) { - pThread = t; - } - - public void run() { - try { - byte[] rbuf = new byte[1000]; - - sds = new DatagramSocket(portNumber); - DatagramPacket sdp = new DatagramPacket(rbuf, rbuf.length); - sds.setSoTimeout(6000); - sds.receive(sdp); - retval = new String(rbuf, 0, testString.length()); - pThread.interrupt(); - } catch (java.io.InterruptedIOException e) { - System.out.println("Recv operation timed out"); - pThread.interrupt(); - ds.close(); - } catch (Exception e) { - System.out.println("Failed to establish Dgram server: " + e); - } - } - } - try { - new Thread(new TestDGSend(Thread.currentThread()), "DGServer") - .start(); - ds = new java.net.DatagramSocket(ports[1]); - dp = new DatagramPacket(testString.getBytes(), testString.length(), - InetAddress.getLocalHost(), portNumber); - // Wait to allow send to occur - try { - Thread.sleep(500); - ds.send(dp); - Thread.sleep(5000); - } catch (InterruptedException e) { - ds.close(); - assertTrue("Incorrect data sent: " + retval, retval - .equals(testString)); - } - } catch (Exception e) { - fail("Exception during send test : " + e.getMessage()); - } finally { - ds.close(); - } - - /* - SecurityManager sm = new SecurityManager() { - - public void checkPermission(Permission perm) { - } - - public void checkMulticast(InetAddress maddr) { - throw new SecurityException(); - } - - public void checkConnect(String host, - int port) { - throw new SecurityException(); - } - }; - try { - - ds = new java.net.DatagramSocket(ports[1]); - dp = new DatagramPacket(testString.getBytes(), testString.length(), - InetAddress.getLocalHost(), portNumber); - - SecurityManager oldSm = System.getSecurityManager(); - System.setSecurityManager(sm); - try { - ds.send(dp); - fail("SecurityException should be thrown."); - } catch (SecurityException e) { - // expected - } catch (SocketException e) { - fail("SocketException was thrown."); - } finally { - System.setSecurityManager(oldSm); - } - } catch(Exception e) { - fail("Unexpected exception was thrown: " + e.getMessage()); - } - */ - - DatagramSocket socket = null; - try { - byte rbuf[] = new byte[1000]; - DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length); - SocketAddress address = new InetSocketAddress(portNumber); - DatagramChannel channel = DatagramChannel.open(); - channel.configureBlocking(false); - socket = channel.socket(); - socket.send(rdp); - fail("IllegalBlockingModeException was not thrown."); - } catch(IllegalBlockingModeException ibme) { - //expected - } catch(IOException ioe) { - fail("IOException was thrown: " + ioe.getMessage()); - } finally { - socket.close(); - } - - //Regression for HARMONY-1118 - class testDatagramSocket extends DatagramSocket { - public testDatagramSocket(DatagramSocketImpl impl){ - super(impl); - } - } - class testDatagramSocketImpl extends DatagramSocketImpl { - protected void create() throws SocketException {} - protected void bind(int arg0, InetAddress arg1) throws SocketException {} - protected void send(DatagramPacket arg0) throws IOException {} - protected int peek(InetAddress arg0) throws IOException { - return 0; - } - protected int peekData(DatagramPacket arg0) throws IOException { - return 0; - } - protected void receive(DatagramPacket arg0) throws IOException {} - protected void setTTL(byte arg0) throws IOException {} - protected byte getTTL() throws IOException { - return 0; - } - protected void setTimeToLive(int arg0) throws IOException {} - protected int getTimeToLive() throws IOException { - return 0; - } - protected void join(InetAddress arg0) throws IOException {} - protected void leave(InetAddress arg0) throws IOException {} - protected void joinGroup(SocketAddress arg0, NetworkInterface arg1) throws IOException {} - protected void leaveGroup(SocketAddress arg0, NetworkInterface arg1) throws IOException {} - protected void close() {} - public void setOption(int arg0, Object arg1) throws SocketException {} - public Object getOption(int arg0) throws SocketException { - return null; - } - } - InetSocketAddress sa = new InetSocketAddress(InetAddress.getLocalHost(), 0); - //no exception expected for next line - new testDatagramSocket(new testDatagramSocketImpl()).send(new DatagramPacket(new byte[272], 3, sa)); - - // Regression test for Harmony-2938 - InetAddress i = InetAddress.getByName("127.0.0.1"); - DatagramSocket d = new DatagramSocket(0, i); - try { - d.send(new DatagramPacket(new byte[] { 1 }, 1)); - fail("should throw NPE."); - } catch (NullPointerException e) { - // expected; - } finally { - d.close(); - } - } - - public void test_setSendBufferSizeI() throws Exception { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - ds.setSendBufferSize(134); - assertTrue("Incorrect buffer size", ds.getSendBufferSize() >= 134); - ds.close(); - try { - ds.setSendBufferSize(1); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_setReceiveBufferSizeI() throws Exception { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(portNumber); - ds.setReceiveBufferSize(130); - assertTrue("Incorrect buffer size", ds.getReceiveBufferSize() >= 130); - - try { - ds.setReceiveBufferSize(0); - fail("IllegalArgumentException was not thrown."); - } catch(IllegalArgumentException iae) { - //expected - } - - try { - ds.setReceiveBufferSize(-1); - fail("IllegalArgumentException was not thrown."); - } catch(IllegalArgumentException iae) { - //expected - } - - ds.close(); - - try { - ds.setReceiveBufferSize(1); - fail("SocketException was not thrown."); - } catch (SocketException e) { - //expected - } - } - - public void test_ConstructorLjava_net_DatagramSocketImpl() { - class testDatagramSocket extends DatagramSocket { - public testDatagramSocket(DatagramSocketImpl impl){ - super(impl); - } - } - - try { - new testDatagramSocket((DatagramSocketImpl) null); - fail("exception expected"); - } catch (NullPointerException ex) { - //expected - } - } - - public void test_ConstructorLjava_net_SocketAddress() { - class mySocketAddress extends SocketAddress { - - public mySocketAddress() { - } - } - - try { - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(new InetSocketAddress( - InetAddress.getLocalHost(), portNumber)); - assertTrue(ds.getBroadcast()); - assertTrue("Created socket with incorrect port", ds - .getLocalPort() == portNumber); - assertTrue("Created socket with incorrect address", ds - .getLocalAddress().equals(InetAddress.getLocalHost())); - } catch (Exception e) { - fail("Could not create DatagramSocket : " + e.getMessage()); - } - - try { - int portNumber = Support_PortManager.getNextPortForUDP(); - ds = new java.net.DatagramSocket(new mySocketAddress()); - fail( - "No exception when constucting datagramSocket with unsupported SocketAddress type"); - } catch (IllegalArgumentException e) { - - } - //regression for Harmony-894 - ds = new DatagramSocket((SocketAddress)null); - assertTrue(ds.getBroadcast()); - } catch (Exception ex) { - fail( - "unexpected exception when datagramSocket SocketAddress constructor test"); - } - - /* - SecurityManager sm = new SecurityManager() { - - public void checkPermission(Permission perm) { - } - - public void checkListen(int port) { - throw new SecurityException(); - } - }; - - SecurityManager oldSm = System.getSecurityManager(); - System.setSecurityManager(sm); - try { - new DatagramSocket(new InetSocketAddress( - InetAddress.getLocalHost(), 1)); - fail("SecurityException should be thrown."); - } catch (SecurityException e) { - // expected - } catch (SocketException e) { - fail("SocketException was thrown."); - } catch (UnknownHostException e) { - fail("UnknownHostException was thrown."); - } finally { - System.setSecurityManager(oldSm); - } - */ - - InetSocketAddress isa = null; - try { - isa = new InetSocketAddress( - InetAddress.getLocalHost(), 1); - } catch (UnknownHostException e) { - fail("UnknownHostException was thrown."); - } - } - - public void test_bindLjava_net_SocketAddress() throws Exception { - int[] ports = Support_PortManager.getNextPortsForUDP(3); - int serverPortNumber = ports[1]; - - // now create a socket that is not bound and then bind it - InetAddress localHost = InetAddress.getLocalHost(); - InetSocketAddress localAddress1 = new InetSocketAddress(localHost, ports[0]); - DatagramSocket theSocket = new DatagramSocket(localAddress1); - - // validate that the localSocketAddress reflects the address we bound to - assertEquals(localAddress1, theSocket.getLocalSocketAddress()); - - // now make sure that datagrams sent from this socket appear to come - // from the address we bound to - InetSocketAddress localAddress2 = new InetSocketAddress(localHost, ports[2]); - DatagramSocket ds = new DatagramSocket((SocketAddress) null); - ds.bind(localAddress2); - - DatagramServer server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - - ds.connect(new InetSocketAddress(localHost, serverPortNumber)); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, sendBytes.length); - ds.send(send); - Thread.sleep(1000); - ds.close(); - // Check that the address in the packet matches the bound address. - assertEquals(localAddress2, server.rdp.getSocketAddress()); - - if (server != null) { - server.stopServer(); - } - } - - public void test_bindLjava_net_SocketAddress_null() throws Exception { - // validate if we pass in null that it picks an address for us. - DatagramSocket theSocket = new DatagramSocket((SocketAddress) null); - theSocket.bind(null); - assertNotNull(theSocket.getLocalSocketAddress()); - theSocket.close(); - } - - public void test_bindLjava_net_SocketAddress_bad_address() throws Exception { - // Address we cannot bind to - DatagramSocket theSocket = new DatagramSocket((SocketAddress) null); - try { - InetAddress badAddress = InetAddress.getByAddress(Support_Configuration.nonLocalAddressBytes); - theSocket.bind(new InetSocketAddress(badAddress, Support_PortManager.getNextPortForUDP())); - fail("No exception when binding to bad address"); - } catch (SocketException expected) { - } - theSocket.close(); - } - - public void test_bindLjava_net_SocketAddress_address_in_use() throws Exception { - // Address that we have already bound to - int[] ports = Support_PortManager.getNextPortsForUDP(2); - DatagramSocket theSocket1 = new DatagramSocket((SocketAddress) null); - DatagramSocket theSocket2 = new DatagramSocket(ports[0]); - try { - InetSocketAddress theAddress = new InetSocketAddress(InetAddress.getLocalHost(), ports[1]); - theSocket1.bind(theAddress); - theSocket2.bind(theAddress); - fail("No exception binding to address that is not available"); - } catch (SocketException expected) { - } - theSocket1.close(); - theSocket2.close(); - } - - public void test_bindLjava_net_SocketAddress_unsupported_address_type() throws Exception { - class mySocketAddress extends SocketAddress { - public mySocketAddress() { - } - } - - // unsupported SocketAddress subclass - DatagramSocket theSocket = new DatagramSocket((SocketAddress) null); - try { - theSocket.bind(new mySocketAddress()); - fail("No exception when binding using unsupported SocketAddress subclass"); - } catch (IllegalArgumentException expected) { - } - theSocket.close(); - } - - public void test_connectLjava_net_SocketAddress() { - - // validate that we get the PortUnreachable exception if we try to - // send a dgram to a server that is not running and then do a recv - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(new InetSocketAddress(inetAddress, portNumber)); - DatagramPacket send = new DatagramPacket(new byte[10], 10); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(10000); - ds.receive(receive); - ds.close(); - fail( - "No PortUnreachableException when connected at native level on recv "); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to connect at native level on recv: " - + e.toString(), - (e instanceof PortUnreachableException)); - } - - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - - ds.connect(new InetSocketAddress("asdfasdf", 1)); - ds.close(); - fail("SocketException was not thrown."); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to connect to unknown host: " - + e.toString(), - (e instanceof SocketException)); - } - - // validate that we can send/receive with datagram sockets connected at - // the native level - DatagramServer server = null; - int[] ports = Support_PortManager.getNextPortsForUDP(3); - int serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(new InetSocketAddress(localHost, serverPortNumber)); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("Wrong size data received: " + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("Wrong receiver:" + receive.getAddress() + ":" - + localHost, receive.getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can disconnect - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(new InetSocketAddress(inetAddress, portNumber)); - ds.disconnect(); - ds.close(); - } catch (Exception e) { - assertTrue("Unexpected exception when trying to connect at native" - + e.toString(), (e instanceof PortUnreachableException)); - } - - // validate that once connected we cannot send to another address - try { - ds = new java.net.DatagramSocket(); - InetAddress inetAddress = InetAddress.getLocalHost(); - int portNumber = Support_PortManager.getNextPortForUDP(); - ds.connect(new InetSocketAddress(inetAddress, portNumber)); - DatagramPacket send = new DatagramPacket(new byte[10], 10, - inetAddress, portNumber + 1); - ds.send(send); - ds.close(); - fail( - "No Exception when trying to send to a different address on a connected socket "); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to send to a different address on a connected socket: " - + e.toString(), - (e instanceof IllegalArgumentException)); - } - - // validate that we can connect, then disconnect, then connect then - // send/recv - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1)); - ds.disconnect(); - ds.connect(new InetSocketAddress(localHost, serverPortNumber)); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue( - "connect/disconnect/connect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/disconnect/connect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/disconnect/connect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/disconnect/connect:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can connect/disconnect then send/recv to any address - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1)); - ds.disconnect(); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length, localHost, serverPortNumber); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("connect/disconnect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/disconnect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/disconnect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/disconnect:" - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // validate that we can connect on an allready connected socket and then - // send/recv - server = null; - ports = Support_PortManager.getNextPortsForUDP(3); - serverPortNumber = ports[0]; - try { - InetAddress localHost = InetAddress.getLocalHost(); - DatagramSocket ds = new DatagramSocket(ports[1]); - DatagramSocket ds2 = new DatagramSocket(ports[2]); - - try { - server = new DatagramServer(serverPortNumber, localHost); - server.start(); - Thread.sleep(1000); - } catch (Exception e) { - fail( - "Failed to set up datagram server for native connected Dgram socket test "); - } - - int port = ds.getLocalPort(); - ds.connect(new InetSocketAddress(localHost, serverPortNumber + 1)); - ds.connect(new InetSocketAddress(localHost, serverPortNumber)); - - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length); - ds.send(send); - DatagramPacket receive = new DatagramPacket(new byte[20], 20); - ds.setSoTimeout(2000); - ds.receive(receive); - ds.close(); - assertTrue("connect/connect - Wrong size data received: " - + receive.getLength(), - receive.getLength() == sendBytes.length); - assertTrue("connect/connect - Wrong data received" - + new String(receive.getData(), 0, receive.getLength()) - + ":" + new String(sendBytes), new String( - receive.getData(), 0, receive.getLength()) - .equals(new String(sendBytes))); - assertTrue("connect/connect - Wrong receiver:" - + receive.getAddress() + ":" + localHost, receive - .getAddress().equals(localHost)); - } catch (Exception e) { - fail( - "Unexpected exception when sending data on dgram connected at native level after connect/connect: " - + e.toString()); - } - - if (server != null) { - server.stopServer(); - } - - // test for when we fail to connect at the native level. It seems to - // fail for the any address so we use this. Now to be compatible we - // don't throw the exception but eat it and then act as if we were - // connected at the Java level. - try { - ds = new java.net.DatagramSocket(); - byte[] addressBytes = { 0, 0, 0, 0 }; - InetAddress inetAddress = InetAddress.getByAddress(addressBytes); - int portNumber = Support_PortManager.getNextPortForUDP(); - InetAddress localHost = InetAddress.getLocalHost(); - ds.connect(new InetSocketAddress(inetAddress, portNumber)); - assertTrue("Is not connected after connect to inaddr any", ds - .isConnected()); - byte[] sendBytes = { 'T', 'e', 's', 't', 0 }; - DatagramPacket send = new DatagramPacket(sendBytes, - sendBytes.length, localHost, portNumber); - ds.send(send); - fail( - "No exception when trying to connect at native level with bad address (exception from send) "); - } catch (Exception e) { - assertTrue( - "Wrong exception when trying to connect at native level with bad address (exception from send): " - + e.toString(), - (e instanceof IllegalArgumentException)); - } - } - - public void test_isBound() { - try { - InetAddress addr = InetAddress.getLocalHost(); - int[] ports = Support_PortManager.getNextPortsForUDP(3); - int port = ports[0]; - - DatagramSocket theSocket = new DatagramSocket(ports[1]); - assertTrue("Socket indicated not bound when it should be (1)", - theSocket.isBound()); - theSocket.close(); - - theSocket = new DatagramSocket(new InetSocketAddress(addr, port)); - assertTrue("Socket indicated not bound when it should be (2)", - theSocket.isBound()); - theSocket.close(); - - theSocket = new DatagramSocket((SocketAddress) null); - assertFalse("Socket indicated bound when it should not be (1)", - theSocket.isBound()); - theSocket.close(); - - // connect causes implicit bind - theSocket = new DatagramSocket((SocketAddress) null); - theSocket.connect(new InetSocketAddress(addr, port)); - assertTrue("Socket indicated not bound when it should be (3)", - theSocket.isBound()); - theSocket.close(); - - // now test when we bind explicitely - InetSocketAddress theLocalAddress = new InetSocketAddress( - InetAddress.getLocalHost(), ports[2]); - theSocket = new DatagramSocket((SocketAddress) null); - assertFalse("Socket indicated bound when it should not be (2)", - theSocket.isBound()); - theSocket.bind(theLocalAddress); - assertTrue("Socket indicated not bound when it should be (4)", - theSocket.isBound()); - theSocket.close(); - assertTrue("Socket indicated not bound when it should be (5)", - theSocket.isBound()); - } catch (Exception e) { - fail("Got exception during isBound tests" + e.toString()); - } - } - - public void test_isConnected() { - try { - InetAddress addr = InetAddress.getLocalHost(); - int[] ports = Support_PortManager.getNextPortsForUDP(4); - int port = ports[0]; - - // base test - DatagramSocket theSocket = new DatagramSocket(ports[1]); - assertFalse("Socket indicated connected when it should not be", - theSocket.isConnected()); - theSocket.connect(new InetSocketAddress(addr, port)); - assertTrue("Socket indicated not connected when it should be", - theSocket.isConnected()); - - // reconnect the socket and make sure we get the right answer - theSocket.connect(new InetSocketAddress(addr, ports[2])); - assertTrue("Socket indicated not connected when it should be", - theSocket.isConnected()); - - // now disconnect the socket and make sure we get the right answer - theSocket.disconnect(); - assertFalse("Socket indicated connected when it should not be", - theSocket.isConnected()); - theSocket.close(); - - // now check behavior when socket is closed when connected - theSocket = new DatagramSocket(ports[3]); - theSocket.connect(new InetSocketAddress(addr, port)); - theSocket.close(); - assertTrue("Socket indicated not connected when it should be", - theSocket.isConnected()); - } catch (Exception e) { - fail("Got exception during isConnected tests" + e.toString()); - } - } - - public void test_getRemoteSocketAddress() { - try { - int[] ports = Support_PortManager.getNextPortsForUDP(3); - int sport = ports[0]; - int portNumber = ports[1]; - DatagramSocket s = new DatagramSocket(new InetSocketAddress( - InetAddress.getLocalHost(), portNumber)); - s.connect(new InetSocketAddress(InetAddress.getLocalHost(), sport)); - assertTrue("Returned incorrect InetSocketAddress(1):" - + s.getLocalSocketAddress().toString(), s - .getRemoteSocketAddress().equals( - new InetSocketAddress(InetAddress.getLocalHost(), - sport))); - s.close(); - - // now create one that is not connected and validate that we get the - // right answer - DatagramSocket theSocket = new DatagramSocket((SocketAddress) null); - portNumber = ports[2]; - theSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), - portNumber)); - assertNull( - "Returned incorrect InetSocketAddress -unconnected socket:" - + "Expected: NULL", theSocket - .getRemoteSocketAddress()); - - // now connect and validate we get the right answer - theSocket.connect(new InetSocketAddress(InetAddress.getLocalHost(), - sport)); - assertTrue("Returned incorrect InetSocketAddress(2):" - + theSocket.getRemoteSocketAddress().toString(), theSocket - .getRemoteSocketAddress().equals( - new InetSocketAddress(InetAddress.getLocalHost(), - sport))); - theSocket.close(); - - } catch (Exception e) { - fail("Exception during getRemoteSocketAddress test: " + e); - } - } - - public void test_setReuseAddressZ() throws Exception { - // test case were we set it to false - DatagramSocket theSocket1 = null; - DatagramSocket theSocket2 = null; - try { - InetSocketAddress theAddress = new InetSocketAddress( - InetAddress.getLocalHost(), Support_PortManager - .getNextPortForUDP()); - theSocket1 = new DatagramSocket((SocketAddress) null); - theSocket2 = new DatagramSocket((SocketAddress) null); - theSocket1.setReuseAddress(false); - theSocket2.setReuseAddress(false); - theSocket1.bind(theAddress); - theSocket2.bind(theAddress); - fail( - "No exception when trying to connect to do duplicate socket bind with re-useaddr set to false"); - } catch (BindException e) { - - } - if (theSocket1 != null) - theSocket1.close(); - if (theSocket2 != null) - theSocket2.close(); - - // test case were we set it to true - try { - InetSocketAddress theAddress = new InetSocketAddress( - InetAddress.getLocalHost(), Support_PortManager - .getNextPortForUDP()); - theSocket1 = new DatagramSocket((SocketAddress) null); - theSocket2 = new DatagramSocket((SocketAddress) null); - theSocket1.setReuseAddress(true); - theSocket2.setReuseAddress(true); - theSocket1.bind(theAddress); - theSocket2.bind(theAddress); - } catch (Exception e) { - fail( - "unexpected exception when trying to connect to do duplicate socket bind with re-useaddr set to true"); - } - if (theSocket1 != null) - theSocket1.close(); - if (theSocket2 != null) - theSocket2.close(); - - // test the default case which we expect to be the same on all - // platforms - try { - InetSocketAddress theAddress = new InetSocketAddress( - InetAddress.getLocalHost(), Support_PortManager - .getNextPortForUDP()); - theSocket1 = new DatagramSocket((SocketAddress) null); - theSocket2 = new DatagramSocket((SocketAddress) null); - theSocket1.bind(theAddress); - theSocket2.bind(theAddress); - fail( - "No exception when trying to connect to do duplicate socket bind with re-useaddr left as default"); - } catch (BindException e) { - - } - if (theSocket1 != null) - theSocket1.close(); - if (theSocket2 != null) - theSocket2.close(); - - try { - theSocket1.setReuseAddress(true); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_getReuseAddress() throws Exception { - DatagramSocket theSocket = new DatagramSocket(); - theSocket.setReuseAddress(true); - assertTrue("getReuseAddress false when it should be true", - theSocket.getReuseAddress()); - theSocket.setReuseAddress(false); - assertFalse("getReuseAddress true when it should be false", - theSocket.getReuseAddress()); - theSocket.close(); - try { - theSocket.getReuseAddress(); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_setBroadcastZ() throws Exception { - int[] ports = Support_PortManager.getNextPortsForUDP(3); - DatagramSocket theSocket = new DatagramSocket(ports[0]); - theSocket.setBroadcast(false); - byte theBytes[] = { -1, -1, -1, -1 }; - - // validate we cannot connect to the broadcast address when - // setBroadcast is false - try { - theSocket.connect(new InetSocketAddress(InetAddress - .getByAddress(theBytes), ports[1])); - assertFalse( - "No exception when connecting to broadcast address with setBroadcast(false)", - theSocket.getBroadcast()); - } catch (SocketException ex) { - //expected - } - - // now validate that we can connect to the broadcast address when - // setBroadcast is true - theSocket.setBroadcast(true); - theSocket.connect(new InetSocketAddress(InetAddress - .getByAddress(theBytes), ports[2])); - - theSocket.close(); - try { - theSocket.setBroadcast(false); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_getBroadcast() throws Exception { - DatagramSocket theSocket = new DatagramSocket(); - theSocket.setBroadcast(true); - assertTrue("getBroadcast false when it should be true", theSocket - .getBroadcast()); - theSocket.setBroadcast(false); - assertFalse("getBroadcast true when it should be False", theSocket - .getBroadcast()); - theSocket.close(); - try { - theSocket.getBroadcast(); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_setTrafficClassI() throws Exception { - int IPTOS_LOWCOST = 0x2; - int IPTOS_RELIABILTY = 0x4; - int IPTOS_THROUGHPUT = 0x8; - int IPTOS_LOWDELAY = 0x10; - int[] ports = Support_PortManager.getNextPortsForUDP(2); - - new InetSocketAddress(InetAddress.getLocalHost(), - ports[0]); - DatagramSocket theSocket = new DatagramSocket(ports[1]); - - // validate that value set must be between 0 and 255 - try { - theSocket.setTrafficClass(256); - fail("No exception when traffic class set to 256"); - } catch (IllegalArgumentException e) { - } - - try { - theSocket.setTrafficClass(-1); - fail("No exception when traffic class set to -1"); - } catch (IllegalArgumentException e) { - } - - // now validate that we can set it to some good values - theSocket.setTrafficClass(IPTOS_LOWCOST); - theSocket.setTrafficClass(IPTOS_THROUGHPUT); - - theSocket.close(); - try { - theSocket.setTrafficClass(1); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_getTrafficClass() throws Exception { - int IPTOS_LOWCOST = 0x2; - int IPTOS_RELIABILTY = 0x4; - int IPTOS_THROUGHPUT = 0x8; - int IPTOS_LOWDELAY = 0x10; - int[] ports = Support_PortManager.getNextPortsForUDP(2); - - new InetSocketAddress(InetAddress.getLocalHost(), - ports[0]); - DatagramSocket theSocket = new DatagramSocket(ports[1]); - - /* - * we cannot actually check that the values are set as if a platform - * does not support the option then it may come back unset even - * though we set it so just get the value to make sure we can get it - */ - int trafficClass = theSocket.getTrafficClass(); - - theSocket.close(); - try { - theSocket.getTrafficClass(); - fail("SocketException was not thrown."); - } catch(SocketException se) { - //expected - } - } - - public void test_isClosed() { - try { - DatagramSocket theSocket = new DatagramSocket(); - - // validate isClosed returns expected values - assertFalse("Socket should indicate it is not closed(1):", - theSocket.isClosed()); - theSocket.close(); - assertTrue("Socket should indicate it is not closed(1):", theSocket - .isClosed()); - - InetSocketAddress theAddress = new InetSocketAddress(InetAddress - .getLocalHost(), Support_PortManager.getNextPortForUDP()); - theSocket = new DatagramSocket(theAddress); - assertFalse("Socket should indicate it is not closed(2):", - theSocket.isClosed()); - theSocket.close(); - assertTrue("Socket should indicate it is not closed(2):", theSocket - .isClosed()); - } catch (Exception e) { - fail("Got exception during isClosed tests" + e.toString()); - } - } - - public void test_getChannel() throws Exception { - assertNull(new DatagramSocket().getChannel()); - - int portNumber = Support_PortManager.getNextPortForUDP(); - DatagramSocket ds = null; - try { - InetAddress ia = InetAddress - .getByName(Support_Configuration.IPv6GlobalAddressJcl4); - ds = new DatagramSocket(); - assertNull(ds.getChannel()); - ds.connect(ia, portNumber); - assertNull(ds.getChannel()); - } catch (SocketException e) { - fail("SocketException was thrown."); - } finally { - ds.disconnect(); - ds.close(); - } - portNumber = Support_PortManager.getNextPortForUDP(); - SocketAddress address = new InetSocketAddress(portNumber); - DatagramChannel channel = DatagramChannel.open(); - DatagramSocket socket = channel.socket(); - assertEquals(channel, socket.getChannel()); - socket.close(); - } - - class TestDatagramSocketImplFactory implements DatagramSocketImplFactory { - public DatagramSocketImpl createDatagramSocketImpl() { - return new TestDatagramSocketImpl(); - } - } - - class TestDatagramSocketImpl extends DatagramSocketImpl { - - @Override - protected void bind(int arg0, InetAddress arg1) throws SocketException { - // TODO Auto-generated method stub - - } - - @Override - protected void close() { - // TODO Auto-generated method stub - - } - - @Override - protected void create() throws SocketException { - // TODO Auto-generated method stub - - } - - @Override - protected byte getTTL() throws IOException { - // TODO Auto-generated method stub - return 0; - } - - @Override - protected int getTimeToLive() throws IOException { - // TODO Auto-generated method stub - return 0; - } - - @Override - protected void join(InetAddress arg0) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void joinGroup(SocketAddress arg0, NetworkInterface arg1) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void leave(InetAddress arg0) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void leaveGroup(SocketAddress arg0, NetworkInterface arg1) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected int peek(InetAddress arg0) throws IOException { - // TODO Auto-generated method stub - return 0; - } - - @Override - protected int peekData(DatagramPacket arg0) throws IOException { - // TODO Auto-generated method stub - return 0; - } - - @Override - protected void receive(DatagramPacket arg0) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void send(DatagramPacket arg0) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void setTTL(byte arg0) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - protected void setTimeToLive(int arg0) throws IOException { - // TODO Auto-generated method stub - - } - - public Object getOption(int arg0) throws SocketException { - // TODO Auto-generated method stub - return null; - } - - public void setOption(int arg0, Object arg1) throws SocketException { - // TODO Auto-generated method stub - - } - - } - - /** - * Sets up the fixture, for example, open a network connection. This method - * is called before a test is executed. - */ - protected void setUp() { - retval = "Bogus retval"; - } - - /** - * Tears down the fixture, for example, close a network connection. This - * method is called after a test is executed. - */ - protected void tearDown() { - try { - ds.close(); - sds.close(); - } catch (Exception e) { - } - } - - protected void receive_oversize_java_net_DatagramPacket() throws Exception { - final int[] ports = Support_PortManager.getNextPortsForUDP(2); - final int portNumber = ports[0]; - - class TestDGRcvOver implements Runnable { - public void run() { - InetAddress localHost = null; - try { - localHost = InetAddress.getLocalHost(); - Thread.sleep(1000); - DatagramSocket sds = new DatagramSocket(ports[1]); - DatagramPacket rdp = new DatagramPacket("0123456789" - .getBytes(), 10, localHost, portNumber); - sds.send(rdp); - sds.close(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - - try { - new Thread(new TestDGRcvOver(), "DGSenderOver").start(); - ds = new java.net.DatagramSocket(portNumber); - ds.setSoTimeout(6000); - byte rbuf[] = new byte[5]; - DatagramPacket rdp = new DatagramPacket(rbuf, rbuf.length); - ; - ds.receive(rdp); - ds.close(); - assertTrue("Send/Receive oversize failed to return correct data: " - + new String(rbuf, 0, 5), new String(rbuf, 0, 5) - .equals("01234")); - } finally { - ds.close(); - } - } -} |