blob: 415a670dfc248450c4087eb4cda241202bf1d732 [file] [log] [blame]
Frédéric Lécailleafbfa2a2018-08-24 16:14:28 +02001#commit b406b87
2# BUG/MEDIUM: connection: don't store recv() result into trash.data
3#
4# Cyril Bonté discovered that the proxy protocol randomly fails since
5# commit 843b7cb ("MEDIUM: chunks: make the chunk struct's fields match
6# the buffer struct"). This is because we used to store recv()'s return
7# code into trash.data which is now unsigned, so it never compares as
8# negative against 0. Let's clean this up and test the result itself
9# without storing it first.
10
11varnishtest "PROXY protocol random failures"
12
13feature ignore_unknown_macro
14
15syslog Slog_1 -repeat 8 -level info {
16 recv
17 expect ~ "Connect from .* to ${h1_ssl_addr}:${h1_ssl_port}"
18 recv
Christopher Faulet8f161482018-12-19 11:49:39 +010019 expect ~ "ssl-offload-http/http .* \"POST /[1-8] HTTP/(2\\.0|1\\.1)\""
Frédéric Lécailleafbfa2a2018-08-24 16:14:28 +020020} -start
21
22haproxy h1 -conf {
23 global
24 nbproc 4
25 nbthread 4
26 tune.ssl.default-dh-param 2048
27 stats bind-process 1
28 log ${Slog_1_addr}:${Slog_1_port} len 2048 local0 debug err
29
30 defaults
31 mode http
Christopher Faulet8f161482018-12-19 11:49:39 +010032 ${no-htx} option http-use-htx
Frédéric Lécailleafbfa2a2018-08-24 16:14:28 +020033 timeout client 1s
34 timeout server 1s
35 timeout connect 1s
36 log global
37
38 listen http
39 bind-process 1
Frédéric Lécaillea7029472018-12-20 09:55:44 +010040 bind unix@"${tmpdir}/http.socket" accept-proxy name ssl-offload-http
Frédéric Lécailleafbfa2a2018-08-24 16:14:28 +020041 option forwardfor
42
43 listen ssl-offload-http
44 option httplog
45 bind-process 2-4
46 bind "fd@${ssl}" ssl crt ${testdir}/common.pem ssl no-sslv3 alpn h2,http/1.1
Frédéric Lécaillea7029472018-12-20 09:55:44 +010047 server http unix@"${tmpdir}/http.socket" send-proxy
Frédéric Lécailleafbfa2a2018-08-24 16:14:28 +020048} -start
49
50
51shell {
52 HOST=${h1_ssl_addr}
53 if [ "$HOST" = "::1" ] ; then
54 HOST="\[::1\]"
55 fi
56 for i in 1 2 3 4 5 6 7 8 ; do
57 urls="$urls https://$HOST:${h1_ssl_port}/$i"
58 done
59 curl -i -k -d 'x=x' $urls & wait $!
60}
61
62syslog Slog_1 -wait