test(server): 补充 buildMiddlewareChain 单元测试

- 新增访问日志、访问控制、限流中间件测试
- 新增重写、压缩、安全头中间件测试
- 新增全中间件组合测试
- 重命名 TestSetListeners 为 TestUpgradeSetListeners 避免命名冲突

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-03 15:15:37 +08:00
parent f894787a2b
commit a627d58832
2 changed files with 176 additions and 2 deletions

View File

@ -105,3 +105,177 @@ func TestGracefulStopWithZeroTimeout(t *testing.T) {
t.Errorf("GracefulStop(0) returned error: %v", err)
}
}
// TestBuildMiddlewareChain_AccessLog 测试访问日志中间件
func TestBuildMiddlewareChain_AccessLog(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_AccessControl 测试访问控制中间件
func TestBuildMiddlewareChain_AccessControl(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Security: config.SecurityConfig{
Access: config.AccessConfig{
Allow: []string{"127.0.0.1"},
},
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_RateLimiter 测试限流中间件
func TestBuildMiddlewareChain_RateLimiter(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Security: config.SecurityConfig{
RateLimit: config.RateLimitConfig{
RequestRate: 100,
Burst: 200,
},
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_Rewrite 测试重写中间件
func TestBuildMiddlewareChain_Rewrite(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Rewrite: []config.RewriteRule{
{Pattern: "/old/(.*)", Replacement: "/new/$1"},
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_Compression 测试压缩中间件
func TestBuildMiddlewareChain_Compression(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Compression: config.CompressionConfig{
Level: 6,
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_SecurityHeaders 测试安全头中间件
func TestBuildMiddlewareChain_SecurityHeaders(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Security: config.SecurityConfig{
Headers: config.SecurityHeaders{
XFrameOptions: "DENY",
XContentTypeOptions: "nosniff",
},
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}
// TestBuildMiddlewareChain_AllMiddlewares 测试所有中间件组合
func TestBuildMiddlewareChain_AllMiddlewares(t *testing.T) {
cfg := &config.Config{
Logging: config.LoggingConfig{},
Server: config.ServerConfig{
Listen: ":8080",
Security: config.SecurityConfig{
Access: config.AccessConfig{
Allow: []string{"127.0.0.1"},
},
RateLimit: config.RateLimitConfig{
RequestRate: 100,
Burst: 200,
},
Headers: config.SecurityHeaders{
XFrameOptions: "DENY",
},
},
Rewrite: []config.RewriteRule{
{Pattern: "/old/(.*)", Replacement: "/new/$1"},
},
Compression: config.CompressionConfig{
Level: 6,
},
},
}
s := New(cfg)
chain, err := s.buildMiddlewareChain(&cfg.Server)
if err != nil {
t.Errorf("buildMiddlewareChain failed: %v", err)
}
if chain == nil {
t.Error("Expected non-nil chain")
}
}

View File

@ -102,8 +102,8 @@ func TestWaitForShutdownNoOldPid(t *testing.T) {
}
}
// TestSetListeners 测试监听器设置
func TestSetListeners(t *testing.T) {
// TestUpgradeSetListeners 测试监听器设置
func TestUpgradeSetListeners(t *testing.T) {
mgr := NewUpgradeManager(nil)
// 创建模拟监听器