From a627d5883201ba4be0eecaa10397de92070acb7f Mon Sep 17 00:00:00 2001 From: xfy Date: Fri, 3 Apr 2026 15:15:37 +0800 Subject: [PATCH] =?UTF-8?q?test(server):=20=E8=A1=A5=E5=85=85=20buildMiddl?= =?UTF-8?q?ewareChain=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增访问日志、访问控制、限流中间件测试 - 新增重写、压缩、安全头中间件测试 - 新增全中间件组合测试 - 重命名 TestSetListeners 为 TestUpgradeSetListeners 避免命名冲突 Co-Authored-By: Claude Opus 4.6 --- internal/server/server_test.go | 174 ++++++++++++++++++++++++++++++++ internal/server/upgrade_test.go | 4 +- 2 files changed, 176 insertions(+), 2 deletions(-) diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 8d355f2..fc70f5c 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -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") + } +} \ No newline at end of file diff --git a/internal/server/upgrade_test.go b/internal/server/upgrade_test.go index 5a32e19..0351def 100644 --- a/internal/server/upgrade_test.go +++ b/internal/server/upgrade_test.go @@ -102,8 +102,8 @@ func TestWaitForShutdownNoOldPid(t *testing.T) { } } -// TestSetListeners 测试监听器设置 -func TestSetListeners(t *testing.T) { +// TestUpgradeSetListeners 测试监听器设置 +func TestUpgradeSetListeners(t *testing.T) { mgr := NewUpgradeManager(nil) // 创建模拟监听器