varnishtest "http-request set-timeout test"

feature ignore_unknown_macro

#REQUIRE_VERSION=2.4

server srv_h1 -repeat 9 {
    rxreq
    txresp
} -start

syslog Slog1 -level info {
    recv
    expect ~ "^.*timeout: 5000 5000.*$"
} -start

syslog Slog2 -level info {
    recv
    expect ~ "^.*timeout: 5000 5000.*$"
} -start

syslog Slog3 -level info {
    recv
    expect ~ "^.*timeout: 5000 3000.*$"
} -start

syslog Slog4 -level info {
    recv
    expect ~ "^.*timeout: 5000 5000.*$"
} -start

syslog Slog5 -level info {
    recv
    expect ~ "^.*timeout: 5000 3000.*$"
} -start

syslog Slog6 -level info {
    recv
    expect ~ "^.*timeout: 5000 5000.*$"
} -start

syslog Slog7 -level info {
    recv
    expect ~ "^.*timeout: 5000 5000.*$"
} -start

syslog Slog8 -level info {
    recv
    expect ~ "^.*timeout: 5000 3000.*$"
} -start

syslog Slog9 -level info {
    recv
    expect ~ "^.*timeout: 5000 3000.*$"
} -start

haproxy hap -conf {
    defaults
        timeout connect 5s
        timeout client 5s
        timeout server 5s
        log global

    listen li1
        mode http
        bind "fd@${li1}"
        log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
        log ${Slog1_addr}:${Slog1_port} len 2048 local0 debug err
        server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    listen li2
        mode http
        bind "fd@${li2}"
        log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
        log ${Slog2_addr}:${Slog2_port} len 2048 local0 debug err
        http-request set-timeout server 5s
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    listen li3
        mode http
        bind "fd@${li3}"
        log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
        log ${Slog4_addr}:${Slog4_port} len 2048 local0 debug err
        http-request set-timeout client 5s
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    frontend fe1
        mode http
        bind "fd@${fe1}"
        log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
        log ${Slog3_addr}:${Slog3_port} len 2048 local0 debug err
        default_backend be1

    backend be1
       mode http
       http-request set-timeout server int(3),mul(1000)
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    frontend fe2
        mode http
        bind "fd@${fe2}"
        log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
        log ${Slog5_addr}:${Slog5_port} len 2048 local0 debug err
        http-request set-timeout client int(3),mul(1000)
        default_backend be2

    backend be2
       mode http
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    listen li4
        mode http
        bind "fd@${li4}"
        log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
        log ${Slog6_addr}:${Slog6_port} len 2048 local0 debug err
        http-response set-timeout server 5s
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    listen li5
        mode http
        bind "fd@${li5}"
        log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
        log ${Slog7_addr}:${Slog7_port} len 2048 local0 debug err
        http-response set-timeout client 5s
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    frontend fe3
        mode http
        bind "fd@${fe3}"
        log-format "timeout: %[be_server_timeout] %[cur_server_timeout]"
        log ${Slog8_addr}:${Slog8_port} len 2048 local0 debug err
        default_backend be1

    backend be3
       mode http
       http-response set-timeout server int(3),mul(1000)
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}

    frontend fe4
        mode http
        bind "fd@${fe4}"
        log-format "timeout: %[fe_client_timeout] %[cur_client_timeout]"
        log ${Slog9_addr}:${Slog9_port} len 2048 local0 debug err
        http-response set-timeout client int(3),mul(1000)
        default_backend be2

    backend be4
       mode http
       server srv_h1 ${srv_h1_addr}:${srv_h1_port}
} -start

client c1 -connect ${hap_li1_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c2 -connect ${hap_li2_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c3 -connect ${hap_fe1_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c4 -connect ${hap_li3_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c5 -connect ${hap_fe2_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c6 -connect ${hap_li4_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c7 -connect ${hap_fe3_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c8 -connect ${hap_li5_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

client c9 -connect ${hap_fe4_sock} {
    txreq
    rxresp
    expect resp.status == 200
} -run

syslog Slog1 -wait
syslog Slog2 -wait
syslog Slog3 -wait
syslog Slog4 -wait
syslog Slog5 -wait
syslog Slog6 -wait
syslog Slog7 -wait
syslog Slog8 -wait
syslog Slog9 -wait
