mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-04 07:45:30 +00:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package http
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestTimeoutReader_Read(t *testing.T) {
|
|
data := []byte("Hello, World!")
|
|
reader := bytes.NewReader(data)
|
|
timeoutReader := NewTimeoutReader(reader, 1*time.Second)
|
|
|
|
buf := make([]byte, len(data))
|
|
n, err := timeoutReader.Read(buf)
|
|
if err != nil {
|
|
t.Fatalf("expected no error, got %v", err)
|
|
}
|
|
if n != len(data) {
|
|
t.Fatalf("expected to read %d bytes, read %d", len(data), n)
|
|
}
|
|
if !bytes.Equal(buf, data) {
|
|
t.Fatalf("expected %s, got %s", data, buf)
|
|
}
|
|
}
|
|
|
|
func TestTimeoutReader_ReadTimeout(t *testing.T) {
|
|
reader := &slowReader{delay: 2 * time.Second}
|
|
timeoutReader := NewTimeoutReader(reader, 1*time.Second)
|
|
|
|
buf := make([]byte, 8192)
|
|
_, err := timeoutReader.Read(buf)
|
|
if err == nil {
|
|
t.Fatal("expected timeout error, got nil")
|
|
}
|
|
if !errors.Is(err, context.DeadlineExceeded) {
|
|
t.Fatalf("expected %v, got %v", context.DeadlineExceeded, err)
|
|
}
|
|
}
|
|
|
|
type slowReader struct {
|
|
delay time.Duration
|
|
}
|
|
|
|
func (sr *slowReader) Read(p []byte) (n int, err error) {
|
|
time.Sleep(sr.delay)
|
|
return 0, io.EOF
|
|
}
|