]> Cypherpunks repositories - gostls13.git/commitdiff
Add a GZIP test for the empty payload.
authorNigel Tao <nigeltao@golang.org>
Sat, 30 Jan 2010 00:54:39 +0000 (11:54 +1100)
committerNigel Tao <nigeltao@golang.org>
Sat, 30 Jan 2010 00:54:39 +0000 (11:54 +1100)
R=rsc, r
CC=golang-dev
https://golang.org/cl/194131

src/pkg/compress/gzip/gzip_test.go

index 292e2b6919fbda236146538a3512c420fe3e6c8f..3a9843fd59520d0484f5694de7c2361f08036762 100644 (file)
@@ -11,55 +11,75 @@ import (
        "testing"
 )
 
-// Tests that gzipping and then gunzipping is the identity function.
-func TestWriter(t *testing.T) {
-       // Set up the Pipe to do the gzip and gunzip.
+// pipe creates two ends of a pipe that gzip and gunzip, and runs dfunc at the
+// writer end and ifunc at the reader end.
+func pipe(t *testing.T, dfunc func(*Deflater), ifunc func(*Inflater)) {
        piper, pipew := io.Pipe()
        defer piper.Close()
        go func() {
                defer pipew.Close()
                deflater, err := NewDeflater(pipew)
                if err != nil {
-                       t.Errorf("%v", err)
-                       return
+                       t.Fatalf("%v", err)
                }
                defer deflater.Close()
-               deflater.Comment = "comment"
-               deflater.Extra = strings.Bytes("extra")
-               deflater.Mtime = 1e8
-               deflater.Name = "name"
-               _, err = deflater.Write(strings.Bytes("payload"))
-               if err != nil {
-                       t.Errorf("%v", err)
-                       return
-               }
+               dfunc(deflater)
        }()
        inflater, err := NewInflater(piper)
        if err != nil {
-               t.Errorf("%v", err)
-               return
+               t.Fatalf("%v", err)
        }
        defer inflater.Close()
+       ifunc(inflater)
+}
 
-       // Read and compare to the original input.
-       b, err := ioutil.ReadAll(inflater)
-       if err != nil {
-               t.Errorf(": %v", err)
-               return
-       }
-       if string(b) != "payload" {
-               t.Fatalf("payload is %q, want %q", string(b), "payload")
-       }
-       if inflater.Comment != "comment" {
-               t.Fatalf("comment is %q, want %q", inflater.Comment, "comment")
-       }
-       if string(inflater.Extra) != "extra" {
-               t.Fatalf("extra is %q, want %q", inflater.Extra, "extra")
-       }
-       if inflater.Mtime != 1e8 {
-               t.Fatalf("mtime is %d, want %d", inflater.Mtime, uint32(1e8))
-       }
-       if inflater.Name != "name" {
-               t.Fatalf("name is %q, want %q", inflater.Name, "name")
-       }
+// Tests that an empty payload still forms a valid GZIP stream.
+func TestEmpty(t *testing.T) {
+       pipe(t,
+               func(deflater *Deflater) {},
+               func(inflater *Inflater) {
+                       b, err := ioutil.ReadAll(inflater)
+                       if err != nil {
+                               t.Fatalf("%v", err)
+                       }
+                       if len(b) != 0 {
+                               t.Fatalf("did not read an empty slice")
+                       }
+               })
+}
+
+// Tests that gzipping and then gunzipping is the identity function.
+func TestWriter(t *testing.T) {
+       pipe(t,
+               func(deflater *Deflater) {
+                       deflater.Comment = "comment"
+                       deflater.Extra = strings.Bytes("extra")
+                       deflater.Mtime = 1e8
+                       deflater.Name = "name"
+                       _, err := deflater.Write(strings.Bytes("payload"))
+                       if err != nil {
+                               t.Fatalf("%v", err)
+                       }
+               },
+               func(inflater *Inflater) {
+                       b, err := ioutil.ReadAll(inflater)
+                       if err != nil {
+                               t.Fatalf("%v", err)
+                       }
+                       if string(b) != "payload" {
+                               t.Fatalf("payload is %q, want %q", string(b), "payload")
+                       }
+                       if inflater.Comment != "comment" {
+                               t.Fatalf("comment is %q, want %q", inflater.Comment, "comment")
+                       }
+                       if string(inflater.Extra) != "extra" {
+                               t.Fatalf("extra is %q, want %q", inflater.Extra, "extra")
+                       }
+                       if inflater.Mtime != 1e8 {
+                               t.Fatalf("mtime is %d, want %d", inflater.Mtime, uint32(1e8))
+                       }
+                       if inflater.Name != "name" {
+                               t.Fatalf("name is %q, want %q", inflater.Name, "name")
+                       }
+               })
 }