mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-03 12:03:02 +00:00
9d511b3c27
Now that warnings were almost all removed, let's enable zero-warning via -dW. All tests were adjusted, but two: - mcli/mcli_start_progs.vtc: the programs section currently cannot be silenced - stats/stats-file.vtc: the warning comes from the stats file itself on comment lines. All other ones are now OK.
302 lines
6.3 KiB
Plaintext
302 lines
6.3 KiB
Plaintext
varnishtest "HTTP request tests: H1 to H1 (HTX mode supported only for HAProxy >= 1.9)"
|
|
|
|
# Run it with HAPROXY_PROGRAM=$PWD/haproxy varnishtest -l -k -t 1 "$1"
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
server s1 {
|
|
##
|
|
## Handle GET requests
|
|
##
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 1"
|
|
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 2"
|
|
|
|
rxreq
|
|
expect req.bodylen == 38
|
|
expect req.body == "this must be delivered, like it or not"
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 3"
|
|
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 4"
|
|
|
|
accept
|
|
|
|
##
|
|
## Handle HEAD requests
|
|
##
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 1"
|
|
|
|
accept
|
|
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 2"
|
|
|
|
accept
|
|
|
|
rxreq
|
|
expect req.bodylen == 38
|
|
expect req.body == "this must be delivered, like it or not"
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 3"
|
|
|
|
accept
|
|
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 4"
|
|
|
|
accept
|
|
|
|
##
|
|
## Handle POST requests
|
|
##
|
|
# POST request without body
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 1"
|
|
|
|
# POST request without body
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 2"
|
|
|
|
# POST request with a body
|
|
rxreq
|
|
expect req.bodylen == 12
|
|
expect req.body == "this is sent"
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 3"
|
|
|
|
# POST request without body
|
|
rxreq
|
|
expect req.bodylen == 0
|
|
expect req.body == ""
|
|
txresp \
|
|
-status 200 \
|
|
-body "response 4"
|
|
} -repeat 3 -start
|
|
|
|
haproxy h1 -arg '-dW' -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 "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
listen feh1
|
|
bind "fd@${feh1}"
|
|
#bind "fd@${feh2}" proto h2
|
|
server s1 ${s1_addr}:${s1_port}
|
|
} -start
|
|
|
|
# GET requests
|
|
client c1h1 -connect ${h1_feh1_sock} {
|
|
# first request is valid
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test1.html"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 1"
|
|
|
|
# second request is valid and advertises C-L:0
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test2.html" \
|
|
-hdr "content-length: 0"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 2"
|
|
|
|
# third request sends a body with a GET
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test3.html" \
|
|
-body "this must be delivered, like it or not"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 3"
|
|
|
|
# fourth request is valid and advertises C-L:0, and close, and is
|
|
# followed by a string "this is not sent\r\n\r\n" which must be
|
|
# dropped.
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test4.html" \
|
|
-hdr "content-length: 0" \
|
|
-hdr "connection: close"
|
|
# "this is not sent"
|
|
sendhex "74787973207973206E6F742073656E740D0A0D0A"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 4"
|
|
|
|
# the connection is expected to be closed and no more response must
|
|
# arrive here.
|
|
expect_close
|
|
} -run
|
|
|
|
# HEAD requests
|
|
# Note: for now they fail with varnishtest, which expects the amount of
|
|
# data advertised in the content-length response.
|
|
client c2h1 -connect ${h1_feh1_sock} {
|
|
# first request is valid
|
|
txreq \
|
|
-req "HEAD" \
|
|
-url "/test11.html"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == ""
|
|
|
|
# second request is valid and advertises C-L:0
|
|
txreq \
|
|
-req "HEAD" \
|
|
-url "/test12.html" \
|
|
-hdr "content-length: 0"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == ""
|
|
|
|
# third request sends a body with a HEAD
|
|
txreq \
|
|
-req "HEAD" \
|
|
-url "/test13.html" \
|
|
-body "this must be delivered, like it or not"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == ""
|
|
|
|
# fourth request is valid and advertises C-L:0, and close, and is
|
|
# followed by a string "this is not sent\r\n\r\n" which must be
|
|
# dropped.
|
|
txreq \
|
|
-req "HEAD" \
|
|
-url "/test14.html" \
|
|
-hdr "content-length: 0" \
|
|
-hdr "connection: close"
|
|
# "this is not sent"
|
|
sendhex "74787973207973206E6F742073656E740D0A0D0A"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == ""
|
|
|
|
# the connection is expected to be closed and no more response must
|
|
# arrive here.
|
|
expect_close
|
|
} -run
|
|
|
|
client c3h1 -connect ${h1_feh1_sock} {
|
|
# first request is valid
|
|
txreq \
|
|
-req "POST" \
|
|
-url "/test21.html"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 1"
|
|
|
|
# second request is valid and advertises C-L:0
|
|
txreq \
|
|
-req "POST" \
|
|
-url "/test22.html" \
|
|
-hdr "content-length: 0"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 2"
|
|
|
|
# third request is valid and advertises (and sends) some contents
|
|
txreq \
|
|
-req "POST" \
|
|
-url "/test23.html" \
|
|
-body "this is sent"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 3"
|
|
|
|
# fourth request is valid and advertises C-L:0, and close, and is
|
|
# followed by a string "this is not sent\r\n\r\n" which must be
|
|
# dropped.
|
|
txreq \
|
|
-req "POST" \
|
|
-url "/test24.html" \
|
|
-hdr "content-length: 0" \
|
|
-hdr "connection: close"
|
|
# "this is not sent"
|
|
sendhex "74787973207973206E6F742073656E740D0A0D0A"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.body == "response 4"
|
|
|
|
# the connection is expected to be closed and no more response must
|
|
# arrive here.
|
|
expect_close
|
|
} -run
|
|
|
|
client c4h1 -connect ${h1_feh1_sock} {
|
|
# this request is invalid and advertises an invalid C-L ending with an
|
|
# empty value, which results in a stream error.
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test31.html" \
|
|
-hdr "content-length: 0," \
|
|
-hdr "connection: close"
|
|
rxresp
|
|
expect resp.status == 400
|
|
expect_close
|
|
} -run
|
|
|
|
client c5h1 -connect ${h1_feh1_sock} {
|
|
# this request is invalid and advertises an empty C-L, which results
|
|
# in a stream error.
|
|
txreq \
|
|
-req "GET" \
|
|
-url "/test41.html" \
|
|
-hdr "content-length:" \
|
|
-hdr "connection: close"
|
|
rxresp
|
|
expect resp.status == 400
|
|
expect_close
|
|
} -run
|