@@ -25,63 +25,62 @@ func TestOver65kFiles(t *testing.T) {
25
25
t .Skip ("skipping in short mode" )
26
26
}
27
27
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
+ }
75
52
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
+ }
79
67
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
+ })
85
84
}
86
85
}
87
86
0 commit comments