| package ioutils // import "github.com/docker/docker/pkg/ioutils" |
| |
| import ( |
| "bytes" |
| "testing" |
| ) |
| |
| func TestFixedBufferCap(t *testing.T) { |
| buf := &fixedBuffer{buf: make([]byte, 0, 5)} |
| |
| n := buf.Cap() |
| if n != 5 { |
| t.Fatalf("expected buffer capacity to be 5 bytes, got %d", n) |
| } |
| } |
| |
| func TestFixedBufferLen(t *testing.T) { |
| buf := &fixedBuffer{buf: make([]byte, 0, 10)} |
| |
| buf.Write([]byte("hello")) |
| l := buf.Len() |
| if l != 5 { |
| t.Fatalf("expected buffer length to be 5 bytes, got %d", l) |
| } |
| |
| buf.Write([]byte("world")) |
| l = buf.Len() |
| if l != 10 { |
| t.Fatalf("expected buffer length to be 10 bytes, got %d", l) |
| } |
| |
| // read 5 bytes |
| b := make([]byte, 5) |
| buf.Read(b) |
| |
| l = buf.Len() |
| if l != 5 { |
| t.Fatalf("expected buffer length to be 5 bytes, got %d", l) |
| } |
| |
| n, err := buf.Write([]byte("i-wont-fit")) |
| if n != 0 { |
| t.Fatalf("expected no bytes to be written to buffer, got %d", n) |
| } |
| if err != errBufferFull { |
| t.Fatalf("expected errBufferFull, got %v", err) |
| } |
| |
| l = buf.Len() |
| if l != 5 { |
| t.Fatalf("expected buffer length to still be 5 bytes, got %d", l) |
| } |
| |
| buf.Reset() |
| l = buf.Len() |
| if l != 0 { |
| t.Fatalf("expected buffer length to still be 0 bytes, got %d", l) |
| } |
| } |
| |
| func TestFixedBufferString(t *testing.T) { |
| buf := &fixedBuffer{buf: make([]byte, 0, 10)} |
| |
| buf.Write([]byte("hello")) |
| buf.Write([]byte("world")) |
| |
| out := buf.String() |
| if out != "helloworld" { |
| t.Fatalf("expected output to be \"helloworld\", got %q", out) |
| } |
| |
| // read 5 bytes |
| b := make([]byte, 5) |
| buf.Read(b) |
| |
| // test that fixedBuffer.String() only returns the part that hasn't been read |
| out = buf.String() |
| if out != "world" { |
| t.Fatalf("expected output to be \"world\", got %q", out) |
| } |
| } |
| |
| func TestFixedBufferWrite(t *testing.T) { |
| buf := &fixedBuffer{buf: make([]byte, 0, 64)} |
| n, err := buf.Write([]byte("hello")) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if n != 5 { |
| t.Fatalf("expected 5 bytes written, got %d", n) |
| } |
| |
| if string(buf.buf[:5]) != "hello" { |
| t.Fatalf("expected \"hello\", got %q", string(buf.buf[:5])) |
| } |
| |
| n, err = buf.Write(bytes.Repeat([]byte{1}, 64)) |
| if n != 59 { |
| t.Fatalf("expected 59 bytes written before buffer is full, got %d", n) |
| } |
| if err != errBufferFull { |
| t.Fatalf("expected errBufferFull, got %v - %v", err, buf.buf[:64]) |
| } |
| } |
| |
| func TestFixedBufferRead(t *testing.T) { |
| buf := &fixedBuffer{buf: make([]byte, 0, 64)} |
| if _, err := buf.Write([]byte("hello world")); err != nil { |
| t.Fatal(err) |
| } |
| |
| b := make([]byte, 5) |
| n, err := buf.Read(b) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if n != 5 { |
| t.Fatalf("expected 5 bytes read, got %d - %s", n, buf.String()) |
| } |
| |
| if string(b) != "hello" { |
| t.Fatalf("expected \"hello\", got %q", string(b)) |
| } |
| |
| n, err = buf.Read(b) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if n != 5 { |
| t.Fatalf("expected 5 bytes read, got %d", n) |
| } |
| |
| if string(b) != " worl" { |
| t.Fatalf("expected \" worl\", got %s", string(b)) |
| } |
| |
| b = b[:1] |
| n, err = buf.Read(b) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if n != 1 { |
| t.Fatalf("expected 1 byte read, got %d - %s", n, buf.String()) |
| } |
| |
| if string(b) != "d" { |
| t.Fatalf("expected \"d\", got %s", string(b)) |
| } |
| } |