varnishtest "Add/Delete server via cli with check support" feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev3)'" feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL)'" feature ignore_unknown_macro barrier b1 cond 2 -cyclic barrier b2 cond 2 -cyclic server s1 { rxreq txresp } -start server s2 { } -start # used for agent checks server s3 { recv 5 send "ready up\n" barrier b2 sync } -start syslog S1 -level notice { recv expect ~ ".*Server be1/s1 is UP/READY \\(leaving forced maintenance\\)." recv expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be1/s1 succeeded.+reason: Layer7 check passed, code: 200, check duration: [[:digit:]]+ms.+status: 1/1 UP" barrier b1 sync recv expect ~ ".*Server be1/s2 is UP/READY \\(leaving forced maintenance\\)." recv expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be1/s2 failed.+reason: Layer7 timeout, check duration: [[:digit:]]+ms.+status: 0/1 DOWN" barrier b1 sync recv expect ~ ".*Server be1/s2 was DOWN and now enters maintenance." recv expect ~ ".*Server be1/s3 is UP/READY \\(leaving forced maintenance\\)." recv expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Agent check for server be1/s3 succeeded.+reason: Layer7 check passed, code: 0, info: \"via agent : up\", check duration: [[:digit:]]+ms.+status: 1/1 UP" barrier b1 sync barrier b2 sync recv expect ~ ".*Server be1/s4 is UP/READY \\(leaving forced maintenance\\)." recv expect ~ "Health check for server be1/s4 failed" barrier b1 sync recv expect ~ ".*Server be1/s5 is UP/READY \\(leaving forced maintenance\\)." recv expect ~ "Health check for server be1/s5 succeeded." } -start haproxy h1 -conf { global stats socket "${tmpdir}/h1/stats" level admin backend be1 option log-health-checks option httpchk GET / log ${S1_addr}:${S1_port} daemon frontend fe-proxy mode http bind "fd@${hapsrv}" accept-proxy http-request return status 200 } -start # check on a functional server haproxy h1 -cli { send "add server be1/s1 ${s1_addr}:${s1_port} check inter 200ms rise 1 fall 1" expect ~ "New server registered." send "enable server be1/s1" expect ~ ".*" send "enable health be1/s1" expect ~ ".*" barrier b1 sync send "disable server be1/s1" expect ~ ".*" send "del server be1/s1" expect ~ "Server deleted." } server s2 -break # check on a disabled server haproxy h1 -cli { send "add server be1/s2 ${s2_addr}:${s2_port} check inter 200ms rise 1 fall 1" expect ~ "New server registered." send "enable server be1/s2" expect ~ ".*" send "enable health be1/s2" expect ~ ".*" barrier b1 sync send "disable server be1/s2" expect ~ ".*" send "del server be1/s2" expect ~ "Server deleted." } # agent check haproxy h1 -cli { send "add server be1/s3 ${s1_addr}:${s1_port} agent-check agent-addr ${s3_addr} agent-port ${s3_port} agent-send 'hello' agent-inter 200ms rise 1 fall 1" expect ~ "New server registered." send "enable agent be1/s3" expect ~ ".*" barrier b1 sync send "disable agent be1/s3; disable server be1/s3" expect ~ ".*" send "del server be1/s3" expect ~ "Server deleted." } # check PROXY protocol interaction with checks haproxy h1 -cli { # no explicit check-send-proxy # The health check should failed. send "add server be1/s4 ${h1_hapsrv_addr}:${h1_hapsrv_port} send-proxy check rise 1 fall 1" expect ~ "New server registered." send "enable server be1/s4" expect ~ ".*" send "enable health be1/s4" expect ~ ".*" barrier b1 sync # explicit check-send-proxy : health check should succeeded send "add server be1/s5 ${h1_hapsrv_addr}:${h1_hapsrv_port} send-proxy check rise 1 fall 1 check-send-proxy" expect ~ "New server registered." send "enable server be1/s5" expect ~ ".*" send "enable health be1/s5" expect ~ ".*" } syslog S1 -wait