| varnishtest "A test to be sure payload is skipped for bodyless responses" |
| feature ignore_unknown_macro |
| |
| #REQUIRE_VERSION=2.4 |
| |
| server s1 { |
| rxreq |
| txresp \ |
| -status 200 \ |
| -body "skipped data" |
| |
| rxreq |
| txresp \ |
| -status 200 \ |
| -bodylen 20000 |
| |
| rxreq |
| txresp \ |
| -status 200 \ |
| -nolen -hdr "Transfer-Encoding: chunked" |
| chunkedlen 15 |
| chunkedlen 1024 |
| chunkedlen 4048 |
| chunkedlen 0 |
| |
| rxreq |
| txresp \ |
| -status 200 \ |
| -body "last response" |
| } -repeat 2 -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 |
| timeout connect 1s |
| timeout client 1s |
| timeout server 1s |
| |
| listen fe1 |
| bind "fd@${fe1}" |
| # Rewrite the method to be sure to get the response payload |
| # on the server side |
| http-request set-method GET |
| server s1 ${s1_addr}:${s1_port} |
| |
| listen int |
| bind "fd@${int}" proto h2 |
| # Rewrite the method to be sure to get the response payload |
| # on the server side |
| http-request set-method GET |
| server s1 ${s1_addr}:${s1_port} |
| #server s1 ${h1_fe1_addr}:${h1_fe1_port} |
| |
| listen fe2 |
| bind "fd@${fe2}" |
| server s1 ${h1_int_addr}:${h1_int_port} proto h2 |
| } -start |
| |
| client c1 -connect ${h1_fe1_sock} { |
| txreq \ |
| -req "HEAD" \ |
| -url "/req1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| txreq \ |
| -req "HEAD" \ |
| -url "/req2" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| txreq \ |
| -req "HEAD" \ |
| -url "/req3" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| # The last one have a body and validate the connection was not closed |
| # unexpectedly and no payload was received for previous requests |
| txreq \ |
| -req "GET" \ |
| -url "/req4" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "last response" |
| } -run |
| |
| client c2 -connect ${h1_fe2_sock} { |
| txreq \ |
| -req "HEAD" \ |
| -url "/req1" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| txreq \ |
| -req "HEAD" \ |
| -url "/req2" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| txreq \ |
| -req "HEAD" \ |
| -url "/req3" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "" |
| |
| # The last one have a body and validate the connection was not closed |
| # unexpectedly and no payload was received for previous requests |
| txreq \ |
| -req "GET" \ |
| -url "/req4" |
| rxresp |
| expect resp.status == 200 |
| expect resp.body == "last response" |
| } -run |