varnishtest "A test for the abortonclose option (H1 only)"
feature ignore_unknown_macro

# NOTE : This test may fail if too many vtest are running in parallel because
#        the port reserved for closed s1 server may be reused by another vtest

feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.0-dev0)'"
#REGTEST_TYPE=slow

# b0 : Wait s1 was detected as DOWN to be sure it is stopped
# b1 : Don't send /c4 before /c3 was received by s2 server
# b2 : Don't finish c2 before c1 and c3 before c4 (from syslog POV)
# b3 : finish c3 before s2

barrier b0 cond 2 -cyclic
barrier b1 cond 2 -cyclic
barrier b2 cond 2 -cyclic
barrier b3 cond 2 -cyclic

server s1 {
} -start
server s1 -break

server s2 {
    rxreq

    # unlock c4
    barrier b1 sync

    # wait end of c3
    barrier b3 sync

    expect_close
} -start

syslog S -level info {
    recv alert
    expect ~ "[^:\\[ ]*\\[[0-9]*\\]: Server check/srv1 is DOWN.*"
    barrier b0 sync

    recv
    expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe1 be1_1/srv1 [0-9]*/[0-9]*/-1/-1/[0-9]* 503 .* - - SC-- .* .* \"GET /c1 HTTP/1\\.1\""
    barrier b2 sync
    recv
    expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe1 be1_2/srv1 [0-9]*/[0-9]*/-1/-1/[0-9]* -1 .* - - CC-- .* .* \"GET /c2 HTTP/1\\.1\""
    barrier b2 sync
    recv
    expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe2 be2/<NOSRV> [0-9]*/[0-9]*/-1/-1/[0-9]* -1 .* - - CQ-- .* .* \"GET /c4 HTTP/1\\.1\""
    barrier b2 sync
    recv
    expect ~ "[^:\\[ ]*\\[[0-9]*\\]: .* .* fe2 be2/srv1 [0-9]*/[0-9]*/[0-9]*/-1/[0-9]* 400 .* - - CH-- .* .* \"GET /c3 HTTP/1\\.1\""
} -start

haproxy h1 -conf {
    global
        # WT: limit false-positives causing "HTTP header incomplete" due to
        # idle server connections being randomly used and randomly expiring
        # under us.
        tune.idle-pool.shared off

    defaults
        mode http
        option abortonclose
        retries 1
        timeout client  10s
        timeout server  10s
        timeout connect 100ms
        timeout queue   5s

    frontend fe1
        option httplog
        log ${S_addr}:${S_port} local0 debug err
        bind "fd@${fe1}"
        use_backend be1_1 if { path /c1 }
        use_backend be1_2 if { path /c2 }

    frontend fe2
        option httplog
        log ${S_addr}:${S_port} local0 debug err
        bind "fd@${fe2}"
        use_backend be2

    backend be1_1
        server srv1 ${s1_addr}:${s1_port}

    backend be1_2
        timeout connect 1s
        retries 10
        server srv1 ${s1_addr}:${s1_port}

    backend be2
        server srv1 ${s2_addr}:${s2_port} maxconn 1

    backend check
        server srv1 ${s1_addr}:${s1_port} check
        log ${S_addr}:${S_port} local0 debug alert
} -start

# Wait s1 was detected as DOWN
barrier b0 sync

# No server, wait all connection retries : SC--
client  c1 -connect ${h1_fe1_sock} {
    txreq -url /c1
    rxresp
    expect resp.status == 503
} -run

# Wait c1 log entry
barrier b2 sync

# No server, abort during connections retries : CC--
client  c2 -connect ${h1_fe1_sock} {
    txreq -url /c2
} -run

# Wait c2 log entry
barrier b2 sync

# server with maxconn=1, abort waiting the server reply : CH--
client  c3 -connect ${h1_fe2_sock} {
    txreq -url /c3

    # Wait c4 log entry
    barrier b2 sync
} -start

# server with maxconn=1, abort waiting in the queue (c3 still attached) : CQ--
client  c4 -connect ${h1_fe2_sock} {
    # Wait s2 receives c3 request
    barrier b1 sync

    txreq -url /c4
    delay .2
} -run

client c3 -wait

# unlock s2
barrier b3 sync

syslog S -wait
