mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
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.
175 lines
4.9 KiB
Plaintext
175 lines
4.9 KiB
Plaintext
varnishtest "Test declaration of HTTP rules in default sections"
|
|
|
|
feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
|
|
feature ignore_unknown_macro
|
|
|
|
server s1 {
|
|
rxreq
|
|
expect req.http.x-frontend == "fe"
|
|
expect req.http.x-backend == "be"
|
|
expect req.http.x-test1-frt == "def_front"
|
|
expect req.http.x-test1-bck == "def_back"
|
|
txresp
|
|
} -start
|
|
|
|
server s2 {
|
|
rxreq
|
|
txresp
|
|
} -start
|
|
|
|
haproxy h1 -conf {
|
|
global
|
|
.if feature(THREAD)
|
|
thread-groups 1
|
|
.endif
|
|
|
|
defaults common
|
|
mode http
|
|
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
defaults def_front from common
|
|
http-request set-header x-frontend "%[fe_name]"
|
|
http-request set-var(txn.test1) "str(def_front)"
|
|
http-response set-header x-frontend "%[fe_name]"
|
|
http-response set-var(txn.test2) "str(def_front)"
|
|
http-after-response set-var(txn.test3) "str(def_front)"
|
|
|
|
defaults def_back from common
|
|
http-request set-header x-backend "%[be_name]"
|
|
http-request set-var(txn.test1) "str(def_back)"
|
|
http-response set-header x-backend "%[be_name]"
|
|
http-response set-var(txn.test2) "str(def_back)"
|
|
http-after-response set-var(txn.test3) "str(def_back)"
|
|
|
|
frontend fe from def_front
|
|
bind "fd@${feh1}"
|
|
|
|
http-request set-header x-test1-frt "%[var(txn.test1)]"
|
|
http-response set-header x-test2-frt "%[var(txn.test2)]"
|
|
http-after-response set-header x-test3-frt "%[var(txn.test3)]"
|
|
|
|
default_backend be
|
|
|
|
backend be from def_back
|
|
http-request set-header x-test1-bck "%[var(txn.test1)]"
|
|
http-response set-header x-test2-bck "%[var(txn.test2)]"
|
|
http-after-response set-header x-test3-bck "%[var(txn.test3)]"
|
|
|
|
server s1 ${s1_addr}:${s1_port}
|
|
|
|
} -start
|
|
|
|
|
|
haproxy h2 -conf {
|
|
global
|
|
.if feature(THREAD)
|
|
thread-groups 1
|
|
.endif
|
|
|
|
defaults common
|
|
mode http
|
|
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
defaults def_front from common
|
|
http-request allow
|
|
http-response allow
|
|
http-after-response allow
|
|
|
|
defaults def_back from common
|
|
http-request allow
|
|
http-response allow
|
|
http-after-response allow
|
|
|
|
frontend fe from def_front
|
|
bind "fd@${feh2}"
|
|
|
|
http-request deny status 403
|
|
http-response deny status 502
|
|
http-after-response set-status 502
|
|
|
|
default_backend be
|
|
|
|
backend be from def_back
|
|
http-request deny status 403
|
|
http-response deny status 502
|
|
http-after-response set-status 502
|
|
|
|
server s2 ${s2_addr}:${s2_port}
|
|
|
|
} -start
|
|
|
|
haproxy h3 -conf {
|
|
global
|
|
.if feature(THREAD)
|
|
thread-groups 1
|
|
.endif
|
|
|
|
defaults base-http
|
|
mode http
|
|
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
http-request capture hdr(Host) len 64 # idx 0
|
|
http-request capture hdr(X-req-1) len 32 # idx 1
|
|
|
|
frontend fe1 from base-http
|
|
bind "fd@${fe1h3}"
|
|
declare capture request len 32 # idx 2
|
|
|
|
http-request capture hdr(X-req-2) id 2
|
|
http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]" hdr "X-Capture-3" "%[capture.req.hdr(2)]"
|
|
|
|
frontend fe2 from base-http
|
|
bind "fd@${fe2h3}"
|
|
http-request capture hdr(X-req-2) id 1
|
|
http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]"
|
|
|
|
} -start
|
|
|
|
client c1 -connect ${h1_feh1_sock} {
|
|
txreq -req GET -url /
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-frontend == "fe"
|
|
expect resp.http.x-backend == "be"
|
|
expect resp.http.x-test2-bck == "def_back"
|
|
expect resp.http.x-test2-frt == "def_front"
|
|
expect resp.http.x-test3-bck == "def_back"
|
|
expect resp.http.x-test3-frt == "def_front"
|
|
} -run
|
|
|
|
client c2 -connect ${h2_feh2_sock} {
|
|
txreq -req GET -url /
|
|
rxresp
|
|
expect resp.status == 200
|
|
} -run
|
|
|
|
client c3 -connect ${h3_fe1h3_sock} {
|
|
txreq -req GET -url / \
|
|
-hdr "host: v-test" \
|
|
-hdr "x-req-1: val1" \
|
|
-hdr "x-req-2: val2"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-capture-1 == "v-test"
|
|
expect resp.http.x-capture-2 == "val1"
|
|
expect resp.http.x-capture-3 == "val2"
|
|
} -run
|
|
|
|
client c4 -connect ${h3_fe2h3_sock} {
|
|
txreq -req GET -url / \
|
|
-hdr "host: v-test" \
|
|
-hdr "x-req-1: val1" \
|
|
-hdr "x-req-2: val2"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-capture-1 == "v-test"
|
|
expect resp.http.x-capture-2 == "val2"
|
|
expect resp.http.x-capture-3 == "<undef>"
|
|
} -run
|