package httpclient import ( "context" "io" "net/http" "net/http/httptest" "strings" "testing" "time" ) func TestClient_Timeout(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { time.Sleep(2 * time.Second) w.WriteHeader(http.StatusOK) })) defer srv.Close() c := New(Config{Timeout: 100 * time.Millisecond, MaxResponseBytes: 1024}) req, err := http.NewRequest(http.MethodGet, srv.URL, nil) if err != nil { t.Fatalf("new request: %v", err) } _, err = c.Do(context.Background(), req) if err == nil { t.Fatal("expected timeout error, got nil") } } func TestClient_MaxResponseBytes(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte(strings.Repeat("a", 2048))) })) defer srv.Close() c := New(Config{Timeout: 5 * time.Second, MaxResponseBytes: 512}) req, err := http.NewRequest(http.MethodGet, srv.URL, nil) if err != nil { t.Fatalf("new request: %v", err) } resp, err := c.Do(context.Background(), req, "127.0.0.1") if err != nil { t.Fatalf("do: %v", err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { t.Fatalf("read body: %v", err) } if len(body) > 512 { t.Fatalf("expected at most 512 bytes, got %d", len(body)) } }