starnet/response_limit_test.go
starainrt b5bd7595a1
1. 优化ping功能
2. 新增重试机制
3. 优化错误处理逻辑
2026-03-19 16:42:45 +08:00

85 lines
2.1 KiB
Go

package starnet
import (
"errors"
"net/http"
"net/http/httptest"
"testing"
)
func TestWithMaxRespBodyBytes(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("123456"))
}))
defer server.Close()
resp, err := Get(server.URL, WithMaxRespBodyBytes(4))
if err != nil {
t.Fatalf("unexpected request error: %v", err)
}
defer resp.Close()
_, err = resp.Body().Bytes()
if err == nil {
t.Fatal("expected body too large error")
}
if !errors.Is(err, ErrRespBodyTooLarge) {
t.Fatalf("expected ErrRespBodyTooLarge, got: %v", err)
}
}
func TestSetMaxRespBodyBytes(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("1234"))
}))
defer server.Close()
resp, err := NewSimpleRequest(server.URL, http.MethodGet).
SetMaxRespBodyBytes(4).
Do()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
defer resp.Close()
body, err := resp.Body().String()
if err != nil {
t.Fatalf("unexpected read error: %v", err)
}
if body != "1234" {
t.Fatalf("body=%q want=1234", body)
}
}
func TestSetMaxRespBodyBytesWithAutoFetch(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("123456"))
}))
defer server.Close()
_, err := NewSimpleRequest(server.URL, http.MethodGet).
SetAutoFetch(true).
SetMaxRespBodyBytes(4).
Do()
if err == nil {
t.Fatal("expected body too large error with auto fetch")
}
if !errors.Is(err, ErrRespBodyTooLarge) {
t.Fatalf("expected ErrRespBodyTooLarge, got: %v", err)
}
}
func TestSetMaxRespBodyBytesInvalid(t *testing.T) {
req := NewSimpleRequest("http://example.com", http.MethodGet).SetMaxRespBodyBytes(-1)
if req.Err() == nil {
t.Fatal("expected error for negative max bytes")
}
}
func TestWithMaxRespBodyBytesInvalid(t *testing.T) {
_, err := NewRequest("http://example.com", http.MethodGet, WithMaxRespBodyBytes(-1))
if err == nil {
t.Fatal("expected error for negative max bytes")
}
}