]> Cypherpunks repositories - gostls13.git/commitdiff
zip: add a test for the previous >65k files fix
authorBrad Fitzpatrick <bradfitz@golang.org>
Sat, 23 Jul 2011 01:30:07 +0000 (18:30 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sat, 23 Jul 2011 01:30:07 +0000 (18:30 -0700)
This surprisingly takes 30 seconds on my fast machine
so disabling by default. Need to optimize the Writer
at some point.

R=golang-dev, r, r
CC=golang-dev
https://golang.org/cl/4815048

src/pkg/archive/zip/zip_test.go [new file with mode: 0644]

diff --git a/src/pkg/archive/zip/zip_test.go b/src/pkg/archive/zip/zip_test.go
new file mode 100644 (file)
index 0000000..0f71fdf
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Tests that involve both reading and writing.
+
+package zip
+
+import (
+       "bytes"
+       "fmt"
+       "os"
+       "testing"
+)
+
+type stringReaderAt string
+
+func (s stringReaderAt) ReadAt(p []byte, off int64) (n int, err os.Error) {
+       if off >= int64(len(s)) {
+               return 0, os.EOF
+       }
+       n = copy(p, s[off:])
+       return
+}
+
+func TestOver65kFiles(t *testing.T) {
+       if testing.Short() {
+               t.Logf("slow test; skipping")
+               return
+       }
+       buf := new(bytes.Buffer)
+       w := NewWriter(buf)
+       const nFiles = (1 << 16) + 42
+       for i := 0; i < nFiles; i++ {
+               _, err := w.Create(fmt.Sprintf("%d.dat", i))
+               if err != nil {
+                       t.Fatalf("creating file %d: %v", i, err)
+               }
+       }
+       if err := w.Close(); err != nil {
+               t.Fatalf("Writer.Close: %v", err)
+       }
+       rat := stringReaderAt(buf.String())
+       zr, err := NewReader(rat, int64(len(rat)))
+       if err != nil {
+               t.Fatalf("NewReader: %v", err)
+       }
+       if got := len(zr.File); got != nFiles {
+               t.Fatalf("File contains %d files, want %d", got, nFiles)
+       }
+       for i := 0; i < nFiles; i++ {
+               want := fmt.Sprintf("%d.dat", i)
+               if zr.File[i].Name != want {
+                       t.Fatalf("File(%d) = %q, want %q", i, zr.File[i].Name, want)
+               }
+       }
+}