REGTEST: add the HTTP rules test involving HTX processing
It's the exact same test as the HTTP rules test except that it runs with HTX enabled.
This commit is contained in:
parent
907998194b
commit
64225e1f88
|
@ -0,0 +1,217 @@
|
||||||
|
varnishtest "Composite HTX 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
|
||||||
|
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} {
|
||||||
|
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
|
Loading…
Reference in New Issue