Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libgo / go / net / http / httputil / chunked_test.go
index 155a32b..a06bffa 100644 (file)
@@ -11,7 +11,10 @@ package httputil
 
 import (
        "bytes"
+       "fmt"
+       "io"
        "io/ioutil"
+       "runtime"
        "testing"
 )
 
@@ -39,3 +42,54 @@ func TestChunk(t *testing.T) {
                t.Errorf("chunk reader read %q; want %q", g, e)
        }
 }
+
+func TestChunkReaderAllocs(t *testing.T) {
+       // temporarily set GOMAXPROCS to 1 as we are testing memory allocations
+       defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(1))
+       var buf bytes.Buffer
+       w := NewChunkedWriter(&buf)
+       a, b, c := []byte("aaaaaa"), []byte("bbbbbbbbbbbb"), []byte("cccccccccccccccccccccccc")
+       w.Write(a)
+       w.Write(b)
+       w.Write(c)
+       w.Close()
+
+       r := NewChunkedReader(&buf)
+       readBuf := make([]byte, len(a)+len(b)+len(c)+1)
+
+       var ms runtime.MemStats
+       runtime.ReadMemStats(&ms)
+       m0 := ms.Mallocs
+
+       n, err := io.ReadFull(r, readBuf)
+
+       runtime.ReadMemStats(&ms)
+       mallocs := ms.Mallocs - m0
+       if mallocs > 1 {
+               t.Errorf("%d mallocs; want <= 1", mallocs)
+       }
+
+       if n != len(readBuf)-1 {
+               t.Errorf("read %d bytes; want %d", n, len(readBuf)-1)
+       }
+       if err != io.ErrUnexpectedEOF {
+               t.Errorf("read error = %v; want ErrUnexpectedEOF", err)
+       }
+}
+
+func TestParseHexUint(t *testing.T) {
+       for i := uint64(0); i <= 1234; i++ {
+               line := []byte(fmt.Sprintf("%x", i))
+               got, err := parseHexUint(line)
+               if err != nil {
+                       t.Fatalf("on %d: %v", i, err)
+               }
+               if got != i {
+                       t.Errorf("for input %q = %d; want %d", line, got, i)
+               }
+       }
+       _, err := parseHexUint([]byte("bogus"))
+       if err == nil {
+               t.Error("expected error on bogus input")
+       }
+}