60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"bytes"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestFileMergeAndSafeReload(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "service.yaml")
|
|
write := func(raw string) {
|
|
t.Helper()
|
|
if err := os.WriteFile(path, []byte(raw), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
write("address: ':8123'\nshutdownTimeout: 7s\nlog:\n level: info\n")
|
|
t.Setenv("TEST_MODULE_HTTP_ADDR", ":9123")
|
|
cfg, err := LoadFile(path)
|
|
if err != nil || cfg.Address != ":8123" || cfg.ShutdownTimeout != 7*time.Second {
|
|
t.Fatal(cfg, err)
|
|
}
|
|
var output bytes.Buffer
|
|
lc := cfg.Log
|
|
lc.Writer = &output
|
|
l, err := logx.New(lc)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer l.Close()
|
|
child := l.With("scope", "test")
|
|
r, err := NewReloader(path, l)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
child.Debug("hidden")
|
|
write("address: ':8123'\nshutdownTimeout: 7s\nlog:\n level: debug\n")
|
|
if err = r.Reload(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
child.Debug("visible")
|
|
if strings.Contains(output.String(), "hidden") || !strings.Contains(output.String(), "visible") {
|
|
t.Fatal(output.String())
|
|
}
|
|
write("shutdownTimeout: 8s\nlog:\n level: error\n")
|
|
if err = r.Reload(); err == nil || r.Snapshot().Log.Level != "debug" {
|
|
t.Fatal("static reload changed live config", err)
|
|
}
|
|
for _, raw := range []string{"unknownOption: true", "log:\n level: bad", "shutdownTimeout: invalid", "address: x\naddress: y", "---\n{}\n---\n{}"} {
|
|
write(raw)
|
|
if err = r.Reload(); err == nil {
|
|
t.Fatal(raw)
|
|
}
|
|
}
|
|
}
|