8176846: (fc) Increase timeouts of and instrument some tests using FileChannel#write
authorbpb
Thu, 16 Mar 2017 08:58:31 -0700
changeset 44266 2b9cc0e5e79f
parent 44265 ac63ae089927
child 44267 00898a596f31
child 44352 fd086da7c916
8176846: (fc) Increase timeouts of and instrument some tests using FileChannel#write Summary: Change tests to improve odds of passing on slow file systems. Reviewed-by: clanger, rriggs
jdk/test/java/io/FileInputStream/LargeFileAvailable.java
jdk/test/java/nio/channels/FileChannel/LoopingTruncate.java
jdk/test/java/nio/channels/FileChannel/Transfer.java
jdk/test/java/nio/channels/FileChannel/Transfers.java
--- a/jdk/test/java/io/FileInputStream/LargeFileAvailable.java	Thu Mar 16 15:30:54 2017 +0000
+++ b/jdk/test/java/io/FileInputStream/LargeFileAvailable.java	Thu Mar 16 08:58:31 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
  * @key intermittent
  * @summary Test if available returns correct value when reading
  *          a large file.
+ * @run main/timeout=300 LargeFileAvailable
  */
 
 import java.io.*;
@@ -34,6 +35,7 @@
 import java.nio.channels.*;
 import java.nio.file.Files;
 import static java.nio.file.StandardOpenOption.*;
+import java.util.concurrent.TimeUnit;
 
 public class LargeFileAvailable {
     public static void main(String args[]) throws Exception {
@@ -110,7 +112,12 @@
                               CREATE_NEW, WRITE, SPARSE)) {
             ByteBuffer bb = ByteBuffer.allocate(1).put((byte)1);
             bb.rewind();
+            System.out.println("  Writing large file...");
+            long t0 = System.nanoTime();
             int rc = fc.write(bb, filesize - 1);
+            long t1 = System.nanoTime();
+            System.out.printf("  Wrote large file in %d ns (%d ms) %n",
+                t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
 
             if (rc != 1) {
                 throw new RuntimeException("Failed to write 1 byte"
--- a/jdk/test/java/nio/channels/FileChannel/LoopingTruncate.java	Thu Mar 16 15:30:54 2017 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/LoopingTruncate.java	Thu Mar 16 08:58:31 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
  * @summary (fc) Infinite loop FileChannel.truncate
  * @library /lib/testlibrary
  * @build jdk.testlibrary.Utils
- * @run main/othervm LoopingTruncate
+ * @run main/othervm/timeout=300 LoopingTruncate
  */
 
 import java.nio.ByteBuffer;
@@ -37,6 +37,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import static java.nio.file.StandardOpenOption.*;
+import java.util.concurrent.TimeUnit;
 import static jdk.testlibrary.Utils.adjustTimeout;
 
 public class LoopingTruncate {
@@ -51,11 +52,21 @@
         Path path = Files.createTempFile("LoopingTruncate.tmp", null);
         try (FileChannel fc = FileChannel.open(path, CREATE, WRITE)) {
             fc.position(FATEFUL_SIZE + 1L);
+            System.out.println("  Writing large file...");
+            long t0 = System.nanoTime();
             fc.write(ByteBuffer.wrap(new byte[] {0}));
+            long t1 = System.nanoTime();
+            System.out.printf("  Wrote large file in %d ns (%d ms) %n",
+                t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
 
             Thread th = new Thread(() -> {
                 try {
+                    System.out.println("  Truncating large file...");
+                    long t2 = System.nanoTime();
                     fc.truncate(FATEFUL_SIZE);
+                    long t3 = System.nanoTime();
+                    System.out.printf("  Truncated large file in %d ns (%d ms) %n",
+                        t3 - t2, TimeUnit.NANOSECONDS.toMillis(t3 - t2));
                 } catch (ClosedByInterruptException ignore) {
                 } catch (Exception e) {
                     throw new RuntimeException(e);
--- a/jdk/test/java/nio/channels/FileChannel/Transfer.java	Thu Mar 16 15:30:54 2017 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/Transfer.java	Thu Mar 16 08:58:31 2017 -0700
@@ -29,7 +29,7 @@
  * @library ..
  * @library /lib/testlibrary/
  * @build jdk.testlibrary.*
- * @run testng Transfer
+ * @run testng/timeout=300 Transfer
  * @key randomness
  */
 
@@ -256,7 +256,13 @@
         initTestFile(source, 10);
         RandomAccessFile raf = new RandomAccessFile(source, "rw");
         FileChannel fc = raf.getChannel();
+        out.println("  Writing large file...");
+        long t0 = System.nanoTime();
         fc.write(ByteBuffer.wrap("Use the source!".getBytes()), testSize - 40);
+        long t1 = System.nanoTime();
+        out.printf("  Wrote large file in %d ns (%d ms) %n",
+            t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
+
         fc.close();
         raf.close();
 
@@ -310,8 +316,13 @@
 
         long testSize = ((long)Integer.MAX_VALUE) * 2;
         try {
+            out.println("  Writing large file...");
+            long t0 = System.nanoTime();
             fc.write(ByteBuffer.wrap("Use the source!".getBytes()),
                      testSize - 40);
+            long t1 = System.nanoTime();
+            out.printf("  Wrote large file in %d ns (%d ms) %n",
+            t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
         } catch (IOException e) {
             // Can't set up the test, abort it
             err.println("xferTest05 was aborted.");
@@ -444,12 +455,12 @@
         RandomAccessFile raf = new RandomAccessFile(file, "rw");
         FileChannel fc = raf.getChannel();
 
-        out.println("  Creating large file...");
+        out.println("  Writing large file...");
         long t0 = System.nanoTime();
         try {
             fc.write(ByteBuffer.wrap("0123456789012345".getBytes("UTF-8")), 6*G);
             long t1 = System.nanoTime();
-            out.printf("  Created large file in %d ns (%d ms) %n",
+            out.printf("  Wrote large file in %d ns (%d ms) %n",
             t1 - t0, TimeUnit.NANOSECONDS.toMillis(t1 - t0));
         } catch (IOException x) {
             err.println("  Unable to create test file:" + x);
--- a/jdk/test/java/nio/channels/FileChannel/Transfers.java	Thu Mar 16 15:30:54 2017 +0000
+++ b/jdk/test/java/nio/channels/FileChannel/Transfers.java	Thu Mar 16 08:58:31 2017 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
  * @summary Comprehensive test for FileChannel.transfer{From,To}
  * @bug 4708120
  * @author Mark Reinhold
+ * @run main/timeout=300 Transfers
  */
 
 import java.io.*;