haproxy/reg-tests/sample_fetches/cook.vtc
Ruei-Bang Chen 7a1ec235cd MINOR: sample: Add fetcher for getting all cookie names
This new fetcher can be used to extract the list of cookie names from
Cookie request header or from Set-Cookie response header depending on
the stream direction. There is an optional argument that can be used
as the delimiter (which is assumed to be the first character of the
argument) between cookie names. The default delimiter is comma (,).

Note that we will treat the Cookie request header as a semi-colon
separated list of cookies and each Set-Cookie response header as
a single cookie and extract the cookie names accordingly.
2023-11-03 09:57:06 +01:00

133 lines
3.0 KiB
Plaintext

varnishtest "cook sample fetch Test"
feature ignore_unknown_macro
# TEST - 1
# Cookie from request
server s1 {
rxreq
txresp
} -start
haproxy h1 -conf {
defaults
mode http
frontend fe
bind "fd@${fe}"
http-request set-var(txn.count) req.cook_cnt()
http-request set-var(txn.val) req.cook_val()
http-request set-var(txn.val_cook2) req.cook_val(cook2)
http-request set-var(txn.cook_names) req.cook_names
http-response set-header count %[var(txn.count)]
http-response set-header val %[var(txn.val)]
http-response set-header val_cook2 %[var(txn.val_cook2)]
http-response set-header cook_names %[var(txn.cook_names)]
default_backend be
backend be
server srv1 ${s1_addr}:${s1_port}
} -start
client c1 -connect ${h1_fe_sock} {
txreq -url "/" \
-hdr "cookie: cook1=0; cook2=123; cook3=22"
rxresp
expect resp.status == 200
expect resp.http.count == "3"
expect resp.http.val == "0"
expect resp.http.val_cook2 == "123"
expect resp.http.cook_names == "cook1,cook2,cook3"
} -run
# TEST - 2
# Set-Cookie from response
server s2 {
rxreq
txresp -hdr "Set-Cookie: cook1=0; cook2=123; cook3=22"
} -start
haproxy h2 -conf {
defaults
mode http
frontend fe
bind "fd@${fe}"
http-response set-var(txn.cook_names) res.cook_names
http-response set-header cook_names %[var(txn.cook_names)]
default_backend be
backend be
server srv2 ${s2_addr}:${s2_port}
} -start
client c2 -connect ${h2_fe_sock} {
txreq -url "/"
rxresp
expect resp.status == 200
expect resp.http.cook_names == "cook1"
} -run
# TEST - 3
# Multiple Cookie headers from request
server s3 {
rxreq
txresp
} -start
haproxy h3 -conf {
defaults
mode http
frontend fe
bind "fd@${fe}"
http-request set-var(txn.cook_names) req.cook_names
http-response set-header cook_names %[var(txn.cook_names)]
default_backend be
backend be
server srv3 ${s3_addr}:${s3_port}
} -start
client c3 -connect ${h3_fe_sock} {
txreq -url "/" \
-hdr "cookie: cook1=0; cook2=123; cook3=22" \
-hdr "cookie: cook4=1; cook5=2; cook6=3"
rxresp
expect resp.status == 200
expect resp.http.cook_names == "cook1,cook2,cook3,cook4,cook5,cook6"
} -run
# TEST - 4
# Multiple Set-Cookie headers from response
server s4 {
rxreq
txresp -hdr "Set-Cookie: cook1=0; cook2=123; cook3=22" \
-hdr "Set-Cookie: cook4=1; cook5=2; cook6=3"
} -start
haproxy h4 -conf {
defaults
mode http
frontend fe
bind "fd@${fe}"
http-response set-var(txn.cook_names) res.cook_names
http-response set-header cook_names %[var(txn.cook_names)]
default_backend be
backend be
server srv4 ${s4_addr}:${s4_port}
} -start
client c4 -connect ${h4_fe_sock} {
txreq -url "/"
rxresp
expect resp.status == 200
expect resp.http.cook_names == "cook1,cook4"
} -run