#commit b406b87
# BUG/MEDIUM: connection: don't store recv() result into trash.data
#
# Cyril Bonté discovered that the proxy protocol randomly fails since
# commit 843b7cb ("MEDIUM: chunks: make the chunk struct's fields match
# the buffer struct"). This is because we used to store recv()'s return
# code into trash.data which is now unsigned, so it never compares as
# negative against 0. Let's clean this up and test the result itself
# without storing it first.

varnishtest "PROXY protocol random failures"
#REQUIRE_OPTIONS=OPENSSL

feature ignore_unknown_macro

#REGTEST_TYPE=bug

syslog Slog_1 -repeat 8 -level info {
    recv
    expect ~ "Connect from .* to ${h1_ssl_addr}:${h1_ssl_port}"
    recv
    expect ~ "ssl-offload-http/http .* \"POST /[1-8] HTTP/(2\\.0|1\\.1)\""
} -start

haproxy h1 -conf {
    global
        nbproc 4
        tune.ssl.default-dh-param 2048
        stats bind-process 1
        log ${Slog_1_addr}:${Slog_1_port} len 2048 local0 debug err

    defaults
        mode http
        ${no-htx} option http-use-htx
        timeout client 1s
        timeout server 1s
        timeout connect 1s
        log global

    listen http
        bind-process 1
        bind unix@"${tmpdir}/http.socket" accept-proxy name ssl-offload-http
        option forwardfor

    listen ssl-offload-http
        option httplog
        bind-process 2-4
        bind "fd@${ssl}" ssl crt ${testdir}/common.pem ssl no-sslv3 alpn h2,http/1.1
        server http unix@"${tmpdir}/http.socket" send-proxy
} -start


shell {
    HOST=${h1_ssl_addr}
    if [ "$HOST" = "::1" ] ; then
        HOST="\[::1\]"
    fi
    for i in 1 2 3 4 5 6 7 8 ; do
        urls="$urls https://$HOST:${h1_ssl_port}/$i"
    done
    curl -i -k -d 'x=x' $urls & wait $!
}

syslog Slog_1 -wait
