[master] af3657e Sticky fallback directors vtc

Guillaume Quintard guillaume at varnish-software.com
Wed Feb 1 11:09:05 CET 2017


commit af3657e4ff95e05975780d9371d207a5ee0e6f89
Author: Guillaume Quintard <guillaume at varnish-software.com>
Date:   Thu Jan 26 13:12:52 2017 +0100

    Sticky fallback directors vtc

diff --git a/bin/varnishtest/tests/d00027.vtc b/bin/varnishtest/tests/d00027.vtc
new file mode 100644
index 0000000..476e85f
--- /dev/null
+++ b/bin/varnishtest/tests/d00027.vtc
@@ -0,0 +1,72 @@
+varnishtest "Sticky fallback director"
+
+server s1 {
+	rxreq
+	expect req.url == "/qux"
+	txresp
+} -start
+
+server s2 {
+	rxreq
+	expect req.url == "/foo"
+	txresp
+} -start
+
+server s3 {
+	rxreq
+	expect req.url == "/bar"
+	txresp
+
+	rxreq
+	expect req.url == "/baz"
+	txresp
+} -start
+
+varnish v1 -vcl+backend {
+	import directors;
+
+	sub vcl_init {
+		new vd = directors.fallback(sticky = true);
+		vd.add_backend(s1);
+		vd.add_backend(s2);
+		vd.add_backend(s3);
+	}
+
+	sub vcl_recv {
+		set req.backend_hint = vd.backend();
+		return(pass);
+	}
+
+} -start
+
+varnish v1 -cliok "backend.set_health s1 sick"
+
+client c1 {
+	txreq -url /foo
+	rxresp
+	expect resp.status == 200
+} -run
+
+varnish v1 -cliok "backend.set_health s2 sick"
+
+client c1 {
+	txreq -url /bar
+	rxresp
+	expect resp.status == 200
+} -run
+
+varnish v1 -cliok "backend.set_health s1 healthy"
+
+client c1 {
+	txreq -url /baz
+	rxresp
+	expect resp.status == 200
+} -run
+
+varnish v1 -cliok "backend.set_health s3 sick"
+
+client c1 {
+	txreq -url /qux
+	rxresp
+	expect resp.status == 200
+} -run
diff --git a/bin/varnishtest/tests/d00028.vtc b/bin/varnishtest/tests/d00028.vtc
new file mode 100644
index 0000000..07d188c
--- /dev/null
+++ b/bin/varnishtest/tests/d00028.vtc
@@ -0,0 +1,85 @@
+varnishtest "Sticky fallback director, removing backends"
+
+server s1 {
+	rxreq
+	expect req.url == "/foo"
+	txresp
+} -start
+
+server s2 {}
+
+server s3 {
+	rxreq
+	expect req.url == "/bar"
+	txresp
+
+	rxreq
+	expect req.url == "/baz"
+	txresp
+
+	rxreq
+	expect req.url == "/qux"
+	txresp
+} -start
+
+server s4 {}
+
+varnish v1 -vcl+backend {
+	import directors;
+
+	sub vcl_init {
+		new vd = directors.fallback(sticky = true);
+		vd.add_backend(s1);
+		vd.add_backend(s2);
+		vd.add_backend(s3);
+		vd.add_backend(s4);
+	}
+
+	sub vcl_recv {
+		set req.backend_hint = vd.backend();
+		return(pass);
+	}
+
+	sub vcl_deliver {
+		if (req.url == "/bar") {
+			vd.remove_backend(s2);
+		} else if (req.url == "/baz") {
+			vd.remove_backend(s4);
+		} else if (req.url == "/qux") {
+			vd.remove_backend(s3);
+		}
+	}
+} -start
+
+varnish v1 -cliok "backend.set_health s1 sick"
+varnish v1 -cliok "backend.set_health s2 sick"
+
+client c1 {
+	txreq -url /bar
+	rxresp
+	expect resp.status == 200
+} -run
+
+varnish v1 -cliok "backend.set_health s2 healthy"
+
+client c1 {
+	txreq -url /baz
+	rxresp
+	expect resp.status == 200
+
+	txreq -url /qux
+	rxresp
+	expect resp.status == 200
+
+	txreq
+	rxresp
+	expect resp.status == 503
+} -run
+
+varnish v1 -cliok "backend.set_health s1 healthy"
+
+client c1 {
+	txreq -url /foo
+	rxresp
+	expect resp.status == 200
+} -run



More information about the varnish-commit mailing list