Commit 971b9ed1 authored by Geoff Simmons's avatar Geoff Simmons

Test some examples from the docs, and fix the examples.

parent 5f3e05e1
......@@ -129,9 +129,9 @@ lines. For example::
# substitution operation, each of which removes a
# parameter.
new rewrite = selector.set();
rewrite.add("/alpha/beta", regex="(\?.*)\bfoo=[^&]+(.*)$");
rewrite.add("/delta/gamma", regex="(\?.*)\bbar=[^&]+(.*)$");
rewrite.add("/epsilon/zeta", regex="(\?.*)\bbaz=[^&]+(.*)$");
rewrite.add("/alpha/beta", regex="(\?.*)\bfoo=[^&]+&?(.*)$");
rewrite.add("/delta/gamma", regex="(\?.*)\bbar=[^&]+&?(.*)$");
rewrite.add("/epsilon/zeta", regex="(\?.*)\bbaz=[^&]+&?(.*)$");
}
......@@ -788,7 +788,7 @@ Example::
}
if (rewrite.hasprefix(req.url)) {
set req.url = rewrite.sub(req.url, "\1/\3/\2/");
set req.url = rewrite.sub(req.url, "\1/\3/\2/", select=LAST);
}
# /foo/1/2/* is rewritten as /foo/2/1/*
......
......@@ -169,3 +169,92 @@ client c1 {
} -run
logexpect l1 -wait
# Examples from the docs
varnish v1 -vcl {
import ${vmod_selector};
import std;
backend b { .host = "${bad_ip}"; }
sub vcl_init {
new rewrite1 = selector.set();
rewrite1.add("/alpha/beta", regex="(\?.*)\bfoo=[^&]+&?(.*)$");
rewrite1.add("/delta/gamma", regex="(\?.*)\bbar=[^&]+&?(.*)$");
rewrite1.add("/epsilon/zeta", regex="(\?.*)\bbaz=[^&]+&?(.*)$");
new rewrite2 = selector.set();
rewrite2.add("/foo/", regex="^(/foo)/([^/]+)/([^/]+)/");
rewrite2.add("/foo/bar/", regex="^(/foo/bar)/([^/]+)/([^/]+)/");
rewrite2.add("/foo/bar/baz/",
regex="^(/foo/bar/baz)/([^/]+)/([^/]+)/");
}
sub vcl_recv {
return (synth(200));
}
sub vcl_synth {
if (rewrite1.hasprefix(req.url)) {
set resp.http.Rewrite = rewrite1.sub(req.url, "\1\2");
}
if (rewrite2.hasprefix(req.url)) {
set resp.http.Rewrite
= rewrite2.sub(req.url, "\1/\3/\2/" ,select=LAST);
}
return (deliver);
}
}
client c1 {
txreq -url "/alpha/beta/foo?x=y&foo=4711&baz=quux"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/alpha/beta/foo?x=y&baz=quux"
txreq -url "/delta/gamma/foo?x=y&bar=4711&baz=quux"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/delta/gamma/foo?x=y&baz=quux"
txreq -url "/epsilon/zeta/foo?x=y&baz=4711&quux=quux"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/epsilon/zeta/foo?x=y&quux=quux"
txreq -url "/alpha/beta/foo?foo=4711&x=y&baz=quux"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/alpha/beta/foo?x=y&baz=quux"
# Doesn't remove a trailing ampersand, don't worry about it.
txreq -url "/alpha/beta/foo?x=y&baz=quux&foo=4711"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/alpha/beta/foo?x=y&baz=quux&"
# URL is unchanged if the regex doesn't match.
txreq -url "/alpha/beta/foo?x=y&baz=quux"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/alpha/beta/foo?x=y&baz=quux"
txreq -url "/alpha/beta/foo"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/alpha/beta/foo"
txreq -url "/foo/1/2/3/4"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/foo/2/1/3/4"
txreq -url "/foo/bar/1/2/3/4"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/foo/bar/2/1/3/4"
txreq -url "/foo/bar/baz/1/2/3/4"
rxresp
expect resp.status == 200
expect resp.http.Rewrite == "/foo/bar/baz/2/1/3/4"
} -run
......@@ -99,9 +99,9 @@ lines. For example::
# substitution operation, each of which removes a
# parameter.
new rewrite = selector.set();
rewrite.add("/alpha/beta", regex="(\?.*)\bfoo=[^&]+(.*)$");
rewrite.add("/delta/gamma", regex="(\?.*)\bbar=[^&]+(.*)$");
rewrite.add("/epsilon/zeta", regex="(\?.*)\bbaz=[^&]+(.*)$");
rewrite.add("/alpha/beta", regex="(\?.*)\bfoo=[^&]+&?(.*)$");
rewrite.add("/delta/gamma", regex="(\?.*)\bbar=[^&]+&?(.*)$");
rewrite.add("/epsilon/zeta", regex="(\?.*)\bbaz=[^&]+&?(.*)$");
}
......@@ -664,7 +664,7 @@ Example::
}
if (rewrite.hasprefix(req.url)) {
set req.url = rewrite.sub(req.url, "\1/\3/\2/");
set req.url = rewrite.sub(req.url, "\1/\3/\2/", select=LAST);
}
# /foo/1/2/* is rewritten as /foo/2/1/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment