package config import ( "os" "path/filepath" "strings" "testing" ) func TestValidateDefaultOK(t *testing.T) { t.Parallel() cfg := Default() if err := cfg.Validate(); err != nil { t.Fatal(err) } } func TestValidateRejectsMaxBodyBytesTooLarge(t *testing.T) { t.Parallel() cfg := Default() cfg.Limits.MaxBodyBytes = MaxBodyBytesCap + 1 err := cfg.Validate() if err == nil { t.Fatal("expected error") } if !strings.Contains(err.Error(), "max_body_bytes") { t.Fatalf("unexpected error: %v", err) } } func TestLoadAndValidate(t *testing.T) { t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "config.yaml") body := "listen: \"127.0.0.1:0\"\ndata_dir: \"" + filepath.ToSlash(dir) + "\"\n" if err := os.WriteFile(path, []byte(body), 0o644); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatal(err) } if err := cfg.Validate(); err != nil { t.Fatal(err) } if cfg.Listen != "127.0.0.1:0" { t.Fatalf("listen=%q", cfg.Listen) } } func TestLoadExplicitZeroGraceSeconds(t *testing.T) { t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "config.yaml") body := "listen: \"127.0.0.1:0\"\ndata_dir: \"" + filepath.ToSlash(dir) + "\"\nlimits:\n grace_seconds: 0\n" if err := os.WriteFile(path, []byte(body), 0o644); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatal(err) } if err := cfg.Validate(); err != nil { t.Fatal(err) } if cfg.Limits.GraceSeconds != 0 { t.Fatalf("grace_seconds=%d, want 0", cfg.Limits.GraceSeconds) } if cfg.Limits.MaxBodyBytes != MaxBodyBytesCap { t.Fatalf("omitted max_body_bytes=%d", cfg.Limits.MaxBodyBytes) } } func TestValidateRejectsMaxFrameBytesTooLarge(t *testing.T) { t.Parallel() cfg := Default() cfg.Limits.MaxFrameBytes = MaxFrameBytesCap + 1 err := cfg.Validate() if err == nil { t.Fatal("expected error") } if !strings.Contains(err.Error(), "max_frame_bytes") { t.Fatalf("unexpected error: %v", err) } } func TestLoadExplicitZeroMaxBodyBytesRejected(t *testing.T) { t.Parallel() dir := t.TempDir() path := filepath.Join(dir, "config.yaml") body := "listen: \"127.0.0.1:0\"\ndata_dir: \"" + filepath.ToSlash(dir) + "\"\nlimits:\n max_body_bytes: 0\n" if err := os.WriteFile(path, []byte(body), 0o644); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatal(err) } if cfg.Limits.MaxBodyBytes != 0 { t.Fatalf("max_body_bytes=%d, want explicit 0", cfg.Limits.MaxBodyBytes) } if err := cfg.Validate(); err == nil || !strings.Contains(err.Error(), "max_body_bytes") { t.Fatalf("want max_body_bytes error, got %v", err) } } func TestValidateTrustedProxies(t *testing.T) { t.Parallel() cfg := Default() cfg.TrustedProxies = []string{"not-a-cidr"} if err := cfg.Validate(); err == nil { t.Fatal("expected error") } cfg.TrustedProxies = []string{"127.0.0.1/32"} if err := cfg.Validate(); err != nil { t.Fatal(err) } }