varnishtest "Health-check test"
feature ignore_unknown_macro

#REQUIRE_VERSION=1.8
#EXCLUDE_TARGETS=freebsd

# This script test health-checks for four backends with one server by backend.
# A syslog server is attached to each backend to check the syslog messages
# in the righ order.

# First, we check a health-check has passed for all the servers thanks to the syslog
# messages. Then each server is disabled. The health-check status are checked.
# Then each server is re-enabled. Finally health-check status
# verifications for each server terminate the execution of this script.

# Note that the CLI is synchronized with the syslog servers so that
# to be sure to receive the passed health-checks status messages before
# disabling the servers. Same thing, when we check that the servers are down
# before enabling the servers.

# Cyclic barrier to synchonize the CLI with the syslog servers
barrier b1 cond 5 -cyclic

# These servers are there only for the health-check test.
server s1 {
} -start

server s2 {
} -start

server s3 {
} -start

server s4 {
} -start

syslog S1 -level notice {
    recv
    expect ~ "Proxy be1 started"
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be1/srv1 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP"
    barrier b1 sync
    recv alert
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Server be1/srv1 is going DOWN for maintenance. 0 active and 0 backup servers left. [01] sessions active, 0 requeued, 0 remaining in queue."
    recv emerg
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: backend be1 has no server available!"
    barrier b1 sync
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: (Server be1/srv1 is UP/READY \\(leaving forced maintenance\\).|Health check for server be1/srv1 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP)"
    barrier b1 sync
} -start

syslog S2 -level notice {
    recv
    expect ~ "Proxy be2 started"
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be2/srv2 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP"
    barrier b1 sync
    recv alert
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Server be2/srv2 is going DOWN for maintenance. 0 active and 0 backup servers left. [01] sessions active, 0 requeued, 0 remaining in queue."
    recv emerg
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: backend be2 has no server available!"
    barrier b1 sync
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: (Server be2/srv2 is UP/READY \\(leaving forced maintenance\\).|Health check for server be2/srv2 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP)"
    barrier b1 sync
} -start

syslog S3 -level notice {
    recv
    expect ~ "Proxy be3 started"
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be3/srv3 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP"
    barrier b1 sync
    recv alert
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Server be3/srv3 is going DOWN for maintenance. 0 active and 0 backup servers left. [01] sessions active, 0 requeued, 0 remaining in queue."
    recv emerg
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: backend be3 has no server available!"
    barrier b1 sync
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: (Server be3/srv3 is UP/READY \\(leaving forced maintenance\\).|Health check for server be3/srv3 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP)"
    barrier b1 sync
} -start

syslog S4 -level notice {
    recv
    expect ~ "Proxy be4 started"
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be4/srv4 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP"
    barrier b1 sync
    recv alert
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Server be4/srv4 is going DOWN for maintenance. 0 active and 0 backup servers left. [01] sessions active, 0 requeued, 0 remaining in queue."
    recv emerg
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: backend be4 has no server available!"
    barrier b1 sync
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: (Server be4/srv4 is UP/READY \\(leaving forced maintenance\\).|Health check for server be4/srv4 succeeded, reason: Layer4 check passed, check duration: [[:digit:]]+ms, status: 1/1 UP)"
    barrier b1 sync
} -start


haproxy h1 -conf {
    defaults
        timeout client  1s
        timeout server  1s
        timeout connect 1s
        default-server check downinter 1s rise 1 fall 1

    frontend fe1
        bind "fd@${fe1}"
        use_backend be1

    frontend fe2
        bind "fd@${fe2}"
        use_backend be2

    frontend fe3
        bind "fd@${fe3}"
        use_backend be3

    frontend fe4
        bind "fd@${fe4}"
        use_backend be4

    backend be1
        option log-health-checks
        log ${S1_addr}:${S1_port} daemon
        server srv1 ${s1_addr}:${s1_port}

    backend be2
        option log-health-checks
        log ${S2_addr}:${S2_port} daemon
        server srv2 ${s2_addr}:${s2_port}

    backend be3
        option log-health-checks
        log ${S3_addr}:${S3_port} daemon
        server srv3 ${s3_addr}:${s3_port}

    backend be4
        option log-health-checks
        log ${S4_addr}:${S4_port} daemon
        server srv4 ${s4_addr}:${s4_port}
} -start

haproxy h1 -cli {
    barrier b1 sync
    send "show servers state"
    expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 6 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 6 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 6 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 3 1 6 0 0 0 - ${s4_port} -"
}

haproxy h1 -cli {
    send "disable server be1/srv1"
    expect ~ .*
}

haproxy h1 -cli {
    send "disable server be2/srv2"
    expect ~ .*
}

haproxy h1 -cli {
    send "disable server be3/srv3"
    expect ~ .*
}

haproxy h1 -cli {
    send "disable server be4/srv4"
    expect ~ .*
}

haproxy h1 -cli {
    barrier b1 sync
    send "show servers state"
    expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 14 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 14 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 14 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 0 1 1 1 [[:digit:]]+ 6 3 [01] 14 0 0 0 - ${s4_port} -"
}

haproxy h1 -cli {
    send "enable server be1/srv1"
    expect ~ .*
}

haproxy h1 -cli {
    send "enable server be2/srv2"
    expect ~ .*
}

haproxy h1 -cli {
    send "enable server be3/srv3"
    expect ~ .*
}

haproxy h1 -cli {
    send "enable server be4/srv4"
    expect ~ .*
}

haproxy h1 -cli {
    barrier b1 sync
    send "show servers state"
    expect ~ "# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord\n6 be1 1 srv1 ${s1_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s1_port} -\n7 be2 1 srv2 ${s2_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s2_port} -\n8 be3 1 srv3 ${s3_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s3_port} -\n9 be4 1 srv4 ${s4_addr} 2 0 1 1 [[:digit:]]+ 6 [03] 1 [67] 0 0 0 - ${s4_port} -"
}

syslog S1 -wait
syslog S2 -wait
syslog S3 -wait
syslog S4 -wait

