Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 1 | #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 | |
| 11 | varnishtest "PROXY protocol random failures" |
Ilya Shipitsin | 9ab3138 | 2019-04-17 12:19:56 +0500 | [diff] [blame] | 12 | #REQUIRE_OPTIONS=OPENSSL |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 13 | |
| 14 | feature ignore_unknown_macro |
| 15 | |
Willy Tarreau | 4137889 | 2020-11-21 15:33:03 +0100 | [diff] [blame] | 16 | #REGTEST_TYPE=broken |
Frédéric Lécaille | dc1a3bd | 2019-03-29 15:07:24 +0100 | [diff] [blame] | 17 | |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 18 | syslog Slog_1 -repeat 8 -level info { |
| 19 | recv |
| 20 | expect ~ "Connect from .* to ${h1_ssl_addr}:${h1_ssl_port}" |
| 21 | recv |
Christopher Faulet | 452e578 | 2019-10-14 16:22:03 +0200 | [diff] [blame] | 22 | expect ~ "ssl-offload-http/http .* \"POST (https://.*:${h1_ssl_port})?/[1-8] HTTP/(2\\.0|1\\.1)\"" |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 23 | } -start |
| 24 | |
| 25 | haproxy h1 -conf { |
| 26 | global |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 27 | tune.ssl.default-dh-param 2048 |
| 28 | stats bind-process 1 |
| 29 | log ${Slog_1_addr}:${Slog_1_port} len 2048 local0 debug err |
| 30 | |
| 31 | defaults |
| 32 | mode http |
Willy Tarreau | f673923 | 2021-11-18 17:46:22 +0100 | [diff] [blame] | 33 | timeout client "${HAPROXY_TEST_TIMEOUT-5s}" |
| 34 | timeout server "${HAPROXY_TEST_TIMEOUT-5s}" |
| 35 | timeout connect "${HAPROXY_TEST_TIMEOUT-5s}" |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 36 | log global |
| 37 | |
| 38 | listen http |
Frédéric Lécaille | a702947 | 2018-12-20 09:55:44 +0100 | [diff] [blame] | 39 | bind unix@"${tmpdir}/http.socket" accept-proxy name ssl-offload-http |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 40 | option forwardfor |
| 41 | |
| 42 | listen ssl-offload-http |
| 43 | option httplog |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 44 | bind "fd@${ssl}" ssl crt ${testdir}/common.pem ssl no-sslv3 alpn h2,http/1.1 |
Frédéric Lécaille | a702947 | 2018-12-20 09:55:44 +0100 | [diff] [blame] | 45 | server http unix@"${tmpdir}/http.socket" send-proxy |
Frédéric Lécaille | afbfa2a | 2018-08-24 16:14:28 +0200 | [diff] [blame] | 46 | } -start |
| 47 | |
| 48 | |
| 49 | shell { |
| 50 | HOST=${h1_ssl_addr} |
| 51 | if [ "$HOST" = "::1" ] ; then |
| 52 | HOST="\[::1\]" |
| 53 | fi |
| 54 | for i in 1 2 3 4 5 6 7 8 ; do |
| 55 | urls="$urls https://$HOST:${h1_ssl_port}/$i" |
| 56 | done |
| 57 | curl -i -k -d 'x=x' $urls & wait $! |
| 58 | } |
| 59 | |
| 60 | syslog Slog_1 -wait |