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()) } }