starnet/timeout_test.go

67 lines
1.6 KiB
Go
Raw Permalink Normal View History

2026-03-08 20:19:40 +08:00
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")
}
}