41 lines
1.4 KiB
Go
41 lines
1.4 KiB
Go
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)
|
|
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")
|
|
}
|
|
if err := os.WriteFile(path, []byte("lifecycle:\n stopTimeout: ${PHASE_TEST_LIFECYCLE_STOP_TIMEOUT}\n drainTimeout: ${PHASE_TEST_LIFECYCLE_DRAIN_TIMEOUT}\n cancelTimeout: ${PHASE_TEST_LIFECYCLE_CANCEL_TIMEOUT}\n"), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cfg, err = config.LoadProject(path, cfg)
|
|
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.LoadProject(path, cfg); err == nil {
|
|
t.Fatal("invalid duration accepted")
|
|
}
|
|
}
|
|
}
|