- internal/auth/mode.go:Mode 解析/归一化,X-Auth-User 头常量 - server:adminAuth 按模式鉴权,sso 只认网关注入的 X-Auth-User(缺失 401 JSON) - 新增公开 /api/admin/mode 供前端识别模式;sso 下 login/logout 返回 404 - main:读取 AUTH_MODE,sso 时跳过自带口令并打印启动提示 - 测试覆盖两种模式、伪造 header 不绕过、数据面不受影响
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package auth
|
|
|
|
import "testing"
|
|
|
|
func TestParseMode(t *testing.T) {
|
|
cases := []struct {
|
|
in string
|
|
want Mode
|
|
bad bool
|
|
}{
|
|
{"", ModeBuiltin, false},
|
|
{"builtin", ModeBuiltin, false},
|
|
{" Builtin ", ModeBuiltin, false},
|
|
{"sso", ModeSSO, false},
|
|
{"SSO", ModeSSO, false},
|
|
{"oidc", "", true},
|
|
}
|
|
for _, c := range cases {
|
|
got, err := ParseMode(c.in)
|
|
if c.bad {
|
|
if err == nil {
|
|
t.Fatalf("ParseMode(%q) 应报错", c.in)
|
|
}
|
|
continue
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("ParseMode(%q) 意外错误: %v", c.in, err)
|
|
}
|
|
if got != c.want {
|
|
t.Fatalf("ParseMode(%q) = %q,期望 %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestModeNormalize(t *testing.T) {
|
|
if got := Mode("").Normalize(); got != ModeBuiltin {
|
|
t.Fatalf("零值应归一为 builtin,实际 %q", got)
|
|
}
|
|
if got := Mode("whatever").Normalize(); got != ModeBuiltin {
|
|
t.Fatalf("非法值应归一为 builtin,实际 %q", got)
|
|
}
|
|
if got := ModeSSO.Normalize(); got != ModeSSO {
|
|
t.Fatalf("sso 应保持不变,实际 %q", got)
|
|
}
|
|
}
|