8878711cf3
- GATEWAY_MAX_BODY_BYTES (1 MiB): connect WithReadMaxBytes + http.MaxBytesReader
on the public mux; explicit http2.Server MaxConcurrentStreams/IdleTimeout and
an http.Server ReadHeaderTimeout (R2 report follow-up).
- gateway_rate_limited_total{class} counter, Debug per rejection, a rejection
tracker drained every 30 s into a Warn summary per key and a report POST to
/api/v1/internal/ratelimit/report (feeds the admin view + auto-flag).
- The dead AdminPerMinute/AdminBurst policy now guards the /_gm mount (429),
ahead of its Basic-Auth.
- resolve() logs the cause of infra session-resolve failures at Warn (the
transient unauthenticated dips from the R2 run); unknown tokens stay silent.
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
|
|
pkgtel "scrabble/pkg/telemetry"
|
|
)
|
|
|
|
// TestLoadTelemetryDefaults verifies the gateway telemetry defaults: the
|
|
// "scrabble-gateway" service name and both exporters off.
|
|
func TestLoadTelemetryDefaults(t *testing.T) {
|
|
c, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if c.Telemetry.ServiceName != defaultServiceName {
|
|
t.Errorf("Telemetry.ServiceName = %q, want %q", c.Telemetry.ServiceName, defaultServiceName)
|
|
}
|
|
if c.Telemetry.TracesExporter != pkgtel.ExporterNone || c.Telemetry.MetricsExporter != pkgtel.ExporterNone {
|
|
t.Errorf("exporters = %q/%q, want none/none", c.Telemetry.TracesExporter, c.Telemetry.MetricsExporter)
|
|
}
|
|
}
|
|
|
|
// TestLoadRejectsUnsupportedExporter verifies an exporter outside the supported
|
|
// set fails validation.
|
|
func TestLoadRejectsUnsupportedExporter(t *testing.T) {
|
|
t.Setenv("GATEWAY_OTEL_METRICS_EXPORTER", "prometheus")
|
|
if _, err := Load(); err == nil {
|
|
t.Fatal("Load: expected an error for an unsupported exporter, got nil")
|
|
}
|
|
}
|
|
|
|
// TestLoadMaxBodyBytes verifies the body-cap default and that a non-positive
|
|
// override fails validation.
|
|
func TestLoadMaxBodyBytes(t *testing.T) {
|
|
c, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if c.MaxBodyBytes != DefaultMaxBodyBytes {
|
|
t.Errorf("MaxBodyBytes = %d, want %d", c.MaxBodyBytes, DefaultMaxBodyBytes)
|
|
}
|
|
t.Setenv("GATEWAY_MAX_BODY_BYTES", "0")
|
|
if _, err := Load(); err == nil {
|
|
t.Fatal("Load: expected an error for a non-positive body cap, got nil")
|
|
}
|
|
}
|