package config import ( "path/filepath" "testing" "time" ) func TestLoad(t *testing.T) { // 屏蔽外部 env,保证默认值断言自洽(Load 将空串视为未设置) t.Setenv("BOOKS_DIR", "") t.Setenv("CACHE_DIR", "") t.Setenv("ADDR", "") t.Setenv("JWT_SECRET", "") if _, err := Load(); err == nil { t.Fatal("missing JWT_SECRET must fail") } t.Setenv("JWT_SECRET", "x") t.Setenv("SCAN_INTERVAL_SEC", "abc") if _, err := Load(); err == nil { t.Fatal("bad interval must fail") } t.Setenv("SCAN_INTERVAL_SEC", "30") t.Setenv("DATABASE_URL", "postgres://x") t.Setenv("TRUSTED_PROXY_CIDRS", "") c, err := Load() if err != nil { t.Fatal(err) } // Load 会 EvalSymlinks 解析 BooksDir(任务10 裁定),这里做同样的期望值解析 wantBooks := "/data/books" if r, e := filepath.EvalSymlinks(wantBooks); e == nil { wantBooks = r } if c.ScanInterval != 30*time.Second || c.BooksDir != wantBooks || c.Addr != ":8080" { t.Fatalf("%+v", c) } if len(c.TrustedProxies) != 1 || c.TrustedProxies[0] != "172.16.0.0/12" { t.Fatalf("trusted proxies default: %+v", c.TrustedProxies) } t.Setenv("TRUSTED_PROXY_CIDRS", "10.0.0.0/8, 1.2.3.4") c, err = Load() if err != nil { t.Fatal(err) } if len(c.TrustedProxies) != 2 || c.TrustedProxies[0] != "10.0.0.0/8" || c.TrustedProxies[1] != "1.2.3.4" { t.Fatalf("trusted proxies override: %+v", c.TrustedProxies) } }