]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REGTESTS: complete http-reuse test with pool-conn-name
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 28 May 2024 12:59:58 +0000 (14:59 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 28 May 2024 13:00:54 +0000 (15:00 +0200)
Add new test cases in http_reuse_conn_hash vtest. Ensure new server
parameter "pool-conn-name" is used as expected for idle connection name,
both alone and mixed with a SNI.

reg-tests/connection/http_reuse_conn_hash.vtc

index 991e86f7a8e411599d9a222ae831fa362a02ff7a..d77f7599addc321f90b366d7424a8b8877c62dc8 100644 (file)
@@ -13,6 +13,16 @@ haproxy h1 -conf {
                bind "fd@${feS_sni}"
                server srv2 ${h1_feR_ssl_addr}:${h1_feR_ssl_port} ssl sni "req.hdr(x-sni)" verify none pool-low-conn 2
 
+       # pool-conn-name
+       listen sender-name
+               bind "fd@${feS_name}"
+               server srv2 ${h1_feR_addr}:${h1_feR_port} pool-conn-name "req.hdr(x-name)" pool-low-conn 2
+
+       # sni + pool-conn-name
+       listen sender-sni-name
+               bind "fd@${feS_sni_name}"
+               server srv2 ${h1_feR_ssl_addr}:${h1_feR_ssl_port} ssl sni "req.hdr(x-sni)" verify none pool-conn-name "req.hdr(x-name)" pool-low-conn 2
+
        # set-dst
        # specify dst1_addr for server, which should be identical to dst2_addr
        # port is specified by the client in header x-dst-port
@@ -29,6 +39,7 @@ haproxy h1 -conf {
                server srv2 ${h1_feR_proxy_addr}:${h1_feR_proxy_port} send-proxy pool-low-conn 2
 
        listen receiver
+               bind "fd@${feR}"
                bind "fd@${feR_ssl}" ssl crt ${testdir}/common.pem
                bind "fd@${feR_proxy}" accept-proxy
                http-request return status 200
@@ -72,6 +83,62 @@ client c_sni -connect ${h1_feS_sni_sock} {
        expect resp.http.http_first_request == "0"
 } -run
 
+client c_name -connect ${h1_feS_name_sock} {
+       # first request
+       txreq \
+         -hdr "x-name: www.custom.com"
+       rxresp
+       expect resp.http.http_first_request == "1"
+
+       # second request with same name, connection must be reused
+       txreq \
+         -hdr "x-name: www.custom.com"
+       rxresp
+       expect resp.http.http_first_request == "0"
+
+       # third request with a different name, a new connection must be used
+       txreq \
+         -hdr "x-name: www.custom2.com"
+       rxresp
+       expect resp.http.http_first_request == "1"
+
+       # fourth request, reuse name2
+       txreq \
+         -hdr "x-name: www.custom2.com"
+       rxresp
+       expect resp.http.http_first_request == "0"
+} -run
+
+client c_sni_name -connect ${h1_feS_sni_name_sock} {
+       # first request
+       txreq                           \
+         -hdr "x-sni: www.custom.com"  \
+         -hdr "x-name: www.custom.com"
+       rxresp
+       expect resp.http.http_first_request == "1"
+
+       # second request with same name but different sni, connection must be reused
+       txreq                           \
+         -hdr "x-sni: www.custom2.com"  \
+         -hdr "x-name: www.custom.com"
+       rxresp
+       expect resp.http.http_first_request == "0"
+
+       # third request with a different name, a new connection must be used
+       txreq                            \
+         -hdr "x-sni: www.custom2.com"  \
+         -hdr "x-name: www.custom2.com"
+       rxresp
+       expect resp.http.http_first_request == "1"
+
+       # fourth request, reuse name2 with a new sni
+       txreq                            \
+         -hdr "x-sni: www.custom3.com"  \
+         -hdr "x-name: www.custom2.com"
+       rxresp
+       expect resp.http.http_first_request == "0"
+} -run
+
 # http-reuse with destination address
 client c_dst1 -connect ${h1_feS_dst_sock} {
        txreq \