2024-01-17 17:00:21 +00:00
|
|
|
# This test verifies that H2 anomalies counted as glitches are properly detected
|
|
|
|
# and fetched.
|
|
|
|
|
|
|
|
varnishtest "h2 glitches"
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
|
|
|
|
# haproxy frontend
|
2024-11-19 06:11:02 +00:00
|
|
|
haproxy hap -arg '-dW' -conf {
|
2024-01-17 17:00:21 +00:00
|
|
|
defaults
|
2024-11-19 06:43:04 +00:00
|
|
|
timeout client 30s
|
|
|
|
timeout server 30s
|
|
|
|
timeout connect 30s
|
2024-01-17 17:00:21 +00:00
|
|
|
mode http
|
|
|
|
|
|
|
|
listen fe1
|
|
|
|
bind "fd@${fe1}" proto h2
|
2024-01-19 16:33:27 +00:00
|
|
|
tcp-request session track-sc0 src
|
|
|
|
http-request return status 200 hdr x-glitches %[fc_glitches] hdr x-glitch-cnt %[sc0_glitch_cnt] hdr x-glitch-rate %[sc0_glitch_rate]
|
|
|
|
stick-table type ip size 10 store glitch_cnt,glitch_rate(1m)
|
2024-01-17 17:00:21 +00:00
|
|
|
} -start
|
|
|
|
|
|
|
|
# valid request: no glitch
|
|
|
|
client c1 -connect ${hap_fe1_sock} {
|
|
|
|
txpri
|
|
|
|
stream 0 {
|
|
|
|
txsettings
|
|
|
|
rxsettings
|
|
|
|
txsettings -ack
|
|
|
|
rxsettings
|
|
|
|
expect settings.ack == true
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 1 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http" \
|
|
|
|
-url "/"
|
|
|
|
rxresp
|
|
|
|
expect resp.status == 200
|
|
|
|
expect resp.http.x-glitches == 0
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 3 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http" \
|
|
|
|
-url "/"
|
|
|
|
rxresp
|
|
|
|
expect resp.status == 200
|
|
|
|
expect resp.http.x-glitches == 0
|
|
|
|
} -run
|
|
|
|
} -run
|
|
|
|
|
|
|
|
# invalid path: => req decoding error => glitch++
|
|
|
|
client c2-path -connect ${hap_fe1_sock} {
|
|
|
|
txpri
|
|
|
|
stream 0 {
|
|
|
|
txsettings
|
|
|
|
rxsettings
|
|
|
|
txsettings -ack
|
|
|
|
rxsettings
|
|
|
|
expect settings.ack == true
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 1 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http" \
|
|
|
|
-url "hello-world"
|
|
|
|
rxrst
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 3 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http" \
|
|
|
|
-url "/"
|
|
|
|
rxresp
|
|
|
|
expect resp.status == 200
|
|
|
|
expect resp.http.x-glitches == 1
|
2024-01-19 16:33:27 +00:00
|
|
|
expect resp.http.x-glitch-cnt == 1
|
|
|
|
expect resp.http.x-glitch-rate == 1
|
2024-01-17 17:00:21 +00:00
|
|
|
} -run
|
|
|
|
} -run
|
|
|
|
|
|
|
|
# invalid scheme: blocked at HTX layer, not counted
|
|
|
|
client c3-scheme -connect ${hap_fe1_sock} {
|
|
|
|
txpri
|
|
|
|
stream 0 {
|
|
|
|
txsettings
|
|
|
|
rxsettings
|
|
|
|
txsettings -ack
|
|
|
|
rxsettings
|
|
|
|
expect settings.ack == true
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 1 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http://localhost/?" \
|
|
|
|
-url "/"
|
|
|
|
rxresp
|
|
|
|
expect resp.status == 400
|
|
|
|
} -run
|
|
|
|
|
|
|
|
stream 3 {
|
|
|
|
txreq \
|
|
|
|
-method "GET" \
|
|
|
|
-scheme "http" \
|
|
|
|
-url "/"
|
|
|
|
rxresp
|
|
|
|
expect resp.status == 200
|
|
|
|
expect resp.http.x-glitches == 0
|
2024-01-19 16:33:27 +00:00
|
|
|
expect resp.http.x-glitch-cnt == 1
|
|
|
|
expect resp.http.x-glitch-rate == 1
|
2024-01-17 17:00:21 +00:00
|
|
|
} -run
|
|
|
|
} -run
|