Add the four settings the README documented but pixa lacked (closes #61)
check / check (push) Successful in 15s
check / check (push) Successful in 15s
README.md documented access_control_allow_origin, upstream_fetch_timeout, upstream_max_response_size and downstream_timeout, but pixa did not know them, so a config following the README aborted startup. Each is now a setting with its PIXA_ variable, defaulting to the value that was fixed in the code: *, 30s, 50 MiB and 60s. Durations are Go duration strings and must be positive; the size is whole bytes, at most 1 GiB. The origin is * or one http or https origin written exactly as a browser sends it; anything else aborts startup. downstream_timeout sets both the server's write timeout and the per-request timeout. The owner approved the edits to existing tests. Model: opus-5-5
This commit was merged in pull request #142.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"sneak.berlin/go/pixa/internal/globals"
|
||||
"sneak.berlin/go/pixa/internal/logger"
|
||||
@@ -69,6 +70,10 @@ func TestEnvironmentSetsEveryKey(t *testing.T) {
|
||||
t.Setenv("PIXA_CACHE_MAX_BYTES", "1024")
|
||||
t.Setenv("PIXA_BLOCKED_NETWORKS", "203.0.113.0/24")
|
||||
t.Setenv("PIXA_TRUSTED_PROXIES", "192.0.2.0/24")
|
||||
t.Setenv("PIXA_ACCESS_CONTROL_ALLOW_ORIGIN", "https://app.example.com")
|
||||
t.Setenv("PIXA_UPSTREAM_FETCH_TIMEOUT", "10s")
|
||||
t.Setenv("PIXA_UPSTREAM_MAX_RESPONSE_SIZE", "1048576")
|
||||
t.Setenv("PIXA_DOWNSTREAM_TIMEOUT", "2m")
|
||||
|
||||
c, err := newFromSmartConfig(nil)
|
||||
if err != nil {
|
||||
@@ -92,6 +97,10 @@ func TestEnvironmentSetsEveryKey(t *testing.T) {
|
||||
cacheMaxBytesExplicit: true,
|
||||
BlockedNetworks: []netip.Prefix{netip.MustParsePrefix("203.0.113.0/24")},
|
||||
TrustedProxies: []netip.Prefix{netip.MustParsePrefix("192.0.2.0/24")},
|
||||
AccessControlAllowOrigin: "https://app.example.com",
|
||||
UpstreamFetchTimeout: 10 * time.Second,
|
||||
UpstreamMaxResponseSize: 1048576,
|
||||
DownstreamTimeout: 2 * time.Minute,
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(*c, want) {
|
||||
@@ -280,6 +289,30 @@ func TestInvalidDebugFromEnvironmentAbortsStartup(t *testing.T) {
|
||||
wantStartupError(t, err, "PIXA_DEBUG", "maybe")
|
||||
}
|
||||
|
||||
// TestInvalidOriginTimeoutOrSizeFromEnvironmentAbortsStartup checks that
|
||||
// an invalid CORS origin, timeout or response size limit in its variable
|
||||
// aborts startup naming the variable and the value.
|
||||
func TestInvalidOriginTimeoutOrSizeFromEnvironmentAbortsStartup(t *testing.T) {
|
||||
cases := []struct {
|
||||
variable string
|
||||
value string
|
||||
}{
|
||||
{"PIXA_ACCESS_CONTROL_ALLOW_ORIGIN", "example.com"},
|
||||
{"PIXA_UPSTREAM_FETCH_TIMEOUT", "soon"},
|
||||
{"PIXA_UPSTREAM_MAX_RESPONSE_SIZE", "50MB"},
|
||||
{"PIXA_DOWNSTREAM_TIMEOUT", "0s"},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.variable, func(t *testing.T) {
|
||||
t.Setenv(tc.variable, tc.value)
|
||||
|
||||
_, err := configFromYAML(t, signingKeyLine)
|
||||
wantStartupError(t, err, tc.variable, tc.value)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestConfigFileAloneBehavesAsBefore checks that with no variables set
|
||||
// (TestMain unsets them) the config file's values are used and omitted
|
||||
// keys take their defaults.
|
||||
|
||||
Reference in New Issue
Block a user