varnishtest "Health-checks: SMTP health-check"
#REQUIRE_VERSION=2.2
#REGTEST_TYPE=slow
feature ignore_unknown_macro

# This scripts tests health-checks for SMTP servers, enabled using
# "option smtpchk" line.

server s1 {
  send "220 smtp-check.vtc SMTP Server\r\n"
  recv 16
  send "250 smtp-check.vtc\r\n"
  recv 6
  send "221 smtp-check.vtc closing\r\n"
} -start

server s2 {
  send "220 smtp-check.vtc SMTP Server\r\n"
  recv 17
  send "250-smtp-check.vtc\r\n"
  send "250-KEYWORD\r\n"
  send "250 LAST KEYWORD\r\n"
  recv 6
  send "221 smtp-check.vtc closing\r\n"
} -start

server s3 {
  send "I'm not a SMTP server\r\n"
} -start

server s4 {
  send "421 Try again later\r\n"
} -start

server s5 {
  send "220 smtp-check.vtc SMTP Server\r\n"
  recv 16
  send "512 DNS error\r\n"
} -start

syslog S1 -level notice {
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be1/srv succeeded, reason: Layer7 check passed.+code: 221.+info: \"smtp-check.vtc closing\".+check duration: [[:digit:]]+ms, status: 1/1 UP."
} -start

syslog S2 -level notice {
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be2/srv succeeded, reason: Layer7 check passed.+code: 221.+info: \"smtp-check.vtc closing\".+check duration: [[:digit:]]+ms, status: 1/1 UP."
} -start

syslog S3 -level notice {
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be3/srv failed, reason: Layer7 invalid response.+info: \"I'm not a SMTP server\".+check duration: [[:digit:]]+ms, status: 0/1 DOWN."
} -start

syslog S4 -level notice {
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be4/srv failed, reason: Layer7 wrong status.+code: 421.+info: \"Try again later\".+check duration: [[:digit:]]+ms, status: 0/1 DOWN."
} -start

syslog S5 -level notice {
    recv
    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be5/srv failed, reason: Layer7 wrong status.+code: 512.+info: \"DNS error\".+check duration: [[:digit:]]+ms, status: 0/1 DOWN."
} -start


haproxy h1 -conf {
    defaults
        mode tcp
        timeout client 1s
        timeout server 1s
        timeout connect 100ms

    backend be1
        log ${S1_addr}:${S1_port} daemon
        option log-health-checks
        option smtpchk
        server srv ${s1_addr}:${s1_port} check inter 1s rise 1 fall 1

    backend be2
        log ${S2_addr}:${S2_port} daemon
        option log-health-checks
        option smtpchk EHLO domain.tld
        server srv ${s2_addr}:${s2_port} check inter 1s rise 1 fall 1

    backend be3
        log ${S3_addr}:${S3_port} daemon
        option log-health-checks
        option smtpchk
        server srv ${s3_addr}:${s3_port} check inter 1s rise 1 fall 1

    backend be4
        log ${S4_addr}:${S4_port} daemon
        option log-health-checks
        option smtpchk
        server srv ${s4_addr}:${s4_port} check inter 1s rise 1 fall 1

    backend be5
        log ${S5_addr}:${S5_port} daemon
        option log-health-checks
        option smtpchk EHLO domain.tld
        server srv ${s5_addr}:${s5_port} check inter 1s rise 1 fall 1

} -start

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