package config_test import ( "git.yuntuo.hk/k2safe/go-omni/config" "git.yuntuo.hk/k2safe/go-omni/lifecycle" "os" "path/filepath" "testing" "time" ) func TestLifecycleConfiguration(t *testing.T) { path := filepath.Join(t.TempDir(), "config.yaml") if err := os.WriteFile(path, []byte("lifecycle:\n stopTimeout: 2s\n drainTimeout: 3s\n cancelTimeout: 4s\n"), 0600); err != nil { t.Fatal(err) } cfg, err := config.LoadFile(path, "PHASE_TEST_") if err != nil { t.Fatal(err) } if cfg.Lifecycle != (lifecycle.ShutdownConfig{StopTimeout: 2 * time.Second, DrainTimeout: 3 * time.Second, CancelTimeout: 4 * time.Second}) { t.Fatal(cfg.Lifecycle) } for _, key := range []string{"STOP_TIMEOUT", "DRAIN_TIMEOUT", "CANCEL_TIMEOUT"} { t.Setenv("PHASE_TEST_LIFECYCLE_"+key, "6s") } cfg, err = config.ApplyEnv(cfg, "PHASE_TEST_") if err != nil || cfg.Lifecycle.StopTimeout != 6*time.Second || cfg.Lifecycle.DrainTimeout != 6*time.Second || cfg.Lifecycle.CancelTimeout != 6*time.Second { t.Fatal(cfg.Lifecycle, err) } for _, v := range []string{"bad", "-1s"} { t.Setenv("PHASE_TEST_LIFECYCLE_DRAIN_TIMEOUT", v) if _, err := config.ApplyEnv(cfg, "PHASE_TEST_"); err == nil { t.Fatal("invalid duration accepted") } } }