package starnet import ( "net/http" "net/http/httptest" "testing" "time" ) func TestRequestTimeout(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { time.Sleep(200 * time.Millisecond) w.WriteHeader(http.StatusOK) })) defer server.Close() // Should timeout req := NewSimpleRequest(server.URL, "GET").SetTimeout(100 * time.Millisecond) _, err := req.Do() if err == nil { t.Error("Expected timeout error, got nil") } // Should succeed req2 := NewSimpleRequest(server.URL, "GET").SetTimeout(300 * time.Millisecond) resp, err := req2.Do() if err != nil { t.Errorf("Unexpected error: %v", err) } if resp != nil { resp.Close() } } func TestRequestDialTimeout(t *testing.T) { // Use a non-routable IP to test dial timeout req := NewSimpleRequest("http://192.0.2.1:80", "GET"). SetDialTimeout(100 * time.Millisecond) start := time.Now() _, err := req.Do() elapsed := time.Since(start) if err == nil { t.Error("Expected dial timeout error, got nil") } // Should timeout within reasonable time (not wait forever) if elapsed > 2*time.Second { t.Errorf("Dial timeout took too long: %v", elapsed) } } func TestClientTimeout(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { time.Sleep(200 * time.Millisecond) w.WriteHeader(http.StatusOK) })) defer server.Close() client := NewClientNoErr(WithTimeout(100 * time.Millisecond)) _, err := client.Get(server.URL) if err == nil { t.Error("Expected timeout error, got nil") } }