Mailing List Archive

[6.0] cb5a07473 integrate @rezan 's regression tests into m17.vtc
commit cb5a074730ad4d7ae65a7df31b601588650ab7f8
Author: Nils Goroll <nils.goroll@uplex.de>
Date: Mon Oct 7 18:25:01 2019 +0200

integrate @rezan 's regression tests into m17.vtc

I had previously overlooked that there exists a more complete regression
test by him in #3010

Integrate that vtc, polished and modified to account for the backend 503
for no restart after rollback, into m17, making r3009 obsolete again

diff --git a/bin/varnishtest/tests/m00017.vtc b/bin/varnishtest/tests/m00017.vtc
index 8fa38f37a..c31322d50 100644
--- a/bin/varnishtest/tests/m00017.vtc
+++ b/bin/varnishtest/tests/m00017.vtc
@@ -1,5 +1,9 @@
varnishtest "Test std.rollback"

+# bug regressions:
+# - #3009
+# - #3083
+
server s1 {
rxreq
expect req.url == "/foo"
@@ -67,3 +71,253 @@ client c1 {
txreq -url "/baz" -hdr "foobar: baz"
rxresp
} -run
+
+server s1 -wait
+
+varnish v1 -cliok "param.set workspace_client 12000"
+varnish v1 -cliok "param.set workspace_backend 12000"
+
+# Dont panic
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_recv {
+ set req.http.test = "1";
+ }
+
+ sub vcl_backend_fetch {
+ unset bereq.http.test;
+ }
+
+ sub vcl_backend_response {
+ std.rollback(bereq);
+ set beresp.http.test = bereq.http.test;
+ vtc.workspace_alloc(backend, -10);
+ }
+}
+
+server s1 {
+ rxreq
+ expect req.url == "/1"
+ txresp
+} -start
+
+client c1 {
+ txreq -url /1
+ rxresp
+ expect resp.status == 503
+ expect resp.http.test == <undef>
+} -run
+
+server s1 -wait
+
+# Dont run out of workspace
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_backend_fetch {
+ vtc.workspace_alloc(backend, 1000);
+ }
+
+ sub vcl_backend_response {
+ if (bereq.retries == 0) {
+ vtc.workspace_alloc(backend, -10);
+ std.rollback(bereq);
+ return (retry);
+ }
+ }
+}
+
+server s1 -repeat 2 {
+ rxreq
+ expect req.url == "/2"
+ txresp
+} -start
+
+client c2 {
+ txreq -url /2
+ rxresp
+ expect resp.status == 200
+} -run
+
+server s1 -wait
+
+# Keep workspace intact (and possibly overflow)
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_backend_fetch {
+ set bereq.http.fetch = "Fetch value " + bereq.retries;
+ }
+
+ sub vcl_backend_response {
+ if (bereq.retries == 0) {
+ std.rollback(bereq);
+ set bereq.http.response = "123";
+ set bereq.http.response2 = "Another response";
+ if (bereq.url == "/4") {
+ vtc.workspace_alloc(backend, -10);
+ } else if (bereq.url == "/5") {
+ vtc.workspace_alloc(backend, -10);
+ std.rollback(bereq);
+ }
+ return (retry);
+ }
+ set beresp.http.fetch = bereq.http.fetch;
+ set beresp.http.response = bereq.http.response;
+ set beresp.http.response2 = bereq.http.response2;
+ }
+}
+
+server s1 -repeat 5 {
+ rxreq
+ txresp
+} -start
+
+client c3 {
+ txreq -url /3
+ rxresp
+ expect resp.status == 200
+ expect resp.http.fetch == "Fetch value 1"
+ expect resp.http.response == "123"
+ expect resp.http.response2 == "Another response"
+
+ txreq -url /4
+ rxresp
+ expect resp.status == 503
+
+ txreq -url /5
+ rxresp
+ expect resp.status == 200
+ expect resp.http.fetch == "Fetch value 1"
+ expect resp.http.response == ""
+ expect resp.http.response2 == ""
+} -run
+
+server s1 -wait
+
+# CLIENT
+
+# Dont panic
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_recv {
+ unset req.http.test;
+ }
+
+ sub vcl_deliver {
+ std.rollback(req);
+ set resp.http.test = req.http.test;
+ vtc.workspace_alloc(client, -200);
+ }
+}
+
+# XXX server keeps params, so we need to reset previous -repeat 5
+server s1 -repeat 1 {
+ rxreq
+ expect req.url == "/6"
+ txresp
+} -start
+
+client c4 {
+ txreq -url /6 -hdr "test: 1"
+ rxresp
+ expect resp.status == 200
+ expect resp.http.test == "1"
+} -run
+
+server s1 -wait
+
+# Dont run out of workspace
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_recv {
+ vtc.workspace_alloc(client, 1000);
+ }
+
+ sub vcl_deliver {
+ if (req.restarts == 0) {
+ vtc.workspace_alloc(client, -10);
+ std.rollback(req);
+ return (restart);
+ }
+ }
+}
+
+server s1 {
+ rxreq
+ expect req.url == "/7"
+ txresp
+} -start
+
+client c5 {
+ txreq -url /7
+ rxresp
+ expect resp.status == 200
+} -run
+
+server s1 -wait
+
+# Keep workspace intact (and possibly overflow)
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_recv {
+ set req.http.fetch = "Fetch value " + req.restarts;
+ }
+
+ sub vcl_deliver {
+ if (req.restarts == 0) {
+ std.rollback(req);
+ set req.http.response = "123";
+ set req.http.response2 = "Another response";
+ if (req.url == "/9") {
+ vtc.workspace_alloc(client, -200);
+ } else if (req.url == "/10") {
+ vtc.workspace_alloc(client, -10);
+ std.rollback(req);
+ }
+ return (restart);
+ }
+ set resp.http.fetch = req.http.fetch;
+ set resp.http.response = req.http.response;
+ set resp.http.response2 = req.http.response2;
+ }
+}
+
+server s1 -repeat 3 {
+ rxreq
+ txresp
+} -start
+
+client c6 {
+ txreq -url /8
+ rxresp
+ expect resp.status == 200
+ expect resp.http.fetch == "Fetch value 1"
+ expect resp.http.response == "123"
+ expect resp.http.response2 == "Another response"
+
+ txreq -url /9
+ rxresp
+ expect resp.status == 200
+ expect resp.http.fetch == "Fetch value 1"
+ expect resp.http.response == "123"
+ expect resp.http.response2 == "Another response"
+
+ txreq -url /10
+ rxresp
+ expect resp.status == 200
+ expect resp.http.fetch == "Fetch value 1"
+ expect resp.http.response == ""
+} -run
+
+server s1 -wait
diff --git a/bin/varnishtest/tests/r03009.vtc b/bin/varnishtest/tests/r03009.vtc
deleted file mode 100644
index 1bc44521f..000000000
--- a/bin/varnishtest/tests/r03009.vtc
+++ /dev/null
@@ -1,32 +0,0 @@
-varnishtest "Rollback without restart/retry is unsafe"
-
-server s1 {
- rxreq
- txresp
-} -start
-
-varnish v1 -vcl+backend {
- import std;
-
- sub vcl_recv {
- set req.http.test = "1";
- }
-
- sub vcl_backend_fetch {
- unset bereq.http.test;
- }
-
- sub vcl_backend_response {
- std.rollback(bereq);
- set beresp.http.test = bereq.http.test;
- set beresp.http.workspace = "start overwriting active workspace";
- set beresp.http.workspace = "0123456789012345678901234567890123456789";
- # panic...
- }
-} -start
-
-client c1 {
- txreq
- rxresp
- expect resp.status == 503
-} -run
_______________________________________________
varnish-commit mailing list
varnish-commit@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit