mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
archive/zip: add test for Modified vs ModTime behavior
Lock in fix for #22738, submitted in CL 78031. Fixes #22738. Change-Id: I6896feb158569e3f12fa7055387cbd7caad29ef4 Reviewed-on: https://go-review.googlesource.com/80635 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
parent
45c57e5907
commit
9cc9f10855
3 changed files with 197 additions and 176 deletions
|
|
@ -27,10 +27,11 @@ type ZipTest struct {
|
|||
}
|
||||
|
||||
type ZipTestFile struct {
|
||||
Name string
|
||||
Mode os.FileMode
|
||||
NonUTF8 bool
|
||||
ModTime time.Time
|
||||
Name string
|
||||
Mode os.FileMode
|
||||
NonUTF8 bool
|
||||
ModTime time.Time
|
||||
Modified time.Time
|
||||
|
||||
// Information describing expected zip file content.
|
||||
// First, reading the entire content should produce the error ContentErr.
|
||||
|
|
@ -54,16 +55,16 @@ var tests = []ZipTest{
|
|||
Comment: "This is a zipfile comment.",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte("This is a test text file.\n"),
|
||||
ModTime: time.Date(2010, 9, 5, 12, 12, 1, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "test.txt",
|
||||
Content: []byte("This is a test text file.\n"),
|
||||
Modified: time.Date(2010, 9, 5, 12, 12, 1, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
{
|
||||
Name: "gophercolor16x16.png",
|
||||
File: "gophercolor16x16.png",
|
||||
ModTime: time.Date(2010, 9, 5, 15, 52, 58, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "gophercolor16x16.png",
|
||||
File: "gophercolor16x16.png",
|
||||
Modified: time.Date(2010, 9, 5, 15, 52, 58, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -72,16 +73,16 @@ var tests = []ZipTest{
|
|||
Comment: "This is a zipfile comment.",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte("This is a test text file.\n"),
|
||||
ModTime: time.Date(2010, 9, 5, 12, 12, 1, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "test.txt",
|
||||
Content: []byte("This is a test text file.\n"),
|
||||
Modified: time.Date(2010, 9, 5, 12, 12, 1, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
{
|
||||
Name: "gophercolor16x16.png",
|
||||
File: "gophercolor16x16.png",
|
||||
ModTime: time.Date(2010, 9, 5, 15, 52, 58, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "gophercolor16x16.png",
|
||||
File: "gophercolor16x16.png",
|
||||
Modified: time.Date(2010, 9, 5, 15, 52, 58, 0, timeZone(+10*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -90,10 +91,10 @@ var tests = []ZipTest{
|
|||
Source: returnRecursiveZip,
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "r/r.zip",
|
||||
Content: rZipBytes(),
|
||||
ModTime: time.Date(2010, 3, 4, 0, 24, 16, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "r/r.zip",
|
||||
Content: rZipBytes(),
|
||||
Modified: time.Date(2010, 3, 4, 0, 24, 16, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -101,10 +102,10 @@ var tests = []ZipTest{
|
|||
Name: "symlink.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "symlink",
|
||||
Content: []byte("../target"),
|
||||
ModTime: time.Date(2012, 2, 3, 19, 56, 48, 0, timeZone(-2*time.Hour)),
|
||||
Mode: 0777 | os.ModeSymlink,
|
||||
Name: "symlink",
|
||||
Content: []byte("../target"),
|
||||
Modified: time.Date(2012, 2, 3, 19, 56, 48, 0, timeZone(-2*time.Hour)),
|
||||
Mode: 0777 | os.ModeSymlink,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -119,10 +120,10 @@ var tests = []ZipTest{
|
|||
Name: "dd.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "filename",
|
||||
Content: []byte("This is a test textfile.\n"),
|
||||
ModTime: time.Date(2011, 2, 2, 13, 6, 20, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "filename",
|
||||
Content: []byte("This is a test textfile.\n"),
|
||||
Modified: time.Date(2011, 2, 2, 13, 6, 20, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -131,28 +132,28 @@ var tests = []ZipTest{
|
|||
Name: "winxp.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "hello",
|
||||
Content: []byte("world \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 4, 24, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "hello",
|
||||
Content: []byte("world \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 4, 24, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
{
|
||||
Name: "dir/bar",
|
||||
Content: []byte("foo \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 4, 50, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "dir/bar",
|
||||
Content: []byte("foo \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 4, 50, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
{
|
||||
Name: "dir/empty/",
|
||||
Content: []byte{},
|
||||
ModTime: time.Date(2011, 12, 8, 10, 8, 6, 0, time.UTC),
|
||||
Mode: os.ModeDir | 0777,
|
||||
Name: "dir/empty/",
|
||||
Content: []byte{},
|
||||
Modified: time.Date(2011, 12, 8, 10, 8, 6, 0, time.UTC),
|
||||
Mode: os.ModeDir | 0777,
|
||||
},
|
||||
{
|
||||
Name: "readonly",
|
||||
Content: []byte("important \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 6, 8, 0, time.UTC),
|
||||
Mode: 0444,
|
||||
Name: "readonly",
|
||||
Content: []byte("important \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 6, 8, 0, time.UTC),
|
||||
Mode: 0444,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -161,28 +162,28 @@ var tests = []ZipTest{
|
|||
Name: "unix.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "hello",
|
||||
Content: []byte("world \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 4, 24, 0, timeZone(0)),
|
||||
Mode: 0666,
|
||||
Name: "hello",
|
||||
Content: []byte("world \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 4, 24, 0, timeZone(0)),
|
||||
Mode: 0666,
|
||||
},
|
||||
{
|
||||
Name: "dir/bar",
|
||||
Content: []byte("foo \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 4, 50, 0, timeZone(0)),
|
||||
Mode: 0666,
|
||||
Name: "dir/bar",
|
||||
Content: []byte("foo \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 4, 50, 0, timeZone(0)),
|
||||
Mode: 0666,
|
||||
},
|
||||
{
|
||||
Name: "dir/empty/",
|
||||
Content: []byte{},
|
||||
ModTime: time.Date(2011, 12, 8, 10, 8, 6, 0, timeZone(0)),
|
||||
Mode: os.ModeDir | 0777,
|
||||
Name: "dir/empty/",
|
||||
Content: []byte{},
|
||||
Modified: time.Date(2011, 12, 8, 10, 8, 6, 0, timeZone(0)),
|
||||
Mode: os.ModeDir | 0777,
|
||||
},
|
||||
{
|
||||
Name: "readonly",
|
||||
Content: []byte("important \r\n"),
|
||||
ModTime: time.Date(2011, 12, 8, 10, 6, 8, 0, timeZone(0)),
|
||||
Mode: 0444,
|
||||
Name: "readonly",
|
||||
Content: []byte("important \r\n"),
|
||||
Modified: time.Date(2011, 12, 8, 10, 6, 8, 0, timeZone(0)),
|
||||
Mode: 0444,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -192,16 +193,16 @@ var tests = []ZipTest{
|
|||
Name: "go-no-datadesc-sig.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
{
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -211,16 +212,16 @@ var tests = []ZipTest{
|
|||
Name: "go-with-datadesc-sig.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
ModTime: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
Modified: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
{
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
ModTime: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
Modified: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -231,15 +232,15 @@ var tests = []ZipTest{
|
|||
{
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
ModTime: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Modified: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
ContentErr: ErrChecksum,
|
||||
},
|
||||
{
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
ModTime: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
Modified: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -249,16 +250,16 @@ var tests = []ZipTest{
|
|||
Name: "crc32-not-streamed.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
{
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -271,15 +272,15 @@ var tests = []ZipTest{
|
|||
{
|
||||
Name: "foo.txt",
|
||||
Content: []byte("foo\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 10, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
ContentErr: ErrChecksum,
|
||||
},
|
||||
{
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
ModTime: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "bar.txt",
|
||||
Content: []byte("bar\n"),
|
||||
Modified: time.Date(2012, 3, 8, 16, 59, 12, 0, timeZone(-8*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -287,10 +288,10 @@ var tests = []ZipTest{
|
|||
Name: "zip64.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "README",
|
||||
Content: []byte("This small file is in ZIP64 format.\n"),
|
||||
ModTime: time.Date(2012, 8, 10, 14, 33, 32, 0, time.UTC),
|
||||
Mode: 0644,
|
||||
Name: "README",
|
||||
Content: []byte("This small file is in ZIP64 format.\n"),
|
||||
Modified: time.Date(2012, 8, 10, 14, 33, 32, 0, time.UTC),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -299,10 +300,10 @@ var tests = []ZipTest{
|
|||
Name: "zip64-2.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "README",
|
||||
Content: []byte("This small file is in ZIP64 format.\n"),
|
||||
ModTime: time.Date(2012, 8, 10, 14, 33, 32, 0, timeZone(-4*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "README",
|
||||
Content: []byte("This small file is in ZIP64 format.\n"),
|
||||
Modified: time.Date(2012, 8, 10, 14, 33, 32, 0, timeZone(-4*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -312,11 +313,11 @@ var tests = []ZipTest{
|
|||
Source: returnBigZipBytes,
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "big.file",
|
||||
Content: nil,
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "big.file",
|
||||
Content: nil,
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(1979, 11, 30, 0, 0, 0, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -324,10 +325,10 @@ var tests = []ZipTest{
|
|||
Name: "utf8-7zip.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
ModTime: time.Date(2017, 11, 6, 13, 9, 27, 867862500, timeZone(-8*time.Hour)),
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
Modified: time.Date(2017, 11, 6, 13, 9, 27, 867862500, timeZone(-8*time.Hour)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -342,8 +343,8 @@ var tests = []ZipTest{
|
|||
// We don't do UTF-8 detection for multi-byte runes due to
|
||||
// false-positives with other encodings (e.g., Shift-JIS).
|
||||
// Format says encoding is not UTF-8, so we trust it.
|
||||
NonUTF8: true,
|
||||
ModTime: time.Date(2017, 11, 6, 13, 9, 27, 0, timeZone(-8*time.Hour)),
|
||||
NonUTF8: true,
|
||||
Modified: time.Date(2017, 11, 6, 13, 9, 27, 0, timeZone(-8*time.Hour)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -355,8 +356,8 @@ var tests = []ZipTest{
|
|||
Content: []byte{},
|
||||
Mode: 0644,
|
||||
// Name is valid UTF-8, but format does not have UTF-8 set.
|
||||
NonUTF8: true,
|
||||
ModTime: time.Date(2017, 11, 6, 13, 9, 27, 0, timeZone(-8*time.Hour)),
|
||||
NonUTF8: true,
|
||||
Modified: time.Date(2017, 11, 6, 13, 9, 27, 0, timeZone(-8*time.Hour)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -364,10 +365,10 @@ var tests = []ZipTest{
|
|||
Name: "utf8-winrar.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
ModTime: time.Date(2017, 11, 6, 13, 9, 27, 867862500, timeZone(-8*time.Hour)),
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
Modified: time.Date(2017, 11, 6, 13, 9, 27, 867862500, timeZone(-8*time.Hour)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -375,10 +376,10 @@ var tests = []ZipTest{
|
|||
Name: "utf8-winzip.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
ModTime: time.Date(2017, 11, 6, 13, 9, 27, 867000000, timeZone(-8*time.Hour)),
|
||||
Name: "世界",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
Modified: time.Date(2017, 11, 6, 13, 9, 27, 867000000, timeZone(-8*time.Hour)),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -386,11 +387,11 @@ var tests = []ZipTest{
|
|||
Name: "time-7zip.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 57, 244817900, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 57, 244817900, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -398,11 +399,11 @@ var tests = []ZipTest{
|
|||
Name: "time-infozip.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 57, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 57, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -410,11 +411,11 @@ var tests = []ZipTest{
|
|||
Name: "time-osx.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 17, 27, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0644,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 17, 27, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0644,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -422,11 +423,11 @@ var tests = []ZipTest{
|
|||
Name: "time-win7.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 58, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 58, 0, time.UTC),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -434,11 +435,11 @@ var tests = []ZipTest{
|
|||
Name: "time-winrar.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 57, 244817900, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 57, 244817900, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -446,11 +447,11 @@ var tests = []ZipTest{
|
|||
Name: "time-winzip.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 57, 244000000, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 57, 244000000, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -458,11 +459,23 @@ var tests = []ZipTest{
|
|||
Name: "time-go.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
ModTime: time.Date(2017, 10, 31, 21, 11, 57, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
Name: "test.txt",
|
||||
Content: []byte{},
|
||||
Size: 1<<32 - 1,
|
||||
Modified: time.Date(2017, 10, 31, 21, 11, 57, 0, timeZone(-7*time.Hour)),
|
||||
Mode: 0666,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "time-22738.zip",
|
||||
File: []ZipTestFile{
|
||||
{
|
||||
Name: "file",
|
||||
Content: []byte{},
|
||||
Mode: 0666,
|
||||
Modified: time.Date(1999, 12, 31, 19, 0, 0, 0, timeZone(-5*time.Hour)),
|
||||
ModTime: time.Date(1999, 12, 31, 19, 0, 0, 0, time.UTC),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -470,7 +483,9 @@ var tests = []ZipTest{
|
|||
|
||||
func TestReader(t *testing.T) {
|
||||
for _, zt := range tests {
|
||||
readTestZip(t, zt)
|
||||
t.Run(zt.Name, func(t *testing.T) {
|
||||
readTestZip(t, zt)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -489,7 +504,7 @@ func readTestZip(t *testing.T, zt ZipTest) {
|
|||
}
|
||||
}
|
||||
if err != zt.Error {
|
||||
t.Errorf("%s: error=%v, want %v", zt.Name, err, zt.Error)
|
||||
t.Errorf("error=%v, want %v", err, zt.Error)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -505,16 +520,19 @@ func readTestZip(t *testing.T, zt ZipTest) {
|
|||
}
|
||||
|
||||
if z.Comment != zt.Comment {
|
||||
t.Errorf("%s: comment=%q, want %q", zt.Name, z.Comment, zt.Comment)
|
||||
t.Errorf("comment=%q, want %q", z.Comment, zt.Comment)
|
||||
}
|
||||
if len(z.File) != len(zt.File) {
|
||||
t.Fatalf("%s: file count=%d, want %d", zt.Name, len(z.File), len(zt.File))
|
||||
t.Fatalf("file count=%d, want %d", len(z.File), len(zt.File))
|
||||
}
|
||||
|
||||
// test read of each file
|
||||
for i, ft := range zt.File {
|
||||
readTestFile(t, zt, ft, z.File[i])
|
||||
}
|
||||
if t.Failed() {
|
||||
return
|
||||
}
|
||||
|
||||
// test simultaneous reads
|
||||
n := 0
|
||||
|
|
@ -541,13 +559,16 @@ func equalTimeAndZone(t1, t2 time.Time) bool {
|
|||
|
||||
func readTestFile(t *testing.T, zt ZipTest, ft ZipTestFile, f *File) {
|
||||
if f.Name != ft.Name {
|
||||
t.Errorf("%s: name=%q, want %q", zt.Name, f.Name, ft.Name)
|
||||
t.Errorf("name=%q, want %q", f.Name, ft.Name)
|
||||
}
|
||||
if !equalTimeAndZone(f.Modified, ft.ModTime) {
|
||||
t.Errorf("%s: %s: mtime=%s, want %s", zt.Name, f.Name, f.Modified, ft.ModTime)
|
||||
if !ft.Modified.IsZero() && !equalTimeAndZone(f.Modified, ft.Modified) {
|
||||
t.Errorf("%s: Modified=%s, want %s", f.Name, f.Modified, ft.Modified)
|
||||
}
|
||||
if !ft.ModTime.IsZero() && !equalTimeAndZone(f.ModTime(), ft.ModTime) {
|
||||
t.Errorf("%s: ModTime=%s, want %s", f.Name, f.ModTime(), ft.ModTime)
|
||||
}
|
||||
|
||||
testFileMode(t, zt.Name, f, ft.Mode)
|
||||
testFileMode(t, f, ft.Mode)
|
||||
|
||||
size := uint64(f.UncompressedSize)
|
||||
if size == uint32max {
|
||||
|
|
@ -558,7 +579,7 @@ func readTestFile(t *testing.T, zt ZipTest, ft ZipTestFile, f *File) {
|
|||
|
||||
r, err := f.Open()
|
||||
if err != nil {
|
||||
t.Errorf("%s: %v", zt.Name, err)
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -576,7 +597,7 @@ func readTestFile(t *testing.T, zt ZipTest, ft ZipTestFile, f *File) {
|
|||
var b bytes.Buffer
|
||||
_, err = io.Copy(&b, r)
|
||||
if err != ft.ContentErr {
|
||||
t.Errorf("%s: copying contents: %v (want %v)", zt.Name, err, ft.ContentErr)
|
||||
t.Errorf("copying contents: %v (want %v)", err, ft.ContentErr)
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
|
|
@ -608,12 +629,12 @@ func readTestFile(t *testing.T, zt ZipTest, ft ZipTestFile, f *File) {
|
|||
}
|
||||
}
|
||||
|
||||
func testFileMode(t *testing.T, zipName string, f *File, want os.FileMode) {
|
||||
func testFileMode(t *testing.T, f *File, want os.FileMode) {
|
||||
mode := f.Mode()
|
||||
if want == 0 {
|
||||
t.Errorf("%s: %s mode: got %v, want none", zipName, f.Name, mode)
|
||||
t.Errorf("%s mode: got %v, want none", f.Name, mode)
|
||||
} else if mode != want {
|
||||
t.Errorf("%s: %s mode: want %v, got %v", zipName, f.Name, want, mode)
|
||||
t.Errorf("%s mode: want %v, got %v", f.Name, want, mode)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue