[master] 3514c2de0 vbr: Add more coverage for error cases

Walid Boudebouda walid.boudebouda at gmail.com
Mon Sep 1 08:46:05 UTC 2025


commit 3514c2de0ca6ca7d620904f5717c4f07faf17b27
Author: Walid Boudebouda <walid.boudebouda at gmail.com>
Date:   Mon Jul 7 19:51:46 2025 +0200

    vbr: Add more coverage for error cases

diff --git a/bin/varnishtest/tests/b00094.vtc b/bin/varnishtest/tests/b00094.vtc
index 92a17bcff..65c54c53d 100644
--- a/bin/varnishtest/tests/b00094.vtc
+++ b/bin/varnishtest/tests/b00094.vtc
@@ -1,5 +1,8 @@
 varnishtest "Test vcl_backend_refresh"
 
+barrier b1 sock 2
+barrier b2 sock 2
+
 server s1 {
 	rxreq
 	txresp -hdr "Etag: abcd" -hdr "from-be: true" -body "abcdefghij"
@@ -15,6 +18,7 @@ server s1 {
 	rxreq
 	expect req.http.if-none-match == "abcd"
 	txresp -status 304 -hdr "be304-3: true"
+
 } -start
 
 varnish v1 -vcl+backend {
@@ -89,3 +93,128 @@ client c4 {
 	expect resp.bodylen == 10
 	expect resp.body == "abcdefghij"
 } -run
+
+###################################################################
+
+server s1 {
+	rxreq
+	expect req.http.if-none-match == "abcd"
+	txresp -status 304 -hdr "be304-4: true"
+} -start
+
+varnish v1 -vcl+backend {
+
+	import vtc;
+
+	sub vcl_recv {
+		if (req.method == "PURGE") {
+			return (purge);
+		}
+	}
+
+	sub vcl_backend_response {
+		set beresp.ttl = 0.01s;
+		set beresp.grace = 0s;
+		set beresp.keep = 10m;
+		set beresp.http.was-304 = beresp.was_304;
+	}
+
+	sub vcl_backend_refresh {
+		vtc.barrier_sync("${b1_sock}");
+		vtc.barrier_sync("${b2_sock}");
+		set beresp.http.valid = obj_stale.is_valid;
+	}
+
+}
+
+# let the object die
+delay 0.01
+
+# Object gets purged while we are revalidating it
+client c5 {
+	txreq
+	rxresp
+	expect resp.status == 503
+	expect resp.reason == "Invalid object for refresh"
+} -start
+
+barrier b1 sync
+
+client c6 {
+	txreq -method "PURGE"
+	rxresp
+	expect resp.status == 200
+} -run
+
+barrier b2 sync
+
+server s1 -wait
+client c5 -wait
+
+###################################################################
+
+server s1 {
+	rxreq
+	txresp
+	rxreq
+	txresp -status 304
+} -start
+
+varnish v1 -vcl+backend {
+	sub vcl_backend_response {
+		set beresp.ttl = 0.01s;
+		set beresp.grace = 0s;
+		set beresp.keep = 10m;
+		set beresp.http.was-304 = beresp.was_304;
+	}
+
+}
+
+# Unprompted 304
+client c7 {
+	txreq -url /1
+	rxresp
+	expect resp.status == 200
+
+	delay 0.01
+	txreq -url /1
+	rxresp
+	expect resp.status == 503
+	expect resp.reason == "Unexpected 304"
+} -run
+
+###################################################################
+
+server s1 {
+	rxreq
+	txresp -status 404
+	rxreq
+	txresp -status 304
+} -start
+
+varnish v1 -vcl+backend {
+
+	sub vcl_backend_response {
+		set beresp.ttl = 0.01s;
+		set beresp.grace = 0s;
+		set beresp.keep = 10m;
+		set beresp.http.was-304 = beresp.was_304;
+	}
+
+	sub vcl_backend_fetch {
+		set bereq.http.if-none-match = "abcd";
+	}
+
+}
+
+# Receiving 304 for non-200 objects
+client c8 {
+	txreq -url /2
+	rxresp
+	expect resp.status == 404
+	delay 0.01
+	txreq -url /2
+	rxresp
+	expect resp.status == 503
+	expect resp.reason == "Invalid object for refresh"
+} -run


More information about the varnish-commit mailing list