mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-06-17 01:54:13 +00:00
fix(config): add sni_router to root Config — prevents feat-124 boot crash
b9d5f54 (stealth TURN discovery) emits a top-level `sni_router:` block into node.yaml unconditionally, but only added a lenient ad-hoc parse in the carry-forward logic — not the field on config.Config that orama-node strict-decodes (KnownFields(true)) at boot. Identical failure mode to the v0.122.42 secrets_encryption_key incident: the unknown key fails the whole node.yaml parse and orama-node crash-loops. Caught pre-deploy this time by the strict-decode gate check; devnet never saw it. Regression test added alongside the v0.122.42 one in decode_test.go.
This commit is contained in:
parent
b9d5f542e1
commit
b425f80efb
@ -15,6 +15,21 @@ type Config struct {
|
|||||||
Security SecurityConfig `yaml:"security"`
|
Security SecurityConfig `yaml:"security"`
|
||||||
Logging LoggingConfig `yaml:"logging"`
|
Logging LoggingConfig `yaml:"logging"`
|
||||||
HTTPGateway HTTPGatewayConfig `yaml:"http_gateway"`
|
HTTPGateway HTTPGatewayConfig `yaml:"http_gateway"`
|
||||||
|
|
||||||
|
// SNIRouter is the stealth TURN-over-443 SNI router toggle (feat-124).
|
||||||
|
// Phase 4 config generation always emits this block into node.yaml, so
|
||||||
|
// the field MUST exist here: node.yaml is decoded with KnownFields(true)
|
||||||
|
// and an unknown top-level key fails the whole parse and crash-loops
|
||||||
|
// orama-node at boot (same failure mode as the v0.122.42
|
||||||
|
// secrets_encryption_key incident).
|
||||||
|
SNIRouter SNIRouterConfig `yaml:"sni_router"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SNIRouterConfig is the top-level stealth SNI router block in node.yaml
|
||||||
|
// (feat-124). Default-off; when enabled the node runs orama-sni-router on
|
||||||
|
// :443 and Caddy moves to :8443.
|
||||||
|
type SNIRouterConfig struct {
|
||||||
|
Enabled bool `yaml:"enabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidationError represents a single validation error with context.
|
// ValidationError represents a single validation error with context.
|
||||||
|
|||||||
@ -234,3 +234,24 @@ http_gateway:
|
|||||||
t.Errorf("SecretsEncryptionKey = %q, want %q", cfg.HTTPGateway.SecretsEncryptionKey, want)
|
t.Errorf("SecretsEncryptionKey = %q, want %q", cfg.HTTPGateway.SecretsEncryptionKey, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestDecodeStrict_sniRouterBlock guards against a recurrence of the
|
||||||
|
// v0.122.42-class boot crash for the feat-124 stealth SNI router: Phase 4
|
||||||
|
// always emits a top-level `sni_router:` block into node.yaml, so the root
|
||||||
|
// Config struct must carry a matching field or KnownFields(true) rejects
|
||||||
|
// the whole file and orama-node crash-loops.
|
||||||
|
func TestDecodeStrict_sniRouterBlock(t *testing.T) {
|
||||||
|
yamlInput := `
|
||||||
|
node:
|
||||||
|
id: "test-node"
|
||||||
|
sni_router:
|
||||||
|
enabled: true
|
||||||
|
`
|
||||||
|
var cfg Config
|
||||||
|
if err := DecodeStrict(strings.NewReader(yamlInput), &cfg); err != nil {
|
||||||
|
t.Fatalf("node.yaml with sni_router block must parse (feat-124): %v", err)
|
||||||
|
}
|
||||||
|
if !cfg.SNIRouter.Enabled {
|
||||||
|
t.Errorf("SNIRouter.Enabled = false, want true")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user