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") } }