74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package config
|
|
|
|
import (
|
|
"flag"
|
|
"testing"
|
|
)
|
|
|
|
func bind(t *testing.T, args ...string) (*Config, error) {
|
|
t.Helper()
|
|
fs := flag.NewFlagSet("t", flag.ContinueOnError)
|
|
c, err := Bind(fs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := fs.Parse(args); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return c, nil
|
|
}
|
|
|
|
func TestBindDefaults(t *testing.T) {
|
|
c, err := bind(t)
|
|
if err != nil || *c != Default() {
|
|
t.Fatalf("got %+v, %v", c, err)
|
|
}
|
|
}
|
|
|
|
func TestBindEnvAndFlagPrecedence(t *testing.T) {
|
|
t.Setenv("WH_SEED", "42")
|
|
t.Setenv("WH_TICKS_PER_DAY", "720")
|
|
t.Setenv("WH_ASTEROIDS", "60")
|
|
|
|
c, err := bind(t)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.Seed != 42 || c.TicksPerDay != 720 || c.AsteroidCount != 60 || c.CyclesPerTick != Default().CyclesPerTick {
|
|
t.Fatalf("env not applied: %+v", c)
|
|
}
|
|
if err := c.Validate(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
c, err = bind(t, "-seed", "7")
|
|
if err != nil || c.Seed != 7 || c.TicksPerDay != 720 {
|
|
t.Fatalf("flag should override env only for itself: %+v, %v", c, err)
|
|
}
|
|
}
|
|
|
|
func TestBindRejectsBadEnv(t *testing.T) {
|
|
for _, v := range []string{"lots", "-3", "1.5"} {
|
|
t.Setenv("WH_SEED", v)
|
|
if _, err := bind(t); err == nil {
|
|
t.Errorf("WH_SEED=%q should be rejected", v)
|
|
}
|
|
}
|
|
t.Setenv("WH_SEED", "")
|
|
t.Setenv("WH_COMM_BYTES", "big")
|
|
if _, err := bind(t); err == nil {
|
|
t.Error("WH_COMM_BYTES=big should be rejected")
|
|
}
|
|
}
|
|
|
|
func TestDatabaseURL(t *testing.T) {
|
|
t.Setenv("DATABASE_URL", "")
|
|
if DatabaseURL() != "sqlite:wh.db" {
|
|
t.Fatal("default")
|
|
}
|
|
t.Setenv("DATABASE_URL", "postgres://x")
|
|
if DatabaseURL() != "postgres://x" {
|
|
t.Fatal("env")
|
|
}
|
|
}
|