Files
sub2api-cn-relay-manager/internal/app/server_timeout_test.go

70 lines
1.7 KiB
Go
Raw Normal View History

package app
import (
"context"
"net/http"
"testing"
"time"
)
func TestServer_TimeoutConfiguration_Real(t *testing.T) {
// 创建一个慢速处理器
slowHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
time.Sleep(100 * time.Millisecond)
w.Write([]byte("OK"))
})
server := NewServer("127.0.0.1:0", slowHandler, nil)
// 验证超时配置已设置
if server.server.ReadTimeout != 30*time.Second {
t.Errorf("ReadTimeout = %v, want 30s", server.server.ReadTimeout)
}
if server.server.ReadHeaderTimeout != 10*time.Second {
t.Errorf("ReadHeaderTimeout = %v, want 10s", server.server.ReadHeaderTimeout)
}
if server.server.WriteTimeout != 30*time.Second {
t.Errorf("WriteTimeout = %v, want 30s", server.server.WriteTimeout)
}
if server.server.IdleTimeout != 120*time.Second {
t.Errorf("IdleTimeout = %v, want 120s", server.server.IdleTimeout)
}
if server.server.MaxHeaderBytes != 1<<20 {
t.Errorf("MaxHeaderBytes = %d, want %d", server.server.MaxHeaderBytes, 1<<20)
}
}
func TestServer_GracefulShutdown(t *testing.T) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("OK"))
})
server := NewServer("127.0.0.1:0", handler, nil)
ctx, cancel := context.WithCancel(context.Background())
// 在后台启动服务
go func() {
server.Run(ctx)
}()
// 给服务启动时间
time.Sleep(50 * time.Millisecond)
// 发送取消信号触发关闭
cancel()
// 等待关闭完成
time.Sleep(100 * time.Millisecond)
// 验证服务可以正常关闭
t.Log("Server shutdown gracefully")
}
func TestServer_Addr(t *testing.T) {
server := NewServer(":8080", nil, nil)
if server.Addr() != ":8080" {
t.Errorf("Addr() = %q, want :8080", server.Addr())
}
}