# HG changeset patch # User alanb # Date 1384873788 0 # Node ID 4810bf82fa69ec32233267773fb5d566eb11fd8e # Parent 47aa8bf866e2118dc6c6ec7a26ae440a351e4122 8028589: Instrument tools/jar/JarEntryTime.java to make it easier to diagnose failures Reviewed-by: chegar diff -r 47aa8bf866e2 -r 4810bf82fa69 jdk/test/tools/jar/JarEntryTime.java --- a/jdk/test/tools/jar/JarEntryTime.java Tue Nov 19 14:47:48 2013 +0000 +++ b/jdk/test/tools/jar/JarEntryTime.java Tue Nov 19 15:09:48 2013 +0000 @@ -29,10 +29,15 @@ import java.io.File; import java.io.PrintWriter; -import java.util.Date; +import java.nio.file.attribute.FileTime; import sun.tools.jar.Main; public class JarEntryTime { + + // ZipEntry's mod date has 2 seconds precision: give extra time to + // allow for e.g. rounding/truncation and networked/samba drives. + static final long PRECISION = 10000L; + static boolean cleanup(File dir) throws Throwable { boolean rc = true; File[] x = dir.listFiles(); @@ -88,9 +93,9 @@ check(dirOuter.mkdir()); check(dirInner.mkdir()); File fileInner = new File(dirInner, "foo.txt"); - PrintWriter pw = new PrintWriter(fileInner); - pw.println("hello, world"); - pw.close(); + try (PrintWriter pw = new PrintWriter(fileInner)) { + pw.println("hello, world"); + } // Get the "now" from the "last-modified-time" of the last file we // just created, instead of the "System.currentTimeMillis()", to @@ -98,13 +103,10 @@ final long now = fileInner.lastModified(); final long earlier = now - (60L * 60L * 6L * 1000L); final long yesterday = now - (60L * 60L * 24L * 1000L); - // ZipEntry's mod date has 2 seconds precision: give extra time to - // allow for e.g. rounding/truncation and networked/samba drives. - final long PRECISION = 10000L; - dirOuter.setLastModified(now); - dirInner.setLastModified(yesterday); - fileInner.setLastModified(earlier); + check(dirOuter.setLastModified(now)); + check(dirInner.setLastModified(yesterday)); + check(fileInner.setLastModified(earlier)); // Make a jar file from that directory structure Main jartool = new Main(System.out, System.err, "jar"); @@ -122,9 +124,9 @@ check(dirOuter.exists()); check(dirInner.exists()); check(fileInner.exists()); - check(Math.abs(dirOuter.lastModified() - now) <= PRECISION); - check(Math.abs(dirInner.lastModified() - yesterday) <= PRECISION); - check(Math.abs(fileInner.lastModified() - earlier) <= PRECISION); + checkFileTime(dirOuter.lastModified(), now); + checkFileTime(dirInner.lastModified(), yesterday); + checkFileTime(fileInner.lastModified(), earlier); check(cleanup(dirInner)); check(cleanup(dirOuter)); @@ -135,9 +137,9 @@ check(dirOuter.exists()); check(dirInner.exists()); check(fileInner.exists()); - check(Math.abs(dirOuter.lastModified() - now) <= PRECISION); - check(Math.abs(dirInner.lastModified() - now) <= PRECISION); - check(Math.abs(fileInner.lastModified() - now) <= PRECISION); + checkFileTime(dirOuter.lastModified(), now); + checkFileTime(dirInner.lastModified(), now); + checkFileTime(fileInner.lastModified(), now); check(cleanup(dirInner)); check(cleanup(dirOuter)); @@ -145,6 +147,14 @@ check(jarFile.delete()); } + static void checkFileTime(long now, long original) { + if (Math.abs(now - original) > PRECISION) { + System.out.format("Extracted to %s, expected to be close to %s%n", + FileTime.fromMillis(now), FileTime.fromMillis(original)); + fail(); + } + } + //--------------------- Infrastructure --------------------------- static volatile int passed = 0, failed = 0; static void pass() {passed++;}