haproxy/reg-tests/connection/http_reuse_dispatch.vtc
Willy Tarreau 48d5ef363d REGTESTS: restrict execution to a single thread group
When threads are enabled and running on a machine with multiple CCX
or multiple nodes, thread groups are now enabled since 3.3-dev2, causing
load-balancing algorithms to randomly fail due to incoming connections
spreading over multiple groups and using different load balancing indexes.

Let's just force "thread-groups 1" into all configs when threads are
enabled to avoid this.
2025-06-30 18:54:35 +02:00

150 lines
3.2 KiB
Plaintext

varnishtest "Test the proper interaction between http-reuse and dispatch mode"
# With dispatch, the connection are considered as private and should only be
# reused for requests of the same session
# This is similar to the http-reuse never mode
feature ignore_unknown_macro
haproxy h1 -conf {
global
.if feature(THREAD)
thread-groups 1
.endif
nbthread 1
defaults
timeout client 30s
timeout server 30s
timeout connect 30s
mode http
listen sender1
bind "fd@${feN}"
http-reuse never
http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found }
server dispatch ${h1_feR_addr}:${h1_feR_port}
listen sender2
bind "fd@${feA}"
http-reuse always
http-request set-header client-id %[req.hdr(client-id)] if { req.hdr(client-id) -m found }
server dispatch ${h1_feR_addr}:${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)]
} -start
### http-reuse never
client c1 -connect ${h1_feN_sock} {
txreq \
-hdr "client-id: c1"
rxresp
expect resp.http.http_first_request == "1"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c1"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c1"
} -run
client c2 -connect ${h1_feN_sock} {
txreq \
-hdr "client-id: c2"
rxresp
expect resp.http.http_first_request == "1"
expect resp.http.client-id == "c2"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c2"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c2"
} -run
client c3 -connect ${h1_feN_sock} {
txreq \
-hdr "client-id: c3"
rxresp
expect resp.http.http_first_request == "1"
expect resp.http.client-id == "c3"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c3"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c3"
} -run
### http-reuse always
client c4 -connect ${h1_feA_sock} {
txreq \
-hdr "client-id: c4"
rxresp
expect resp.http.http_first_request == "1"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c4"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c4"
} -run
client c5 -connect ${h1_feA_sock} {
txreq \
-hdr "client-id: c5"
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c5"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c5"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c5"
} -run
client c6 -connect ${h1_feA_sock} {
txreq \
-hdr "client-id: c6"
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c6"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c6"
txreq
rxresp
expect resp.http.http_first_request == "0"
expect resp.http.client-id == "c6"
} -run