--- /dev/null
+varnishtest "Health-checks: some external check tests"
+feature ignore_unknown_macro
+#REGTEST_TYPE=slow
+
+server s1 {
+ rxreq
+ expect req.method == GET
+ expect req.url == /health
+ expect req.proto == HTTP/1.1
+ txresp
+} -start
+
+syslog S1 -level notice {
+ recv
+ expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be[0-9]/srv succeeded, reason: External check passed, code: 0"
+ recv
+ expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be[0-9]/srv succeeded, reason: External check passed, code: 0"
+} -start
+
+syslog S2 -level notice {
+ recv
+ expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be[0-9]/srv succeeded.*code: 200"
+} -start
+
+haproxy h1 -conf {
+ global
+ .if feature(THREAD)
+ thread-groups 1
+ .endif
+ external-check
+ insecure-fork-wanted
+
+ healthcheck http-health
+ type httpchk
+ http-check send meth GET uri /health ver HTTP/1.1
+
+ defaults
+ mode http
+ timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
+ option log-health-checks
+
+ backend be1
+ log ${S1_addr}:${S1_port} len 2048 local0
+ option external-check
+ external-check command /bin/true
+ server srv ${h1_li1_addr}:${h1_li1_port} check inter 100ms rise 1 fall 1
+
+ defaults
+ mode http
+ timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
+ timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
+ option external-check
+ external-check command /bin/true
+ option log-health-checks
+
+ backend be2
+ log ${S1_addr}:${S1_port} len 2048 local0
+ server srv ${h1_li1_addr}:${h1_li1_port} check inter 100ms rise 1 fall 1
+
+ backend be3
+ log ${S2_addr}:${S2_port} len 2048 local0
+ option external-check
+ external-check command /bin/true
+ server srv ${s1_addr}:${s1_port} check inter 100ms rise 1 fall 1 healthcheck http-health
+
+ listen li1
+ mode http
+ bind "fd@${li1}"
+ http-request return status 200
+
+} -start
+
+syslog S1 -wait
+syslog S2 -wait