init
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user