summaryrefslogtreecommitdiff
path: root/libgo/go/compress/gzip/gzip_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/compress/gzip/gzip_test.go')
-rw-r--r--libgo/go/compress/gzip/gzip_test.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/libgo/go/compress/gzip/gzip_test.go b/libgo/go/compress/gzip/gzip_test.go
index 865c529f55c..e16aba1572d 100644
--- a/libgo/go/compress/gzip/gzip_test.go
+++ b/libgo/go/compress/gzip/gzip_test.go
@@ -7,6 +7,7 @@ package gzip
import (
"bufio"
"bytes"
+ "io"
"io/ioutil"
"reflect"
"testing"
@@ -233,3 +234,40 @@ func TestWriterReset(t *testing.T) {
t.Errorf("buf2 %q != original buf of %q", buf2.String(), buf.String())
}
}
+
+type limitedWriter struct {
+ N int
+}
+
+func (l *limitedWriter) Write(p []byte) (n int, err error) {
+ if n := l.N; n < len(p) {
+ l.N = 0
+ return n, io.ErrShortWrite
+ }
+ l.N -= len(p)
+ return len(p), nil
+}
+
+// Write should never return more bytes than the input slice.
+func TestLimitedWrite(t *testing.T) {
+ msg := []byte("a")
+
+ for lim := 2; lim < 20; lim++ {
+ z := NewWriter(&limitedWriter{lim})
+ if n, _ := z.Write(msg); n > len(msg) {
+ t.Errorf("Write() = %d, want %d or less", n, len(msg))
+ }
+
+ z.Reset(&limitedWriter{lim})
+ z.Header = Header{
+ Comment: "comment",
+ Extra: []byte("extra"),
+ ModTime: time.Now(),
+ Name: "name",
+ OS: 1,
+ }
+ if n, _ := z.Write(msg); n > len(msg) {
+ t.Errorf("Write() = %d, want %d or less", n, len(msg))
+ }
+ }
+}