- ErrorMetrics 并发安全测试 - AsyncLogWriter 错误指标真实记录测试 - HTTP Server 超时配置真实验证 - Prometheus 指标 HTTP 端点真实测试 - 日志文件输出真实写入测试
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
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())
|
|
}
|
|
}
|