package config import ( "os" "path/filepath" "reflect" "testing" ) func TestDefaultAllowedOrigins(t *testing.T) { if got := Default().Server.AllowedOrigins; len(got) != 0 { t.Fatalf("默认白名单应为空: %v", got) } } func TestLoadAllowedOrigins(t *testing.T) { path := filepath.Join(t.TempDir(), "config.yaml") raw := "server:\n allowedOrigins:\n - http://a.example\n - https://b.example\n" if err := os.WriteFile(path, []byte(raw), 0o644); err != nil { t.Fatalf("写入配置: %v", err) } cfg, err := Load(path) if err != nil { t.Fatalf("加载配置: %v", err) } want := []string{"http://a.example", "https://b.example"} if !reflect.DeepEqual(cfg.Server.AllowedOrigins, want) { t.Fatalf("白名单解析错误: got %v want %v", cfg.Server.AllowedOrigins, want) } } // -data 只在非空时覆盖配置:不传与传空串都必须保持配置文件里的值, // 否则 Console 之外的便携/手工运行会被改写数据目录。 func TestApplyDataDir(t *testing.T) { cases := []struct { name string dir string want string applied bool }{ {"非空覆盖配置值", `/var/lib/scoreboard`, `/var/lib/scoreboard`, true}, {"两侧空白会被去掉", " /var/lib/scoreboard ", `/var/lib/scoreboard`, true}, {"空串保持配置值", "", "cfg-data", false}, {"纯空白等于不传", " ", "cfg-data", false}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { path := filepath.Join(t.TempDir(), "config.yaml") if err := os.WriteFile(path, []byte("dataDir: cfg-data\nserver:\n port: 19540\n"), 0o644); err != nil { t.Fatalf("写入配置: %v", err) } cfg, err := Load(path) if err != nil { t.Fatalf("加载配置: %v", err) } if got := cfg.ApplyDataDir(tc.dir); got != tc.applied { t.Fatalf("ApplyDataDir(%q) 覆盖标记: got %v want %v", tc.dir, got, tc.applied) } if cfg.DataDir != tc.want { t.Fatalf("ApplyDataDir(%q) 后 DataDir: got %q want %q", tc.dir, cfg.DataDir, tc.want) } }) } }