Files
bd2/go/internal/server/resourcepolicy/config_test.go
T

64 lines
2.4 KiB
Go

package resourcepolicy
import (
"os"
"path/filepath"
"testing"
)
func TestOfficialDefaultsAreCapturedOrigins(t *testing.T) {
cfg := Config{Mode: ModeOfficial}
if err := cfg.Validate(); err != nil {
t.Fatal(err)
}
public := cfg.Public("bundle", "game-data")
if public.ServerDataURL != OfficialServerDataURL || public.GameDataURL != OfficialGameDataURL {
t.Fatalf("official policy = %+v", public)
}
}
func TestServerModeRequiresSafeCompleteOrigins(t *testing.T) {
cfg := Config{Mode: ModeServer, ServerDataURL: "https://cdn.example.com/ServerData", GameDataURL: "https://cdn.example.com/GameData"}
if err := cfg.Validate(); err != nil {
t.Fatalf("server mode rejected: %v", err)
}
bad := []Config{
{Mode: ModeServer, ServerDataURL: "https://cdn.example.com/ServerData"},
{Mode: ModeServer, ServerDataURL: "http://cdn.example.com/ServerData", GameDataURL: "https://cdn.example.com/GameData"},
{Mode: ModeServer, ServerDataURL: "https://user:password@cdn.example.com/ServerData", GameDataURL: "https://cdn.example.com/GameData"},
{Mode: ModeServer, ServerDataURL: "https://cdn.example.com/ServerData/", GameDataURL: "https://cdn.example.com/GameData"},
{Mode: "self_hosted", ServerDataURL: "https://cdn.example.com/ServerData", GameDataURL: "https://cdn.example.com/GameData"},
{Mode: "reverse_proxy", ServerDataURL: "https://cdn.example.com/ServerData", GameDataURL: "https://cdn.example.com/GameData"},
{Mode: "local", ServerDataURL: "C:\\bd2-resources\\ServerData", GameDataURL: "C:\\bd2-resources\\GameData"},
}
for i, cfg := range bad {
if err := cfg.Validate(); err == nil {
t.Fatalf("unsafe policy %d accepted: %+v", i, cfg)
}
}
}
func TestLoopbackHTTPIsDevelopmentOnly(t *testing.T) {
cfg := Config{Mode: ModeServer, ServerDataURL: "http://127.0.0.1:9000/ServerData", GameDataURL: "http://localhost:9000/GameData"}
if err := cfg.Validate(); err != nil {
t.Fatal(err)
}
}
func TestLoadRejectsUnknownAndTrailingJSON(t *testing.T) {
for name, body := range map[string]string{
"unknown": `{"mode":"official","cdn_url":"https://example.com"}`,
"trailing": `{"mode":"official"}{}`,
} {
t.Run(name, func(t *testing.T) {
path := filepath.Join(t.TempDir(), FileName)
if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
t.Fatal(err)
}
if _, err := Load(path); err == nil {
t.Fatal("invalid policy accepted")
}
})
}
}