| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- // Copyright 2014 The Go Authors.
- // See https://code.google.com/p/go/source/browse/CONTRIBUTORS
- // Licensed under the same terms as Go itself:
- // https://code.google.com/p/go/source/browse/LICENSE
- package http2
- import (
- "io"
- "reflect"
- "testing"
- )
- var bufferReadTests = []struct {
- buf buffer
- read, wn int
- werr error
- wp []byte
- wbuf buffer
- }{
- {
- buffer{[]byte{'a', 0}, 0, 1, false, nil},
- 5, 1, nil, []byte{'a'},
- buffer{[]byte{'a', 0}, 1, 1, false, nil},
- },
- {
- buffer{[]byte{'a', 0}, 0, 1, true, io.EOF},
- 5, 1, io.EOF, []byte{'a'},
- buffer{[]byte{'a', 0}, 1, 1, true, io.EOF},
- },
- {
- buffer{[]byte{0, 'a'}, 1, 2, false, nil},
- 5, 1, nil, []byte{'a'},
- buffer{[]byte{0, 'a'}, 2, 2, false, nil},
- },
- {
- buffer{[]byte{0, 'a'}, 1, 2, true, io.EOF},
- 5, 1, io.EOF, []byte{'a'},
- buffer{[]byte{0, 'a'}, 2, 2, true, io.EOF},
- },
- {
- buffer{[]byte{}, 0, 0, false, nil},
- 5, 0, errReadEmpty, []byte{},
- buffer{[]byte{}, 0, 0, false, nil},
- },
- {
- buffer{[]byte{}, 0, 0, true, io.EOF},
- 5, 0, io.EOF, []byte{},
- buffer{[]byte{}, 0, 0, true, io.EOF},
- },
- }
- func TestBufferRead(t *testing.T) {
- for i, tt := range bufferReadTests {
- read := make([]byte, tt.read)
- n, err := tt.buf.Read(read)
- if n != tt.wn {
- t.Errorf("#%d: wn = %d want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: werr = %v want %v", i, err, tt.werr)
- continue
- }
- read = read[:n]
- if !reflect.DeepEqual(read, tt.wp) {
- t.Errorf("#%d: read = %+v want %+v", i, read, tt.wp)
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v want %+v", i, tt.buf, tt.wbuf)
- }
- }
- }
- var bufferWriteTests = []struct {
- buf buffer
- write, wn int
- werr error
- wbuf buffer
- }{
- {
- buf: buffer{
- buf: []byte{},
- },
- wbuf: buffer{
- buf: []byte{},
- },
- },
- {
- buf: buffer{
- buf: []byte{1, 'a'},
- },
- write: 1,
- wn: 1,
- wbuf: buffer{
- buf: []byte{0, 'a'},
- w: 1,
- },
- },
- {
- buf: buffer{
- buf: []byte{'a', 1},
- r: 1,
- w: 1,
- },
- write: 2,
- wn: 2,
- wbuf: buffer{
- buf: []byte{0, 0},
- w: 2,
- },
- },
- {
- buf: buffer{
- buf: []byte{},
- r: 1,
- closed: true,
- },
- write: 5,
- werr: errWriteClosed,
- wbuf: buffer{
- buf: []byte{},
- r: 1,
- closed: true,
- },
- },
- {
- buf: buffer{
- buf: []byte{},
- },
- write: 5,
- werr: errWriteFull,
- wbuf: buffer{
- buf: []byte{},
- },
- },
- }
- func TestBufferWrite(t *testing.T) {
- for i, tt := range bufferWriteTests {
- n, err := tt.buf.Write(make([]byte, tt.write))
- if n != tt.wn {
- t.Errorf("#%d: wrote %d bytes; want %d", i, n, tt.wn)
- continue
- }
- if err != tt.werr {
- t.Errorf("#%d: error = %v; want %v", i, err, tt.werr)
- continue
- }
- if !reflect.DeepEqual(tt.buf, tt.wbuf) {
- t.Errorf("#%d: buf = %+v; want %+v", i, tt.buf, tt.wbuf)
- }
- }
- }
|