1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 // TODO(adg): a more sophisticated test suite
17 type WriteTest
struct {
24 var writeTests
= []WriteTest
{
27 Data
: []byte("Rabbits, guinea pigs, gophers, marsupial rats, and quolls."),
33 Data
: nil, // large data set in the test
39 Data
: []byte("setuid file"),
41 Mode
: 0755 | os
.ModeSetuid
,
45 Data
: []byte("setgid file"),
47 Mode
: 0755 | os
.ModeSetgid
,
51 Data
: []byte("../link/target"),
53 Mode
: 0755 | os
.ModeSymlink
,
57 func TestWriter(t
*testing
.T
) {
58 largeData
:= make([]byte, 1<<17)
59 for i
:= range largeData
{
60 largeData
[i
] = byte(rand
.Int())
62 writeTests
[1].Data
= largeData
64 writeTests
[1].Data
= nil
68 buf
:= new(bytes
.Buffer
)
71 for _
, wt
:= range writeTests
{
75 if err
:= w
.Close(); err
!= nil {
80 r
, err
:= NewReader(bytes
.NewReader(buf
.Bytes()), int64(buf
.Len()))
84 for i
, wt
:= range writeTests
{
85 testReadFile(t
, r
.File
[i
], &wt
)
89 func testCreate(t
*testing
.T
, w
*Writer
, wt
*WriteTest
) {
90 header
:= &FileHeader
{
95 header
.SetMode(wt
.Mode
)
97 f
, err
:= w
.CreateHeader(header
)
101 _
, err
= f
.Write(wt
.Data
)
107 func testReadFile(t
*testing
.T
, f
*File
, wt
*WriteTest
) {
108 if f
.Name
!= wt
.Name
{
109 t
.Fatalf("File name: got %q, want %q", f
.Name
, wt
.Name
)
111 testFileMode(t
, wt
.Name
, f
, wt
.Mode
)
114 t
.Fatal("opening:", err
)
116 b
, err
:= ioutil
.ReadAll(rc
)
118 t
.Fatal("reading:", err
)
122 t
.Fatal("closing:", err
)
124 if !bytes
.Equal(b
, wt
.Data
) {
125 t
.Errorf("File contents %q, want %q", b
, wt
.Data
)
129 func BenchmarkCompressedZipGarbage(b
*testing
.B
) {
132 bigBuf
:= bytes
.Repeat([]byte("a"), 1<<20)
133 for i
:= 0; i
< b
.N
; i
++ {
135 zw
:= NewWriter(&buf
)
136 for j
:= 0; j
< 3; j
++ {
137 w
, _
:= zw
.CreateHeader(&FileHeader
{