ref: 3ce59c3248dec0eb0f918c42f37f53bc2ac20425
dir: /internal/iolimit/expect_length_reader_test.go/
package iolimit_test
import (
"bytes"
"errors"
"io"
"testing"
"codeberg.org/lindenii/furgit/internal/iolimit"
)
func TestExpectLengthReaderExact(t *testing.T) {
t.Parallel()
r := iolimit.ExpectLengthReader(bytes.NewReader([]byte("hello")), 5)
got, err := io.ReadAll(r)
if err != nil {
t.Fatalf("ReadAll error: %v", err)
}
if !bytes.Equal(got, []byte("hello")) {
t.Fatalf("ReadAll = %q, want %q", got, "hello")
}
buf := make([]byte, 1)
n, err := r.Read(buf)
if n != 0 || !errors.Is(err, io.EOF) {
t.Fatalf("post-boundary Read = (%d,%v), want (0,EOF)", n, err)
}
}
func TestExpectLengthReaderShort(t *testing.T) {
t.Parallel()
r := iolimit.ExpectLengthReader(bytes.NewReader([]byte("hey")), 5)
_, err := io.ReadAll(r)
if !errors.Is(err, io.ErrUnexpectedEOF) {
t.Fatalf("ReadAll error = %v, want ErrUnexpectedEOF", err)
}
}
func TestExpectLengthReaderLongDetectedOnNextRead(t *testing.T) {
t.Parallel()
r := iolimit.ExpectLengthReader(bytes.NewReader([]byte("hello!")), 5)
buf := make([]byte, 5)
n, err := io.ReadFull(r, buf)
if err != nil {
t.Fatalf("ReadFull error: %v", err)
}
if n != 5 || !bytes.Equal(buf, []byte("hello")) {
t.Fatalf("ReadFull = (%d,%q), want (5,hello)", n, buf)
}
probe := make([]byte, 1)
n, err = r.Read(probe)
if n != 0 || !errors.Is(err, iolimit.ErrExpectedLengthExceeded) {
t.Fatalf("overflow Read = (%d,%v), want (0,ErrExpectedLengthExceeded)", n, err)
}
}
func TestExpectLengthReaderEmptyExpected(t *testing.T) {
t.Parallel()
r := iolimit.ExpectLengthReader(bytes.NewReader(nil), 0)
buf := make([]byte, 1)
n, err := r.Read(buf)
if n != 0 || !errors.Is(err, io.EOF) {
t.Fatalf("Read = (%d,%v), want (0,EOF)", n, err)
}
}