Something went wrong. Try again.
forked from tailscale/tailscale
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899// Copyright (c) Tailscale Inc & contributors// SPDX-License-Identifier: BSD-3-Clause
package bufiox
import ( "bufio" "bytes" "io" "testing")
func TestReadFull(t *testing.T) { data := []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08} br := bufio.NewReader(bytes.NewReader(data))
var buf [5]byte n, err := ReadFull(br, buf[:]) if err != nil { t.Fatalf("ReadFull: %v", err) } if n != len(buf) { t.Fatalf("n = %d, want %d", n, len(buf)) } if want := [5]byte{0x01, 0x02, 0x03, 0x04, 0x05}; buf != want { t.Fatalf("buf = %v, want %v", buf, want) }
// Remaining bytes should still be readable. var rest [3]byte n, err = ReadFull(br, rest[:]) if err != nil { t.Fatalf("ReadFull rest: %v", err) } if n != len(rest) { t.Fatalf("rest n = %d, want %d", n, len(rest)) } if want := [3]byte{0x06, 0x07, 0x08}; rest != want { t.Fatalf("rest = %v, want %v", rest, want) }}
func TestReadFullShort(t *testing.T) { data := []byte{0x01, 0x02} br := bufio.NewReader(bytes.NewReader(data))
var buf [5]byte _, err := ReadFull(br, buf[:]) if err != io.ErrUnexpectedEOF { t.Fatalf("err = %v, want %v", err, io.ErrUnexpectedEOF) }}
func TestReadFullEmpty(t *testing.T) { br := bufio.NewReader(bytes.NewReader(nil))
var buf [1]byte _, err := ReadFull(br, buf[:]) if err != io.EOF { t.Fatalf("err = %v, want %v", err, io.EOF) }}
func TestReadFullZeroAllocs(t *testing.T) { data := make([]byte, 64) rd := bytes.NewReader(data) br := bufio.NewReader(rd)
var buf [32]byte got := testing.AllocsPerRun(1000, func() { rd.Reset(data) br.Reset(rd) _, err := ReadFull(br, buf[:]) if err != nil { t.Fatalf("ReadFull: %v", err) } }) if got != 0 { t.Fatalf("ReadFull allocs = %f, want 0", got) }}
type nopReader struct{}
func (nopReader) Read(p []byte) (int, error) { return len(p), nil }
func BenchmarkReadFull(b *testing.B) { br := bufio.NewReader(nopReader{}) var buf [32]byte b.ReportAllocs() b.ResetTimer() for range b.N { _, err := ReadFull(br, buf[:]) if err != nil { b.Fatal(err) } }}