[master] cbf54610e vcl: Add coverage for bereq.retry_connect
Walid Boudebouda
walid.boudebouda at gmail.com
Mon Nov 24 14:26:04 UTC 2025
commit cbf54610ea11590c881a12de2cdaecf19ed0d06c
Author: Walid Boudebouda <walid.boudebouda at gmail.com>
Date: Fri Nov 21 13:09:34 2025 +0100
vcl: Add coverage for bereq.retry_connect
diff --git a/bin/varnishtest/tests/b00097.vtc b/bin/varnishtest/tests/b00097.vtc
new file mode 100644
index 000000000..a18ae7b4f
--- /dev/null
+++ b/bin/varnishtest/tests/b00097.vtc
@@ -0,0 +1,127 @@
+varnishtest "Test bereq.retry_connect aka extrachance"
+
+server s0 {
+ rxreq
+ txresp -hdr "Connection: keep-alive" -body "hello"
+
+ rxreq
+ close
+ accept
+ rxreq
+ txresp -hdr "Connection: keep-alive" -body "hello"
+} -start
+
+varnish v1 -vcl+backend {
+ sub vcl_recv {
+ return (pass);
+ }
+} -start
+
+client c1 {
+ # First backend connection
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+ # Reuse with extrachance
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+} -run
+
+server s0 -start
+
+client c2 {
+ # First backend connection
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+ # We should not retry when reqbody is not cached
+ txreq -req "POST" -bodylen 5
+ rxresp
+ expect resp.status == 503
+} -run
+
+server s0 -break
+server s0 -start
+
+varnish v1 -vcl+backend {
+ sub vcl_recv {
+ return (pass);
+ }
+
+ sub vcl_backend_fetch {
+ set bereq.retry_connect = false;
+ }
+}
+
+client c3 {
+ # First backend connection
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+ # No retry when retry_connect = false
+ txreq
+ rxresp
+ expect resp.status == 503
+} -run
+
+
+server s0 -break
+server s0 -start
+
+varnish v1 -vcl+backend {
+ sub vcl_recv {
+ return (pass);
+ }
+
+ sub vcl_backend_fetch {
+ set bereq.retry_connect = true;
+ }
+}
+
+client c4 {
+ # First backend connection
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+ # retry_connect does not force a retry when reqbody is not cached
+ txreq -req "POST" -bodylen 5
+ rxresp
+ expect resp.status == 503
+} -run
+
+server s0 -break
+server s0 -start
+
+varnish v1 -vcl+backend {
+ sub vcl_recv {
+ return (pass);
+ }
+
+ sub vcl_backend_fetch {
+ set bereq.retry_connect = false;
+ }
+
+ sub vcl_backend_error {
+ if (bereq.retries < 1) {
+ return (retry);
+ }
+ }
+}
+
+client c5 {
+ # First backend connection
+ txreq
+ rxresp
+ expect resp.status == 200
+ expect resp.body == "hello"
+ # Disabling retry_connect from vcl does not prevent vcl retry
+ txreq
+ rxresp
+ expect resp.status == 200
+} -run
More information about the varnish-commit
mailing list