8038330: tools/jar/JarEntryTime.java fails intermittently on checking extracted file last modified values are the current times
Reviewed-by: sherman, plevart
This commit is contained in:
parent
66965df3dc
commit
8a433e443e
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -31,6 +31,8 @@
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.nio.file.attribute.FileTime;
|
import java.nio.file.attribute.FileTime;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.TimeZone;
|
||||||
import sun.tools.jar.Main;
|
import sun.tools.jar.Main;
|
||||||
|
|
||||||
public class JarEntryTime {
|
public class JarEntryTime {
|
||||||
@ -39,6 +41,9 @@ public class JarEntryTime {
|
|||||||
// allow for e.g. rounding/truncation and networked/samba drives.
|
// allow for e.g. rounding/truncation and networked/samba drives.
|
||||||
static final long PRECISION = 10000L;
|
static final long PRECISION = 10000L;
|
||||||
|
|
||||||
|
static final TimeZone TZ = TimeZone.getDefault();
|
||||||
|
static final boolean DST = TZ.inDaylightTime(new Date());
|
||||||
|
|
||||||
static boolean cleanup(File dir) throws Throwable {
|
static boolean cleanup(File dir) throws Throwable {
|
||||||
boolean rc = true;
|
boolean rc = true;
|
||||||
File[] x = dir.listFiles();
|
File[] x = dir.listFiles();
|
||||||
@ -75,11 +80,13 @@ public class JarEntryTime {
|
|||||||
File dirOuter = new File("outer");
|
File dirOuter = new File("outer");
|
||||||
File dirInner = new File(dirOuter, "inner");
|
File dirInner = new File(dirOuter, "inner");
|
||||||
File jarFile = new File("JarEntryTime.jar");
|
File jarFile = new File("JarEntryTime.jar");
|
||||||
|
File testFile = new File("JarEntryTimeTest.txt");
|
||||||
|
|
||||||
// Remove any leftovers from prior run
|
// Remove any leftovers from prior run
|
||||||
cleanup(dirInner);
|
cleanup(dirInner);
|
||||||
cleanup(dirOuter);
|
cleanup(dirOuter);
|
||||||
jarFile.delete();
|
jarFile.delete();
|
||||||
|
testFile.delete();
|
||||||
|
|
||||||
/* Create a directory structure
|
/* Create a directory structure
|
||||||
* outer/
|
* outer/
|
||||||
@ -129,23 +136,39 @@ public class JarEntryTime {
|
|||||||
check(cleanup(dirInner));
|
check(cleanup(dirInner));
|
||||||
check(cleanup(dirOuter));
|
check(cleanup(dirOuter));
|
||||||
|
|
||||||
|
try (PrintWriter pw = new PrintWriter(testFile)) {
|
||||||
|
pw.println("hello, world");
|
||||||
|
}
|
||||||
|
final long start = testFile.lastModified();
|
||||||
|
|
||||||
// Extract and check the last modified values are the current times.
|
// Extract and check the last modified values are the current times.
|
||||||
// See sun.tools.jar.Main
|
// See sun.tools.jar.Main
|
||||||
extractJar(jarFile, true);
|
extractJar(jarFile, true);
|
||||||
|
|
||||||
|
try (PrintWriter pw = new PrintWriter(testFile)) {
|
||||||
|
pw.println("hello, world");
|
||||||
|
}
|
||||||
|
final long end = testFile.lastModified();
|
||||||
|
|
||||||
check(dirOuter.exists());
|
check(dirOuter.exists());
|
||||||
check(dirInner.exists());
|
check(dirInner.exists());
|
||||||
check(fileInner.exists());
|
check(fileInner.exists());
|
||||||
checkFileTime(dirOuter.lastModified(), now);
|
checkFileTime(start, dirOuter.lastModified(), end);
|
||||||
checkFileTime(dirInner.lastModified(), now);
|
checkFileTime(start, dirInner.lastModified(), end);
|
||||||
checkFileTime(fileInner.lastModified(), now);
|
checkFileTime(start, fileInner.lastModified(), end);
|
||||||
|
|
||||||
check(cleanup(dirInner));
|
check(cleanup(dirInner));
|
||||||
check(cleanup(dirOuter));
|
check(cleanup(dirOuter));
|
||||||
|
|
||||||
check(jarFile.delete());
|
check(jarFile.delete());
|
||||||
|
check(testFile.delete());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void checkFileTime(long now, long original) {
|
static void checkFileTime(long now, long original) {
|
||||||
|
if (isTimeSettingChanged()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (Math.abs(now - original) > PRECISION) {
|
if (Math.abs(now - original) > PRECISION) {
|
||||||
System.out.format("Extracted to %s, expected to be close to %s%n",
|
System.out.format("Extracted to %s, expected to be close to %s%n",
|
||||||
FileTime.fromMillis(now), FileTime.fromMillis(original));
|
FileTime.fromMillis(now), FileTime.fromMillis(original));
|
||||||
@ -153,6 +176,27 @@ public class JarEntryTime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void checkFileTime(long start, long now, long end) {
|
||||||
|
if (isTimeSettingChanged()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (now < start || now > end) {
|
||||||
|
System.out.format("Extracted to %s, "
|
||||||
|
+ "expected to be after %s and before %s%n",
|
||||||
|
FileTime.fromMillis(now),
|
||||||
|
FileTime.fromMillis(start),
|
||||||
|
FileTime.fromMillis(end));
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isTimeSettingChanged() {
|
||||||
|
TimeZone currentTZ = TimeZone.getDefault();
|
||||||
|
boolean currentDST = currentTZ.inDaylightTime(new Date());
|
||||||
|
return (!currentTZ.equals(TZ) || currentDST != DST);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------- Infrastructure ---------------------------
|
//--------------------- Infrastructure ---------------------------
|
||||||
static volatile int passed = 0, failed = 0;
|
static volatile int passed = 0, failed = 0;
|
||||||
static void pass() {passed++;}
|
static void pass() {passed++;}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user