67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
|
|
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")
|
||
|
|
}
|
||
|
|
}
|