Commit fabdb68e authored by Geoff Simmons's avatar Geoff Simmons

Add the element enum to .integer().

parent b0c3bd67
......@@ -783,13 +783,14 @@ Example::
.. _xset.integer():
INT xset.integer(INT n, ENUM select)
------------------------------------
INT xset.integer(INT n, STRING element, ENUM select)
----------------------------------------------------
::
INT xset.integer(
INT n=0,
STRING element=0,
ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST} select=UNIQUE
)
......
......@@ -38,6 +38,17 @@ varnish v1 -vcl {
set resp.http.Integer-Longest
= s.integer(select=LONGEST);
}
set resp.http.Foo = s.integer(element="foo");
set resp.http.Bar = s.integer(element="bar");
set resp.http.Baz = s.integer(element="baz");
set resp.http.Quux = s.integer(element="quux");
set resp.http.Foobar = s.integer(element="foobar");
if (req.http.Element) {
set resp.http.Element
= s.integer(element=req.http.Element);
}
return (deliver);
}
} -start
......@@ -52,6 +63,12 @@ client c1 {
expect resp.http.N-4 == -1
expect resp.http.N-5 == -2
expect resp.http.Foo == 0
expect resp.http.Bar == 1
expect resp.http.Baz == 2
expect resp.http.Quux == -1
expect resp.http.Foobar == -2
txreq -hdr "Word: foo"
rxresp
expect resp.status == 200
......@@ -108,12 +125,24 @@ client c1 {
expect resp.http.Integer-Longest == -2
} -run
client c1 {
txreq -hdr "Element: oof"
expect_close
} -run
logexpect l1 -v v1 -d 1 -g vxid -q "Notice" {
expect 0 * Begin req
expect * = Notice {^vmod_selector: s\.match\(\): subject string is NULL$}
expect * = End
} -run
logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" {
expect 0 * Begin req
expect * = VCL_Error {^vmod selector failure: s\.integer\(element="oof"\): no such element$}
expect * = VCL_return fail
expect * = End
} -run
varnish v1 -vcl {
import ${vmod_selector};
import std;
......@@ -211,6 +240,18 @@ varnish v1 -vcl {
set resp.http.Integer-Longest
= s.integer(select=LONGEST);
}
if (req.http.Element) {
set resp.http.Element
= s.integer(element=req.http.Element);
set resp.http.Element-Unique = s.integer(select=UNIQUE);
set resp.http.Element-Exact = s.integer(select=EXACT);
set resp.http.Element-First = s.integer(select=FIRST);
set resp.http.Element-Last = s.integer(select=LAST);
set resp.http.Element-Shortest
= s.integer(select=SHORTEST);
set resp.http.Element-Longest
= s.integer(select=LONGEST);
}
return (deliver);
}
}
......@@ -226,6 +267,17 @@ client c1 {
expect resp.http.Integer-Last == 4
expect resp.http.Integer-Shortest == 4
expect resp.http.Integer-Longest == 4
txreq -hdr "Element: foo"
rxresp
expect resp.status == 200
expect resp.http.Element == 4
expect resp.http.Element-Unique == 4
expect resp.http.Element-Exact == 4
expect resp.http.Element-First == 4
expect resp.http.Element-Last == 4
expect resp.http.Element-Shortest == 4
expect resp.http.Element-Longest == 4
} -run
varnish v1 -vcl {
......
......@@ -795,14 +795,14 @@ vmod_set_string(VRT_CTX, struct vmod_selector_set * set, VCL_INT n,
VCL_INT
vmod_set_integer(VRT_CTX, struct vmod_selector_set * set, VCL_INT n,
VCL_ENUM selects)
VCL_STRING element, VCL_ENUM selects)
{
unsigned idx;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(set, VMOD_SELECTOR_SET_MAGIC);
idx = get_idx(ctx, n, set, "integer", NULL, selects);
idx = get_idx(ctx, n, set, "integer", element, selects);
if (idx == UINT_MAX)
return (0);
if (!check_added(ctx, set, idx, INTEGER, "integer", "integer"))
......
......@@ -698,7 +698,7 @@ Example::
set req.url = myset.string();
}
$Method INT .integer(INT n=0,
$Method INT .integer(INT n=0, STRING element=0,
ENUM {UNIQUE, EXACT, FIRST, LAST, SHORTEST, LONGEST}
select=UNIQUE)
......
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