Conflict: sendfile.go (!linux build tag) was incorrectly modified to include linuxSendfile and getSocketFd functions which already exist in sendfile_linux.go. Resolution: Keep HEAD version (simple fallback returning ENOTSUP) as Linux implementation is properly separated in sendfile_linux.go. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
156 lines
3.9 KiB
Go
156 lines
3.9 KiB
Go
// Package config 提供 Lua 配置测试
|
|
package config
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestLuaMiddlewareConfigValidation 测试 Lua 配置验证
|
|
func TestLuaMiddlewareConfigValidation(t *testing.T) {
|
|
// 未配置时跳过验证
|
|
cfg := &LuaMiddlewareConfig{}
|
|
require.NoError(t, validateLua(cfg))
|
|
|
|
// 禁用时跳过验证
|
|
cfg = &LuaMiddlewareConfig{Enabled: false}
|
|
require.NoError(t, validateLua(cfg))
|
|
|
|
// 启用但无脚本也允许
|
|
cfg = &LuaMiddlewareConfig{Enabled: true}
|
|
require.NoError(t, validateLua(cfg))
|
|
|
|
// 有效配置
|
|
cfg = &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "/scripts/test.lua", Phase: "rewrite", Timeout: 10 * time.Second},
|
|
},
|
|
GlobalSettings: LuaGlobalSettings{
|
|
MaxConcurrentCoroutines: 1000,
|
|
CoroutineTimeout: 30 * time.Second,
|
|
CodeCacheSize: 100,
|
|
EnableFileWatch: true,
|
|
MaxExecutionTime: 30 * time.Second,
|
|
},
|
|
}
|
|
require.NoError(t, validateLua(cfg))
|
|
}
|
|
|
|
// TestLuaMiddlewareConfigInvalidPhase 测试无效阶段
|
|
func TestLuaMiddlewareConfigInvalidPhase(t *testing.T) {
|
|
cfg := &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "/scripts/test.lua", Phase: "invalid_phase"},
|
|
},
|
|
}
|
|
|
|
err := validateLua(cfg)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "scripts[0].phase 无效")
|
|
}
|
|
|
|
// TestLuaMiddlewareConfigMissingPath 测试缺少路径
|
|
func TestLuaMiddlewareConfigMissingPath(t *testing.T) {
|
|
cfg := &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Phase: "rewrite"},
|
|
},
|
|
}
|
|
|
|
err := validateLua(cfg)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "scripts[0].path 必填")
|
|
}
|
|
|
|
// TestLuaMiddlewareConfigNegativeTimeout 测试负超时
|
|
func TestLuaMiddlewareConfigNegativeTimeout(t *testing.T) {
|
|
cfg := &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "/scripts/test.lua", Phase: "rewrite", Timeout: -5 * time.Second},
|
|
},
|
|
}
|
|
|
|
err := validateLua(cfg)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "timeout 不能为负数")
|
|
}
|
|
|
|
// TestLuaMiddlewareConfigGlobalSettingsValidation 测试全局设置验证
|
|
func TestLuaMiddlewareConfigGlobalSettingsValidation(t *testing.T) {
|
|
// MaxConcurrentCoroutines 为负
|
|
cfg := &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
GlobalSettings: LuaGlobalSettings{
|
|
MaxConcurrentCoroutines: -1,
|
|
},
|
|
}
|
|
err := validateLua(cfg)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "max_concurrent_coroutines 不能为负数")
|
|
|
|
// CoroutineTimeout 为负
|
|
cfg = &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
GlobalSettings: LuaGlobalSettings{
|
|
CoroutineTimeout: -1 * time.Second,
|
|
},
|
|
}
|
|
err = validateLua(cfg)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "coroutine_timeout 不能为负数")
|
|
}
|
|
|
|
// TestServerConfigLuaField 测试 ServerConfig 包含 Lua 字段
|
|
func TestServerConfigLuaField(t *testing.T) {
|
|
cfg := &ServerConfig{
|
|
Lua: &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "/scripts/auth.lua", Phase: "access"},
|
|
},
|
|
},
|
|
}
|
|
|
|
require.NotNil(t, cfg.Lua)
|
|
assert.True(t, cfg.Lua.Enabled)
|
|
assert.Len(t, cfg.Lua.Scripts, 1)
|
|
assert.Equal(t, "/scripts/auth.lua", cfg.Lua.Scripts[0].Path)
|
|
assert.Equal(t, "access", cfg.Lua.Scripts[0].Phase)
|
|
}
|
|
|
|
// TestValidateServerWithLuaConfig 测试服务器验证包含 Lua
|
|
func TestValidateServerWithLuaConfig(t *testing.T) {
|
|
// 有效 Lua 配置
|
|
cfg := &ServerConfig{
|
|
Listen: ":8080",
|
|
Lua: &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "/scripts/test.lua", Phase: "content"},
|
|
},
|
|
},
|
|
}
|
|
require.NoError(t, validateServer(cfg, false))
|
|
|
|
// 无效 Lua 配置
|
|
cfg = &ServerConfig{
|
|
Listen: ":8080",
|
|
Lua: &LuaMiddlewareConfig{
|
|
Enabled: true,
|
|
Scripts: []LuaScriptConfig{
|
|
{Path: "", Phase: "content"}, // 空路径
|
|
},
|
|
},
|
|
}
|
|
err := validateServer(cfg, false)
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "lua:")
|
|
}
|