mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-17 17:04:35 +00:00
1afd826ae4
Some expect rules cannot be satisfied due to inherent ambiguity towards the received data: in the absence of match, the current behavior is to be forced to wait either the end of the connection or a buffer full, whichever comes first. Only then does the matching diagnostic is considered conclusive. For instance : tcp-check connect tcp-check expect !rstring "^error" tcp-check expect string "valid" This check will only succeed if the connection is closed by the server before the check timeout. Otherwise the first expect rule will wait for more data until "^error" regex matches or the check expires. Allow the user to explicitly define an amount of data that will be considered enough to determine the value of the check. This allows succeeding on negative rstring rules, as previously in valid condition no match happened, and the matching was repeated until the end of the connection. This could timeout the check while no error was happening. [Cf: I slighly updated the patch. The parameter was renamed and the value is a signed integer to support -1 as default value to ignore the parameter.]
70 lines
1.9 KiB
Plaintext
70 lines
1.9 KiB
Plaintext
varnishtest "tcp-check negative bounded regex match"
|
|
#EXCLUDE_TARGETS=freebsd,osx,generic
|
|
#REGTEST_TYPE=slow
|
|
#REQUIRE_VERSION=2.2
|
|
# This test use a negative expect rule and verify that setting a required
|
|
# minimum amount of data to match.
|
|
feature ignore_unknown_macro
|
|
|
|
syslog S1 -level notice {
|
|
recv
|
|
expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Proxy be1 started."
|
|
recv
|
|
expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be1/srv1 failed, reason: Layer7 timeout.*at step 2 of tcp-check"
|
|
} -start
|
|
|
|
syslog S2 -level notice {
|
|
recv
|
|
expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Proxy be2 started."
|
|
recv
|
|
expect ~ "[^:\\[ ]\\[${h1_pid}\\]: Health check for server be2/srv1 succeeded"
|
|
} -start
|
|
|
|
server s1 {
|
|
send "valid"
|
|
delay 0.2
|
|
expect_close
|
|
} -start
|
|
|
|
server s2 {
|
|
send "valid"
|
|
recv 10
|
|
send "valid"
|
|
delay 0.2
|
|
expect_close
|
|
} -start
|
|
|
|
haproxy h1 -conf {
|
|
defaults
|
|
mode tcp
|
|
timeout connect 200ms
|
|
timeout check 500ms
|
|
timeout server 5s
|
|
timeout client 5s
|
|
|
|
backend be1
|
|
log ${S1_addr}:${S1_port} len 2048 local0
|
|
option tcp-check
|
|
option log-health-checks
|
|
tcp-check connect
|
|
tcp-check expect !rstring "^error" comment "negative check"
|
|
tcp-check expect string "valid" comment "positive check"
|
|
tcp-check send "0123456789"
|
|
tcp-check expect string "valid" comment "positive check"
|
|
server srv1 ${s1_addr}:${s1_port} check inter 200ms rise 1 fall 1
|
|
|
|
backend be2
|
|
log ${S2_addr}:${S2_port} len 2048 local0
|
|
option tcp-check
|
|
option log-health-checks
|
|
tcp-check connect
|
|
tcp-check expect min-recv 5 !rstring "^error" comment "negative check"
|
|
tcp-check expect string "valid" comment "positive check"
|
|
tcp-check send "0123456789"
|
|
tcp-check expect string "valid" comment "positive check"
|
|
server srv1 ${s2_addr}:${s2_port} check inter 200ms rise 1 fall 1
|
|
} -start
|
|
|
|
syslog S1 -wait
|
|
syslog S2 -wait
|