diff --git a/test/ProblemList.txt b/test/ProblemList.txt index c41d51376cca3f807e845d87fcc144c9bd96af08..d1135dffe42acce599c7130197b5adef68c59eda 100644 --- a/test/ProblemList.txt +++ b/test/ProblemList.txt @@ -737,9 +737,6 @@ sun/net/www/protocol/http/DigestTest.java generic-all # Suspect many of these tests auffer from using fixed ports, no concrete # evidence. -# Failing on Solaris x86 and Linux x86, filed 6934585 -java/nio/channels/AsynchronousSocketChannel/Basic.java generic-all - # Occasionally Failing with java.lang.AssertionError on Windows X64 # at sun.nio.ch.PendingIoCache.clearPendingIoMap(PendingIoCache.java:144) #java/nio/channels/FileChannel/ReleaseOnCloseDeadlock.java windows-all @@ -767,10 +764,6 @@ java/nio/channels/Selector/SelectWrite.java generic-all # Fails on Fedora 9 32bit times out java/nio/channels/DatagramChannel/EmptyBuffer.java generic-all -# Fails on Windows 2000, ExceptionInInitializerError -# in WindowsAsynchronousServerSocketChannelImpl.java:316 -java/nio/channels/AsynchronousChannelGroup/Unbounded.java generic-all - # Fails on Windows 2000, times out java/nio/channels/FileChannel/Transfer.java generic-all @@ -812,11 +805,12 @@ java/nio/channels/Selector/HelperSlowToDie.java generic-all # Timeouts etc. on Window java/nio/channels/AsyncCloseAndInterrupt.java windows-all -# Gets java.lang.ExceptionInInitializerError on windows: (Windows 2000 only?) +# Gets java.lang.ExceptionInInitializerError on Windows 2000 (need XP or newer) java/nio/channels/AsynchronousChannelGroup/Basic.java windows-5.0 java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java windows-5.0 java/nio/channels/AsynchronousChannelGroup/Identity.java windows-5.0 java/nio/channels/AsynchronousChannelGroup/Restart.java windows-5.0 +java/nio/channels/AsynchronousChannelGroup/Unbounded.java windows-5.0 java/nio/channels/AsynchronousDatagramChannel/Basic.java windows-5.0 java/nio/channels/AsynchronousFileChannel/Lock.java windows-5.0 java/nio/channels/AsynchronousServerSocketChannel/Basic.java windows-5.0 diff --git a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java index 7fbe8f6921e40b24a2d2591fd0d731bf80b7a9f2..f9755de04f3c3eada3b6feaaf3782b9d3a2773b2 100644 --- a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java +++ b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java @@ -196,18 +196,16 @@ public class Basic { System.out.println("-- connect to non-existent host --"); - // test failure - InetAddress badHost = InetAddress.getByName("1.2.3.4"); - if (!badHost.isReachable(10*1000)) { - - ch = AsynchronousSocketChannel.open(); - try { - ch.connect(new InetSocketAddress(badHost, 9876)).get(); - throw new RuntimeException("Connection should not be established"); - } catch (ExecutionException x) { - } + // test that failure to connect closes the channel + ch = AsynchronousSocketChannel.open(); + try { + ch.connect(genSocketAddress()).get(); + } catch (ExecutionException x) { + // failed to establish connection if (ch.isOpen()) throw new RuntimeException("Channel should be closed"); + } finally { + ch.close(); } server.close(); @@ -219,27 +217,22 @@ public class Basic { AsynchronousSocketChannel ch; // asynchronous close while connecting - InetAddress rh = InetAddress.getByName("1.2.3.4"); - if (!rh.isReachable(3000)) { - InetSocketAddress isa = new InetSocketAddress(rh, 1234); - - ch = AsynchronousSocketChannel.open(); - Future result = ch.connect(isa); + ch = AsynchronousSocketChannel.open(); + Future connectResult = ch.connect(genSocketAddress()); - // give time to initiate the connect (SYN) - Thread.sleep(50); + // give time to initiate the connect (SYN) + Thread.sleep(50); - // close - ch.close(); + // close + ch.close(); - // check that AsynchronousCloseException is thrown - try { - result.get(); - throw new RuntimeException("Should not connect"); - } catch (ExecutionException x) { - if (!(x.getCause() instanceof AsynchronousCloseException)) - throw new RuntimeException(x); - } + // check that exception is thrown in timely manner + try { + connectResult.get(5, TimeUnit.SECONDS); + } catch (TimeoutException x) { + throw new RuntimeException("AsynchronousCloseException not thrown"); + } catch (ExecutionException x) { + // expected } System.out.println("-- asynchronous close when reading --"); @@ -785,30 +778,47 @@ public class Basic { ch.close(); } - // returns ByteBuffer with random bytes - static ByteBuffer genBuffer() { - int size = 1024 + rand.nextInt(16000); - byte[] buf = new byte[size]; - rand.nextBytes(buf); - boolean useDirect = rand.nextBoolean(); - if (useDirect) { - ByteBuffer bb = ByteBuffer.allocateDirect(buf.length); - bb.put(buf); - bb.flip(); - return bb; - } else { - return ByteBuffer.wrap(buf); - } - } - - // return ByteBuffer[] with random bytes - static ByteBuffer[] genBuffers(int max) { - int len = 1; - if (max > 1) - len += rand.nextInt(max); - ByteBuffer[] bufs = new ByteBuffer[len]; - for (int i=0; i 1) + len += rand.nextInt(max); + ByteBuffer[] bufs = new ByteBuffer[len]; + for (int i=0; i