7044870: java/nio/channels/DatagramChannel/SelectWhenRefused.java failed on SUSE Linux 10
authorchegar
Thu, 25 Aug 2011 16:08:31 +0100
changeset 10361 b089baaa1d3e
parent 10360 d1a6fafde2fa
child 10362 5938b19e89b9
7044870: java/nio/channels/DatagramChannel/SelectWhenRefused.java failed on SUSE Linux 10 Reviewed-by: alanb, chegar Contributed-by: kurchi.subhra.hazra@oracle.com
jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java
--- a/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java	Tue Aug 23 16:35:05 2011 -0700
+++ b/jdk/test/java/nio/channels/DatagramChannel/SelectWhenRefused.java	Thu Aug 25 16:08:31 2011 +0100
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 6935563
+ * @bug 6935563 7044870
  * @summary Test that Selector does not select an unconnected DatagramChannel when
  *    ICMP port unreachable received
  */
@@ -35,14 +35,15 @@
 public class SelectWhenRefused {
 
     public static void main(String[] args) throws IOException {
-        DatagramChannel dc = DatagramChannel.open().bind(new InetSocketAddress(0));
-        int port = dc.socket().getLocalPort();
-        dc.close();
+        DatagramChannel dc1 = DatagramChannel.open().bind(new InetSocketAddress(0));
+        int port = dc1.socket().getLocalPort();
 
         // datagram sent to this address should be refused
         SocketAddress refuser = new InetSocketAddress(InetAddress.getLocalHost(), port);
 
-        dc = DatagramChannel.open().bind(new InetSocketAddress(0));
+        DatagramChannel dc = DatagramChannel.open().bind(new InetSocketAddress(0));
+        dc1.close();
+
         Selector sel = Selector.open();
         try {
             dc.configureBlocking(false);
@@ -52,6 +53,10 @@
             sendDatagram(dc, refuser);
             int n = sel.select(2000);
             if (n > 0) {
+                sel.selectedKeys().clear();
+                // BindException will be thrown if another service is using
+                // our expected refuser port, cannot run just exit.
+                DatagramChannel.open().bind(refuser).close();
                 throw new RuntimeException("Unexpected wakeup");
             }
 
@@ -80,6 +85,8 @@
                 throw new RuntimeException("Unexpected wakeup after disconnect");
             }
 
+        } catch(BindException e) {
+            // Do nothing, some other test has used this port
         } finally {
             sel.close();
             dc.close();