Repository: commons-compress Updated Branches: refs/heads/master 1e592b52c -> a2cda30be
COMPRESS-326 adjust tests to changes in Java's zip package Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/a2cda30b Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/a2cda30b Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/a2cda30b Branch: refs/heads/master Commit: a2cda30be14b3da01cbbbedc41b70daf6d88da8b Parents: 1e592b5 Author: Stefan Bodewig <stefan.bode...@innoq.com> Authored: Sat Oct 24 08:18:59 2015 +0200 Committer: Stefan Bodewig <stefan.bode...@innoq.com> Committed: Sat Oct 24 08:18:59 2015 +0200 ---------------------------------------------------------------------- src/changes/changes.xml | 4 ++ .../compress/archivers/zip/ZipArchiveEntry.java | 8 ++++ src/site/xdoc/limitations.xml | 4 ++ .../zip/X5455_ExtendedTimestampTest.java | 43 +++++++++++++------- 4 files changed, 45 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a2cda30b/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7b312a7..8ce601e 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -44,6 +44,10 @@ The <action> type attribute can be add,update,fix,remove. <body> <release version="1.11" date="not released, yet" description="Release 1.11"> + <action issue="COMPRESS-326" type="fix" date="2015-10-24"> + Adjusted unit test to updates in Java8 and later that change + the logic of ZipEntry#getTime. + </action> <action issue="COMPRESS-324" type="fix" date="2015-10-06"> TarArchiveOutputStream will now recognize GNU long name and link entries even if the special entry has a different name http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a2cda30b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java index 4f66373..13db0ce 100644 --- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java +++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java @@ -743,6 +743,14 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry } } + /** + * Wraps {@link ZipEntry#getTime} with a {@link Date} as the + * entry's last modified date. + * + * <p>Changes to the implementation of {@link ZipEntry#getTime} + * leak through and the returned value may depend on your local + * time zone as well as your version of Java.</p> + */ public Date getLastModifiedDate() { return new Date(getTime()); } http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a2cda30b/src/site/xdoc/limitations.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/limitations.xml b/src/site/xdoc/limitations.xml index 686951e..851f93e 100644 --- a/src/site/xdoc/limitations.xml +++ b/src/site/xdoc/limitations.xml @@ -165,6 +165,10 @@ of an archive will not be read correctly by <code>ZipArchiveInputStream</code> if it used the STORED method.</li> + <li><code>ZipArchiveEntry#getLastModifiedDate</code> uses + <code>ZipEntry#getTime</code> under the covers which may + return different times for the same archive when using + different versions onf Java.</li> </ul> </section> </body> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/a2cda30b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java index 4761654..8447669 100644 --- a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java @@ -100,6 +100,11 @@ public class X5455_ExtendedTimestampTest { 1999's zip time: Jan 1st, 1999-01-01/00:00:02 1999's mod time: Jan 1st, 1999-01-01/00:00:01 1999's acc time: Jan 1st, 1999-01-01/00:00:03 + + Starting with a patch release of Java8, "zip time" actually + uses the extended time stamp field itself and should be the + same as "mod time". + http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/90df6756406f */ File archive = getFile("COMPRESS-210_unix_time_zip_test.zip"); @@ -116,8 +121,10 @@ public class X5455_ExtendedTimestampTest { ZipArchiveEntry zae = en.nextElement(); String name = zae.getName(); X5455_ExtendedTimestamp xf = (X5455_ExtendedTimestamp) zae.getExtraField(X5455); - Date z = adjustFromGMTToExpectedOffset(zae.getLastModifiedDate()); + Date rawZ = zae.getLastModifiedDate(); Date m = xf.getModifyJavaTime(); + boolean zipTimeUsesExtendedTimestamp = rawZ.equals(m); + Date z = zipTimeUsesExtendedTimestamp ? rawZ : adjustFromGMTToExpectedOffset(rawZ); Date a = xf.getAccessJavaTime(); String zipTime = DATE_FORMAT.format(z); @@ -136,24 +143,30 @@ public class X5455_ExtendedTimestampTest { if (year >= 0) { switch (year) { case 2107: - // Zip time is okay up to 2107. - assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + if (!zipTimeUsesExtendedTimestamp) { + // Zip time is okay up to 2107. + assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + } // But the X5455 data has overflowed: assertEquals("1970-11-24/17:31:45 +0000", modTime); assertEquals("1970-11-24/17:31:47 +0000", accTime); break; case 2108: - // Zip time is still okay at Jan 1st midnight (UTC) in 2108 - // because we created the zip file in pacific time zone, so it's - // actually still 2107 in the zip file! - assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + if (!zipTimeUsesExtendedTimestamp) { + // Zip time is still okay at Jan 1st midnight (UTC) in 2108 + // because we created the zip file in pacific time zone, so it's + // actually still 2107 in the zip file! + assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + } // The X5455 data is still overflowed, of course: assertEquals("1971-11-24/17:31:45 +0000", modTime); assertEquals("1971-11-24/17:31:47 +0000", accTime); break; case 2109: // All three timestamps have overflowed by 2109. - assertEquals("1981-01-01/00:00:02 +0000", zipTime); + if (!zipTimeUsesExtendedTimestamp) { + assertEquals("1981-01-01/00:00:02 +0000", zipTime); + } assertEquals("1972-11-24/17:31:45 +0000", modTime); assertEquals("1972-11-24/17:31:47 +0000", accTime); @@ -163,12 +176,14 @@ public class X5455_ExtendedTimestampTest { break; default: - // X5455 time is good from epoch (1970) to 2106. - // Zip time is good from 1980 to 2107. - if (year < 1980) { - assertEquals("1980-01-01/08:00:00 +0000", zipTime); - } else { - assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + if (!zipTimeUsesExtendedTimestamp) { + // X5455 time is good from epoch (1970) to 2106. + // Zip time is good from 1980 to 2107. + if (year < 1980) { + assertEquals("1980-01-01/08:00:00 +0000", zipTime); + } else { + assertEquals(year + "-01-01/00:00:02 +0000", zipTime); + } } assertEquals(year + "-01-01/00:00:01 +0000", modTime); assertEquals(year + "-01-01/00:00:03 +0000", accTime);