dispatch: allow empty route kinds (match all) + add routing tests
- config: permit routes[].kinds to be omitted/empty; treat as "all kinds"
- dispatch: compile empty kinds to Route{Kinds:nil} (match all kinds)
- tests: add coverage for route compilation + config validation edge cases
Files:
- config/load.go
- config/config.go
- dispatch/routes.go
- config/validate_test.go
- dispatch/routes_test.go
This commit is contained in:
67
dispatch/routes_test.go
Normal file
67
dispatch/routes_test.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package dispatch
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"gitea.maximumdirect.net/ejr/feedkit/config"
|
||||
)
|
||||
|
||||
func TestCompileRoutes_DefaultIsAllSinksAllKinds(t *testing.T) {
|
||||
cfg := &config.Config{
|
||||
Sinks: []config.SinkConfig{
|
||||
{Name: "a", Driver: "stdout"},
|
||||
{Name: "b", Driver: "stdout"},
|
||||
},
|
||||
// Routes omitted => default
|
||||
}
|
||||
|
||||
routes, err := CompileRoutes(cfg)
|
||||
if err != nil {
|
||||
t.Fatalf("CompileRoutes error: %v", err)
|
||||
}
|
||||
if len(routes) != 2 {
|
||||
t.Fatalf("expected 2 routes, got %d", len(routes))
|
||||
}
|
||||
|
||||
// Order should match cfg.Sinks order (deterministic).
|
||||
if routes[0].SinkName != "a" || routes[1].SinkName != "b" {
|
||||
t.Fatalf("unexpected route order: %+v", routes)
|
||||
}
|
||||
|
||||
for _, r := range routes {
|
||||
if len(r.Kinds) != 0 {
|
||||
t.Fatalf("expected nil/empty kinds for default routes, got: %+v", r.Kinds)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCompileRoutes_EmptyKindsMeansAllKinds(t *testing.T) {
|
||||
cfg := &config.Config{
|
||||
Sinks: []config.SinkConfig{
|
||||
{Name: "sink1", Driver: "stdout"},
|
||||
},
|
||||
Routes: []config.RouteConfig{
|
||||
{Sink: "sink1"}, // omitted kinds
|
||||
{Sink: "sink1", Kinds: nil}, // explicit nil
|
||||
{Sink: "sink1", Kinds: []string{}}, // explicit empty
|
||||
},
|
||||
}
|
||||
|
||||
routes, err := CompileRoutes(cfg)
|
||||
if err != nil {
|
||||
t.Fatalf("CompileRoutes error: %v", err)
|
||||
}
|
||||
|
||||
if len(routes) != 3 {
|
||||
t.Fatalf("expected 3 routes, got %d", len(routes))
|
||||
}
|
||||
|
||||
for i, r := range routes {
|
||||
if r.SinkName != "sink1" {
|
||||
t.Fatalf("route[%d] unexpected sink: %q", i, r.SinkName)
|
||||
}
|
||||
if len(r.Kinds) != 0 {
|
||||
t.Fatalf("route[%d] expected nil/empty kinds (match all), got: %+v", i, r.Kinds)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user