39 lines
1.8 KiB
Cheetah
39 lines
1.8 KiB
Cheetah
package settings
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
func environment(t *testing.T){
|
|
t.Helper()
|
|
for _,entry:=range os.Environ(){key,_,_:=strings.Cut(entry,"=");if strings.HasPrefix(key,"GO_OMNI_"){t.Setenv(key,"")}}
|
|
{{if ne .Storage "none"}}
|
|
t.Setenv("GO_OMNI_FILES_TOKEN",strings.Repeat("t",32))
|
|
t.Setenv("GO_OMNI_STORAGE_SIGNING_KEY",strings.Repeat("s",32))
|
|
t.Setenv("GO_OMNI_STORAGE_ACCESS_KEY","fixtureAccess")
|
|
t.Setenv("GO_OMNI_STORAGE_SECRET_KEY","fixtureSecret")
|
|
t.Setenv("GO_OMNI_STORAGE_BUCKET","testbucket")
|
|
{{if eq .Storage "s3"}}t.Setenv("GO_OMNI_STORAGE_ENDPOINT","127.0.0.1:9000"){{end}}
|
|
{{if eq .Storage "r2"}}t.Setenv("GO_OMNI_STORAGE_ACCOUNT_ID",strings.Repeat("a",32)){{end}}
|
|
{{end}}
|
|
}
|
|
func TestSettingsPrecedenceAndStrictness(t *testing.T){
|
|
environment(t)
|
|
path:=filepath.Join(t.TempDir(),"config.yaml")
|
|
if err:=os.WriteFile(path,[]byte("server:\n address: '127.0.0.1:8123'\n log:\n level: debug\n"),0600);err!=nil{t.Fatal(err)}
|
|
t.Setenv("GO_OMNI_HTTP_ADDR","127.0.0.1:9123")
|
|
t.Setenv("GO_OMNI_LOG_OUTPUT","stdout")
|
|
cfg,err:=Load(path);if err!=nil{t.Fatal(err)}
|
|
if cfg.Server.Address!="127.0.0.1:9123" || cfg.Server.Log.Level!="debug" || cfg.Server.Log.Output!="stdout" || cfg.Server.Log.File!="" || cfg.Server.Log.Rotation.Enabled {t.Fatal("configuration precedence failed")}
|
|
for _,body:=range []string{"unexpected: true","server:\n slowRequestThreshold: -1s","server:\n log:\n format: invalid"{{if ne .Storage "none"}},"storage:\n filesToken: forbidden","storage:\n maxBytes: -1","storage:\n provider: unsupported"{{end}}}{
|
|
if err:=os.WriteFile(path,[]byte(body),0600);err!=nil{t.Fatal(err)}
|
|
if _,err:=Load(path);err==nil{t.Fatal("invalid configuration accepted")}
|
|
}
|
|
{{if ne .Storage "none"}}
|
|
t.Setenv("GO_OMNI_FILES_TOKEN","")
|
|
if _,err:=Load("");err==nil{t.Fatal("missing file token accepted")}
|
|
{{end}}
|
|
}
|