]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REGTESTS: extend conn reuse test with transparent proxy
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 1 Apr 2025 16:19:53 +0000 (18:19 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 2 Apr 2025 12:57:40 +0000 (14:57 +0200)
Recently, work on connection reuses reveals an issue when mixed with
transparent proxy and set-dst. This patch rewrites the related regtests
to be able to catch this now fixed bug.

Note that it is the first regtest which relies on bc_reused recently
introduced sample fetches. This fetch could be reuse in other related
connection reuse regtests to simplify them.

reg-tests/connection/http_reuse_be_transparent.vtc

index f83511c61df2046c2b344733b1b805d016a84c52..ac79331c6a6237c2a12b8505993cd95b16525ca0 100644 (file)
@@ -18,68 +18,89 @@ haproxy h1 -conf {
 
        listen sender
                bind "fd@${feS}"
-               http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found }
                option transparent
-               http-request set-dst-port int(${h1_feR_port})
-
-       listen receiver
-               bind "fd@${feR}"
-               http-request set-var(sess.client_id) req.hdr(client-id)
-               http-request return status 200
-               http-after-response set-header http_first_request %[http_first_req]
-               http-after-response set-header client-id %[var(sess.client_id)]
+
+               http-request set-dst hdr(dst)
+               http-request set-dst-port hdr(dst-port)
+
+               http-after-response set-header http_reuse %[bc_reused]
+
+       listen srv1
+               bind "fd@${fes1}"
+               http-request add-header srv-id s1
+               http-request return status 200 hdr srv-id s1
+
+       listen srv2
+               bind "fd@${fes2}"
+               http-request add-header srv-id s2
+               http-request return status 200 hdr srv-id s2
 } -start
 
 client c1 -connect ${h1_feS_sock} {
        txreq \
-         -hdr "client-id: c1"
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "1"
+       expect resp.http.http_reuse == "0"
+       expect resp.http.srv-id == "s1"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c1"
+       expect resp.http.http_reuse == "1"
+       expect resp.http.srv-id == "s1"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c1"
+       expect resp.http.http_reuse == "1"
+       expect resp.http.srv-id == "s1"
 } -run
 
 client c2 -connect ${h1_feS_sock} {
        txreq \
-         -hdr "client-id: c2"
+         -hdr "dst: ${h1_fes2_addr}" \
+         -hdr "dst-port: ${h1_fes2_port}"
        rxresp
-       expect resp.http.http_first_request == "1"
-       expect resp.http.client-id == "c2"
+       expect resp.http.http_reuse == "0"
+       expect resp.http.srv-id == "s2"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c2"
+       expect resp.http.http_reuse == "0"
+       expect resp.http.srv-id == "s1"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes2_addr}" \
+         -hdr "dst-port: ${h1_fes2_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c2"
+       expect resp.http.http_reuse == "1"
+       expect resp.http.srv-id == "s2"
 } -run
 
 client c3 -connect ${h1_feS_sock} {
        txreq \
-         -hdr "client-id: c3"
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "1"
-       expect resp.http.client-id == "c3"
+       expect resp.http.http_reuse == "0"
+       expect resp.http.srv-id == "s1"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes1_addr}" \
+         -hdr "dst-port: ${h1_fes1_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c3"
+       expect resp.http.http_reuse == "1"
+       expect resp.http.srv-id == "s1"
 
-       txreq
+       txreq \
+         -hdr "dst: ${h1_fes2_addr}" \
+         -hdr "dst-port: ${h1_fes2_port}"
        rxresp
-       expect resp.http.http_first_request == "0"
-       expect resp.http.client-id == "c3"
+       expect resp.http.http_reuse == "0"
+       expect resp.http.srv-id == "s2"
 } -run
-