Commit 2ccfa815 authored by Geoff Simmons's avatar Geoff Simmons

add compile failure tests for the extract() function

parent be49a56f
......@@ -1005,3 +1005,148 @@ client c1 {
} -run
logexpect l3 -wait
# extract() function
varnish v1 -vcl {
import re2 from "${vmod_topbuild}/src/.libs/libvmod_re2.so";
backend b { .host = "${bad_ip}"; }
sub vcl_recv {
return(synth(200));
}
sub vcl_synth {
set resp.http.r1 = re2.extract("(", "foo", "bar", "fallback1");
set resp.http.r2
= re2.extract("a\1", "foo", "bar", "fallback2");
set resp.http.r3
= re2.extract("a[x", "foo", "bar", "fallback3");
set resp.http.r4
= re2.extract("a[z-a]", "foo", "bar", "fallback4");
set resp.http.r5 = re2.extract("a[[:foobar:]]", "foo", "bar",
"fallback5");
set resp.http.r6
= re2.extract("a(b", "foo", "bar", "fallback6");
set resp.http.r7
= re2.extract("a\", "foo", "bar", "fallback7"); #"
set resp.http.r8
= re2.extract("[a-b-c]", "abc", "z", "fallback8");
set resp.http.r9
= re2.extract("[a-b-c]", "abc", "z", "fallback9",
posix_syntax=true);
set resp.http.r10 = re2.extract("\Qabc\E", "abc", "z",
"fallback10");
set resp.http.r11 = re2.extract("\Qabc\E", "abc", "z",
"fallback11",
posix_syntax=true);
set resp.http.r12
= re2.extract("(?:a)", "abc", "z", "fallback12");
set resp.http.r13
= re2.extract("(?:a)", "abc", "z", "fallback13",
posix_syntax=true);
set resp.http.r14 = re2.extract("(?P<name>a)", "abc", "z",
"fallback14");
set resp.http.r15 = re2.extract("(?P<name>a)", "abc", "z",
"fallback15",
posix_syntax=true);
set resp.http.r16
= re2.extract("(a++)", "abc", "z", "fallback16",
posix_syntax=true);
set resp.http.r17
= re2.extract("(a++)", "abc", "z", "fallback17");
set resp.http.r18
= re2.extract("(a**)", "abc", "z", "fallback18",
posix_syntax=true);
set resp.http.r19
= re2.extract("(a**)", "abc", "z", "fallback19");
set resp.http.r20
= re2.extract("(a?*)", "abc", "z", "fallback20",
posix_syntax=true);
set resp.http.r21
= re2.extract("(a?*)", "abc", "z", "fallback21");
set resp.http.r22
= re2.extract("(a+*)", "abc", "z", "fallback22",
posix_syntax=true);
set resp.http.r23
= re2.extract("(a+*)", "abc", "z", "fallback23");
set resp.http.r24
= re2.extract("(a{1}*)", "abc", "z", "fallback24",
posix_syntax=true);
set resp.http.r25 = re2.extract("(a{1}*)", "abc", "z",
"fallback25");
set resp.http.r26
= re2.extract("\d \s \w \D \S \W", "0 a a a !",
"z", "fallback26", posix_syntax=true);
set resp.http.r27
= re2.extract("\d \s \w \D \S \W", "0 a a a !",
"z", "fallback27", posix_syntax=true,
perl_classes=true);
set resp.http.r28
= re2.extract("\ba \B", "a ", "z", "fallback28",
posix_syntax=true);
set resp.http.r29
= re2.extract("\ba \B", "a ", "z", "fallback29",
posix_syntax=true, word_boundary=true);
}
}
logexpect l4 -v v1 -d 0 -g vxid -q "VCL_Error" {
expect 0 * Begin req
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..., text=.foo., rewrite=.bar., fallback=.fallback1..: Cannot compile '.': missing .: .$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a.1., text=.foo., rewrite=.bar., fallback=.fallback2..: Cannot compile 'a.1': invalid escape sequence: .1$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a.x., text=.foo., rewrite=.bar., fallback=.fallback3..: Cannot compile 'a.x': missing .: .x$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a.z-a.., text=.foo., rewrite=.bar., fallback=.fallback4..: Cannot compile 'a.z-a.': invalid character class range: z-a$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a..:foobar:..., text=.foo., rewrite=.bar., fallback=.fallback5..: Cannot compile 'a..:foobar:..': invalid character class range: .:foobar:.$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a.b., text=.foo., rewrite=.bar., fallback=.fallback6..: Cannot compile 'a.b': missing .: a.b$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=.a.., text=.foo., rewrite=.bar., fallback=.fallback7..: Cannot compile 'a.': trailing .$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a-b-c.., text=.abc., rewrite=.z., fallback=.fallback9..: Cannot compile '.a-b-c.': invalid character class range: -c$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..Qabc.E., text=.abc., rewrite=.z., fallback=.fallback11..: Cannot compile '.Qabc.E': invalid escape sequence: .Q$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=...:a.., text=.abc., rewrite=.z., fallback=.fallback13..: Cannot compile '..:a.': no argument for repetition operator: .$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=...P<name>a.., text=.abc., rewrite=.z., fallback=.fallback15..: Cannot compile '..P<name>a.': no argument for repetition operator: .$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a...., text=.abc., rewrite=.z., fallback=.fallback17..: Cannot compile '.a...': bad repetition operator: ..$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a...., text=.abc., rewrite=.z., fallback=.fallback19..: Cannot compile '.a...': bad repetition operator: ..$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a...., text=.abc., rewrite=.z., fallback=.fallback21..: Cannot compile '.a...': bad repetition operator: ..$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a...., text=.abc., rewrite=.z., fallback=.fallback23..: Cannot compile '.a...': bad repetition operator: ..$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..a.1...., text=.abc., rewrite=.z., fallback=.fallback25..: Cannot compile '.a.1...': bad repetition operator: .1..$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..d .s .w .D .S .W., text=.0 a a a !., rewrite=.z., fallback=.fallback26..: Cannot compile '.d .s .w .D .S .W': invalid escape sequence: .d$"
expect * = VCL_Error "^vmod re2 error: re2.extract.pattern=..ba .B., text=.a ., rewrite=.z., fallback=.fallback28..: Cannot compile '.ba .B': invalid escape sequence: .b$"
expect * = End
} -start
client c1 {
txreq
rxresp
expect resp.status == 200
expect resp.http.r1 == "fallback1"
expect resp.http.r2 == "fallback2"
expect resp.http.r3 == "fallback3"
expect resp.http.r4 == "fallback4"
expect resp.http.r5 == "fallback5"
expect resp.http.r6 == "fallback6"
expect resp.http.r7 == "fallback7"
expect resp.http.r8 == "z"
expect resp.http.r9 == "fallback9"
expect resp.http.r10 == "z"
expect resp.http.r11 == "fallback11"
expect resp.http.r12 == "z"
expect resp.http.r13 == "fallback13"
expect resp.http.r14 == "z"
expect resp.http.r15 == "fallback15"
expect resp.http.r16 == "z"
expect resp.http.r17 == "fallback17"
expect resp.http.r18 == "z"
expect resp.http.r19 == "fallback19"
expect resp.http.r20 == "z"
expect resp.http.r21 == "fallback21"
expect resp.http.r22 == "z"
expect resp.http.r23 == "fallback23"
expect resp.http.r24 == "z"
expect resp.http.r25 == "fallback25"
expect resp.http.r26 == "fallback26"
expect resp.http.r27 == "z"
expect resp.http.r28 == "fallback28"
expect resp.http.r29 == "z"
} -run
logexpect l4 -wait
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