Skip to content

Commit e1f6aa8

Browse files
committed
Use AllocsPerRun, test Store method too
1 parent f7e416a commit e1f6aa8

File tree

1 file changed

+54
-55
lines changed

1 file changed

+54
-55
lines changed

src/archive/zip/zip_test.go

+54-55
Original file line numberDiff line numberDiff line change
@@ -25,63 +25,62 @@ func TestOver65kFiles(t *testing.T) {
2525
t.Skip("skipping in short mode")
2626
}
2727

28-
memStatBeforeWriter := runtime.MemStats{}
29-
runtime.GC() // to guarantee mem stat is up to date
30-
runtime.ReadMemStats(&memStatBeforeWriter)
31-
32-
buf := new(strings.Builder)
33-
w := NewWriter(buf)
34-
const nFiles = (1 << 16) + 42
35-
for i := 0; i < nFiles; i++ {
36-
_, err := w.CreateHeader(&FileHeader{
37-
Name: fmt.Sprintf("%d.dat", i),
38-
Method: Deflate, // test Issue 59775
39-
})
40-
if err != nil {
41-
t.Fatalf("creating file %d: %v", i, err)
42-
}
43-
}
44-
if err := w.Close(); err != nil {
45-
t.Fatalf("Writer.Close: %v", err)
46-
}
47-
48-
memStatBeforeReader := runtime.MemStats{}
49-
runtime.GC()
50-
runtime.ReadMemStats(&memStatBeforeReader)
51-
52-
s := buf.String()
53-
zr, err := NewReader(strings.NewReader(s), int64(len(s)))
54-
if err != nil {
55-
t.Fatalf("NewReader: %v", err)
56-
}
57-
if got := len(zr.File); got != nFiles {
58-
t.Fatalf("File contains %d files, want %d", got, nFiles)
59-
}
60-
for i := 0; i < nFiles; i++ {
61-
want := fmt.Sprintf("%d.dat", i)
62-
if zr.File[i].Name != want {
63-
t.Fatalf("File(%d) = %q, want %q", i, zr.File[i].Name, want)
64-
}
65-
}
66-
for i := 0; i < nFiles; i++ {
67-
f, err := zr.File[i].Open()
68-
if err != nil {
69-
t.Fatalf("File(%d).Open: %v", i, err)
70-
}
71-
if err := f.Close(); err != nil {
72-
t.Fatalf("File(%d).Open().Close: %v", i, err)
73-
}
74-
}
28+
testCases := []struct {
29+
name string
30+
method uint16
31+
}{
32+
{"Store", Store},
33+
{"Deflate", Deflate},
34+
}
35+
for _, tc := range testCases {
36+
t.Run(tc.name, func(t *testing.T) {
37+
buf := new(strings.Builder)
38+
w := NewWriter(buf)
39+
const nFiles = (1 << 16) + 42
40+
for i := 0; i < nFiles; i++ {
41+
_, err := w.CreateHeader(&FileHeader{
42+
Name: fmt.Sprintf("%d.dat", i),
43+
Method: tc.method,
44+
})
45+
if err != nil {
46+
t.Fatalf("creating file %d: %v", i, err)
47+
}
48+
}
49+
if err := w.Close(); err != nil {
50+
t.Fatalf("Writer.Close: %v", err)
51+
}
7552

76-
memStatAfter := runtime.MemStats{}
77-
runtime.GC()
78-
runtime.ReadMemStats(&memStatAfter)
53+
s := buf.String()
54+
zr, err := NewReader(strings.NewReader(s), int64(len(s)))
55+
if err != nil {
56+
t.Fatalf("NewReader: %v", err)
57+
}
58+
if got := len(zr.File); got != nFiles {
59+
t.Fatalf("File contains %d files, want %d", got, nFiles)
60+
}
61+
for i := 0; i < nFiles; i++ {
62+
want := fmt.Sprintf("%d.dat", i)
63+
if zr.File[i].Name != want {
64+
t.Fatalf("File(%d) = %q, want %q", i, zr.File[i].Name, want)
65+
}
66+
}
7967

80-
if alloc := memStatBeforeReader.TotalAlloc - memStatBeforeWriter.TotalAlloc; alloc > 150<<20 {
81-
t.Errorf("allocated too much (%v MB) creating zip file", alloc>>20)
82-
}
83-
if alloc := memStatAfter.TotalAlloc - memStatBeforeReader.TotalAlloc; alloc > 70<<20 {
84-
t.Errorf("allocated too much (%v MB) reading zip file", alloc>>20)
68+
// Test Issue 59775
69+
allocs := testing.AllocsPerRun(1, func() {
70+
for i := 0; i < nFiles; i++ {
71+
f, err := zr.File[i].Open()
72+
if err != nil {
73+
t.Fatalf("File(%d).Open: %v", i, err)
74+
}
75+
if err := f.Close(); err != nil {
76+
t.Fatalf("File(%d).Open().Close: %v", i, err)
77+
}
78+
}
79+
})
80+
if allocs > 450_000 {
81+
t.Errorf("allocated too much objects (%v) opening zip files", allocs)
82+
}
83+
})
8584
}
8685
}
8786

0 commit comments

Comments
 (0)