feat(routing): add Network matcher for per-protocol node selection
Add Network() matcher to the routing DSL so nodes can be selected based on
connection network type (tcp/udp). Uses prefix matching so Network("tcp")
matches tcp, tcp4, tcp6 and Network("udp") matches udp, udp4, udp6.
- core/routing: add Network field to Request struct (core v0.4.3)
- x/routing/matcher: add network() matcher registered as "Network"
- x/hop: pass options.Network to routing.Request in Select()
Fixes go-gost/gost#703
This commit is contained in:
@@ -140,6 +140,32 @@ func TestMatcherProto(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatcherNetwork(t *testing.T) {
|
||||
m, err := NewMatcher(`Network("tcp")`)
|
||||
require.NoError(t, err)
|
||||
|
||||
tests := []struct {
|
||||
desc string
|
||||
network string
|
||||
want bool
|
||||
}{
|
||||
{"exact match", "tcp", true},
|
||||
{"prefix match tcp4", "tcp4", true},
|
||||
{"prefix match tcp6", "tcp6", true},
|
||||
{"uppercase no match", "TCP", false},
|
||||
{"wrong network udp", "udp", false},
|
||||
{"wrong network udp4", "udp4", false},
|
||||
{"empty", "", false},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
req := &routing.Request{Network: tc.network}
|
||||
assert.Equal(t, tc.want, m.Match(req))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatcherMethod(t *testing.T) {
|
||||
m, err := NewMatcher(`Method("GET")`)
|
||||
require.NoError(t, err)
|
||||
|
||||
Reference in New Issue
Block a user