haproxy/reg-tests/http-rules/h00001.vtc
Willy Tarreau 9832a37b16 REGTESTS: remove the expected window updates from H2 handshakes
These ones are not needed anymore since commit 97aaa67 ("MINOR: mux-h2:
only increase the connection window with the first update"). The tests
should now be more reliable. It might be worth simply removing all the
explicit handshake though it doesn't hurt and still serves as documentation.
2018-12-23 09:58:41 +01:00

226 lines
9.0 KiB
Plaintext

varnishtest "Composite HTTP manipulation test (H1 and H2 clear to H1 clear)"
#REQUIRE_VERSION=1.9
# This config tests several http-request features and their interactions.
# It extracts some samples, places them into variables, modifies some header
# fields, appends multiple identical header fields, overwrites the start line
# using several methods, then dumps the initial list of variables and the final
# one, then applies CRC32 to these values as signatures that are easy to test.
# Then it does it again in the backend after saving the current headers into
# the same names prefixed by "fe-". Then it does the same on the response path.
# If some modifications are performed, the crc values need to be adjusted based
# on the failed logs.
#
# Run it with HAPROXY_PROGRAM=$PWD/haproxy varnishtest -l -k -t 1 "$1"
feature ignore_unknown_macro
server s1 {
rxreq
txresp \
-status 234 \
-hdr "hdr1: val1" \
-hdr "hdr2: val2a" \
-hdr "hdr2: val2b" \
-hdr "hdr3: val3a, val3b" \
-hdr "hdr4:" \
-body "This is a body"
expect req.method == "GET"
expect req.http.fe-sl1-crc == 992395575
expect req.http.fe-sl2-crc == 1270056220
expect req.http.fe-hdr-crc == 1719311923
expect req.http.be-sl1-crc == 2604236007
expect req.http.be-sl2-crc == 4181358964
expect req.http.be-hdr-crc == 3634102538
} -repeat 2 -start
haproxy h1 -conf {
defaults
mode http
${no-htx} option http-use-htx
timeout connect 1s
timeout client 1s
timeout server 1s
frontend fe
bind "fd@${feh1}"
bind "fd@${feh2}" proto h2
#### requests
http-request set-var(req.method) method
http-request set-var(req.uri) url
http-request set-var(req.path) path
http-request set-var(req.query) query
http-request set-var(req.param) url_param(qs_arg)
http-request set-header sl1 "sl1: "
http-request set-method "%[str(GET)]"
http-request set-uri concat(/bu/,req.uri,/eu)
http-request set-path "/bp/%[var(req.path)]/ep"
http-request set-query "bq&%[var(req.query)]&eq"
http-request set-header sl2 "sl2: "
http-request set-header sl1 "%[req.fhdr(sl1)] method=<%[var(req.method)]>; uri=<%[var(req.uri)]>; path=<%[var(req.path)]>;"
http-request set-header sl1 "%[req.fhdr(sl1)] query=<%[var(req.query)]>; param=<%[var(req.param)]>"
http-request set-header sl2 "%[req.fhdr(sl2)] method=<%[method]>; uri=<%[url]>; path=<%[path]>; "
http-request set-header sl2 "%[req.fhdr(sl2)] query=<%[query]>; param=<%[url_param(qs_arg)]>"
http-request set-header hdr "%[req.fhdr(hdr)] hdr1=<%[req.hdr(hdr1)]>; fhdr1=<%[req.fhdr(hdr1)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr2=<%[req.hdr(hdr2)]>; fhdr2=<%[req.fhdr(hdr2)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr3=<%[req.hdr(hdr3)]>; fhdr3=<%[req.fhdr(hdr3)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr4=<%[req.hdr(hdr4)]>; fhdr4=<%[req.fhdr(hdr4)]>;"
http-request set-header sl1-crc "%[req.fhdr(sl1),crc32]"
http-request set-header sl2-crc "%[req.fhdr(sl2),crc32]"
http-request set-header hdr-crc "%[req.fhdr(hdr),crc32]"
#### responses
http-response set-header be-sl1 "%[res.fhdr(sl1)]"
http-response set-header be-sl2 "%[res.fhdr(sl2)]"
http-response set-header be-hdr "%[res.fhdr(hdr)]"
http-response set-header be-sl1-crc "%[res.fhdr(sl1-crc)]"
http-response set-header be-sl2-crc "%[res.fhdr(sl2-crc)]"
http-response set-header be-hdr-crc "%[res.fhdr(hdr-crc)]"
http-response set-var(res.status) status
http-response set-header sl1 "sl1: "
http-response set-status 200
http-response set-header sl2 "sl2: "
http-response set-header sl1 "%[res.fhdr(sl1)] status=<%[var(res.status)]>;"
http-response set-header sl2 "%[res.fhdr(sl2)] status=<%[status]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr1=<%[res.hdr(hdr1)]>; fhdr1=<%[res.fhdr(hdr1)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr2=<%[res.hdr(hdr2)]>; fhdr2=<%[res.fhdr(hdr2)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr3=<%[res.hdr(hdr3)]>; fhdr3=<%[res.fhdr(hdr3)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr4=<%[res.hdr(hdr4)]>; fhdr4=<%[res.fhdr(hdr4)]>;"
http-response set-header fe-sl1-crc "%[res.fhdr(sl1),crc32]"
http-response set-header fe-sl2-crc "%[res.fhdr(sl2),crc32]"
http-response set-header fe-hdr-crc "%[res.fhdr(hdr),crc32]"
default_backend be
backend be
#### requests
http-request set-header fe-sl1 "%[req.fhdr(sl1)]"
http-request set-header fe-sl2 "%[req.fhdr(sl2)]"
http-request set-header fe-hdr "%[req.fhdr(hdr)]"
http-request set-header fe-sl1-crc "%[req.fhdr(sl1-crc)]"
http-request set-header fe-sl2-crc "%[req.fhdr(sl2-crc)]"
http-request set-header fe-hdr-crc "%[req.fhdr(hdr-crc)]"
http-request set-var(req.method) method
http-request set-var(req.uri) url
http-request set-var(req.path) path
http-request set-var(req.query) query
http-request set-var(req.param) url_param(qs_arg)
http-request set-header sl1 "sl1: "
http-request set-method "%[str(GET)]"
http-request set-uri concat(/bu/,req.uri,/eu)
http-request set-path "/bp/%[var(req.path)]/ep"
http-request set-query "bq&%[var(req.query)]&eq"
http-request set-header sl2 "sl2: "
http-request set-header sl1 "%[req.fhdr(sl1)] method=<%[var(req.method)]>; uri=<%[var(req.uri)]>; path=<%[var(req.path)]>;"
http-request set-header sl1 "%[req.fhdr(sl1)] query=<%[var(req.query)]>; param=<%[var(req.param)]>"
http-request set-header sl2 "%[req.fhdr(sl2)] method=<%[method]>; uri=<%[url]>; path=<%[path]>; "
http-request set-header sl2 "%[req.fhdr(sl2)] query=<%[query]>; param=<%[url_param(qs_arg)]>"
http-request set-header hdr "%[req.fhdr(hdr)] hdr1=<%[req.hdr(hdr1)]>; fhdr1=<%[req.fhdr(hdr1)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr2=<%[req.hdr(hdr2)]>; fhdr2=<%[req.fhdr(hdr2)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr3=<%[req.hdr(hdr3)]>; fhdr3=<%[req.fhdr(hdr3)]>;"
http-request set-header hdr "%[req.fhdr(hdr)] hdr4=<%[req.hdr(hdr4)]>; fhdr4=<%[req.fhdr(hdr4)]>;"
http-request set-header be-sl1-crc "%[req.fhdr(sl1),crc32]"
http-request set-header be-sl2-crc "%[req.fhdr(sl2),crc32]"
http-request set-header be-hdr-crc "%[req.fhdr(hdr),crc32]"
#### responses
http-response set-var(res.status) status
http-response set-header sl1 "sl1: "
http-response set-status 200
http-response set-header sl2 "sl2: "
http-response set-header sl1 "%[res.fhdr(sl1)] status=<%[var(res.status)]>;"
http-response set-header sl2 "%[res.fhdr(sl2)] status=<%[status]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr1=<%[res.hdr(hdr1)]>; fhdr1=<%[res.fhdr(hdr1)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr2=<%[res.hdr(hdr2)]>; fhdr2=<%[res.fhdr(hdr2)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr3=<%[res.hdr(hdr3)]>; fhdr3=<%[res.fhdr(hdr3)]>;"
http-response set-header hdr "%[res.fhdr(hdr)] hdr4=<%[res.hdr(hdr4)]>; fhdr4=<%[res.fhdr(hdr4)]>;"
http-response set-header sl1-crc "%[res.fhdr(sl1),crc32]"
http-response set-header sl2-crc "%[res.fhdr(sl2),crc32]"
http-response set-header hdr-crc "%[res.fhdr(hdr),crc32]"
server s1 ${s1_addr}:${s1_port}
} -start
client c1h1 -connect ${h1_feh1_sock} {
txreq \
-req GET \
-url /path/to/file.extension?qs_arg=qs_value \
-hdr "hdr1: val1" \
-hdr "hdr2: val2a" \
-hdr "hdr2: val2b" \
-hdr "hdr3: val3a, val3b" \
-hdr "hdr4:"
rxresp
expect resp.status == 200
expect resp.http.be-sl1-crc == 487202719
expect resp.http.be-sl2-crc == 561949791
expect resp.http.be-hdr-crc == 1719311923
expect resp.http.fe-sl1-crc == 146151597
expect resp.http.fe-sl2-crc == 561949791
expect resp.http.fe-hdr-crc == 3634102538
expect resp.bodylen == 14
expect resp.body == "This is a body"
} -run
client c1h2 -connect ${h1_feh2_sock} {
txpri
stream 0 {
txsettings
rxsettings
txsettings -ack
rxsettings
expect settings.ack == true
} -run
stream 1 {
# warning: -req, -scheme, -url MUST be placed first otherwise
# the H2 protocol is invalid since they are pseudo-headers
txreq \
-req GET \
-scheme "https" \
-url /path/to/file.extension?qs_arg=qs_value \
-hdr "hdr1" "val1" \
-hdr "hdr2" " val2a" \
-hdr "hdr2" " val2b" \
-hdr "hdr3" " val3a, val3b" \
-hdr "hdr4" ""
rxhdrs
expect resp.status == 200
expect resp.http.be-sl1-crc == 487202719
expect resp.http.be-sl2-crc == 561949791
expect resp.http.be-hdr-crc == 1719311923
expect resp.http.fe-sl1-crc == 146151597
expect resp.http.fe-sl2-crc == 561949791
expect resp.http.fe-hdr-crc == 3634102538
expect resp.http.content-length == 14
rxdata -all
expect resp.body == "This is a body"
} -run
} -run