check / check (push) Canceled after 0s
Config.settings lists each setting once: its key, its environment variable and the function that loads it. Most rows load through field, whose arguments give the type, the default and the check. db_url and cache_max_bytes keep their own load functions. Loading, the unknown-key and unknown-variable checks and the names in error messages all read the table. allowlist_hosts now loads through parseHostList, as referer_blocklist does. isKnownConfigKey, envVarNames, strictLoader, validate, validateAllowlistHostsValue and getStringSlice are gone, with the getStringSlice tests. The key constants move to the tests, their only users. A new test checks that README.md and configs/config.example.yml name the keys of the table. Model: opus-5-5
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"git.eeqj.de/sneak/smartconfig"
|
|
)
|
|
|
|
// TestExampleConfigAllowlistsNoHost loads configs/config.example.yml
|
|
// with a real signing key, as Getting Started in README.md has it copied
|
|
// and edited, and checks that it allowlists no host: every image on an
|
|
// allowlisted host is served to anyone without a signature.
|
|
func TestExampleConfigAllowlistsNoHost(t *testing.T) {
|
|
t.Setenv("PIXA_SIGNING_KEY", validTestSigningKey)
|
|
|
|
examplePath := filepath.Join("..", "..", "configs", "config.example.yml")
|
|
|
|
sc, err := loadTestConfig(examplePath)
|
|
if err != nil {
|
|
t.Fatalf("failed to load %s: %v", examplePath, err)
|
|
}
|
|
|
|
c, err := newFromSmartConfig(sc)
|
|
if err != nil {
|
|
t.Fatalf("%s is not a valid config: %v", examplePath, err)
|
|
}
|
|
|
|
t.Logf("allowlist_hosts in %s: %v", examplePath, c.AllowlistHosts)
|
|
|
|
if len(c.AllowlistHosts) != 0 {
|
|
t.Errorf("%s allowlists %v, want no host", examplePath, c.AllowlistHosts)
|
|
}
|
|
}
|
|
|
|
// loadTestConfig is a helper to load a config file for testing.
|
|
func loadTestConfig(path string) (*smartconfig.Config, error) {
|
|
return smartconfig.NewFromConfigPath(path)
|
|
}
|