e2e: add cmd probe failover test with true/false command nodes

master
ginuerzh 2026-07-16 17:22:05 +08:00
parent bef00dffef
commit e9cf3b4d3f
2 changed files with 58 additions and 0 deletions

View File

@ -85,6 +85,21 @@ func (s *ProbeSuite) TestLowestLatencyProbe() {
}
}
// TestCmdProbeFailover verifies that the cmd probe detects a dead node via
// shell exit code and marks it before real traffic, so FailFilter excludes it.
func (s *ProbeSuite) TestCmdProbeFailover() {
gostC, err := RunGostContainerWithPorts(s.ctx, SharedNetworkName, "testdata/probe/cmd.yaml", "8080/tcp")
s.Require().NoError(err)
defer gostC.Terminate(s.ctx)
// The probe fires at startup; the dead node is already marked.
for range 10 {
code, body := s.proxyRequest(gostC, "8080")
s.Require().Equal(0, code, "all requests must succeed; dead cmd node pre-marked")
s.Require().Contains(body, "hello-gost")
}
}
func TestProbeSuite(t *testing.T) {
suite.Run(t, new(ProbeSuite))
}

View File

@ -0,0 +1,43 @@
services:
- name: proxy
addr: :8080
handler:
type: http
chain: my-chain
listener:
type: tcp
# Live relay: forwards to the echo server.
- name: relay
addr: 127.0.0.1:18081
handler:
type: http
listener:
type: tcp
chains:
- name: my-chain
hops:
- name: hop-1
selector:
strategy: round
maxFails: 1
failTimeout: 10s
nodes:
- name: node-live
addr: 127.0.0.1:18081
connector:
type: http
probe:
type: cmd
command: "true"
interval: 5s
# This node's probe always fails → pre-marked dead → FailFilter excludes it.
- name: node-dead
addr: 127.0.0.1:18082
connector:
type: http
probe:
type: cmd
command: "false"
interval: 5s