From: phk Date: Sat, 24 Jan 2009 12:56:27 +0000 (+0000) Subject: Test that we know the purge variable when it is compiled in. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7340514642c0482fbc066248229457d485fc5bfc;p=varnish Test that we know the purge variable when it is compiled in. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3543 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishtest/tests/c00022.vtc b/varnish-cache/bin/varnishtest/tests/c00022.vtc index d8f0b8a7..d893e953 100644 --- a/varnish-cache/bin/varnishtest/tests/c00022.vtc +++ b/varnish-cache/bin/varnishtest/tests/c00022.vtc @@ -33,6 +33,26 @@ varnish v1 -vcl+backend { } } -start +# Trigger syntax check +varnish v1 -badvcl { + backend foo { + .host = "127.0.0.1"; + } + sub vcl_recv { + purge (req.foo == req.url); + } +} + +# Trigger syntax check +varnish v1 -badvcl { + backend foo { + .host = "127.0.0.1"; + } + sub vcl_recv { + purge (req.http. == req.url); + } +} + # Fetch into cache client c1 { txreq -url "/foo" diff --git a/varnish-cache/lib/libvcl/vcc_action.c b/varnish-cache/lib/libvcl/vcc_action.c index d6dd0c9e..aa546093 100644 --- a/varnish-cache/lib/libvcl/vcc_action.c +++ b/varnish-cache/lib/libvcl/vcc_action.c @@ -32,6 +32,7 @@ #include "config.h" #include +#include #include "vsb.h" @@ -347,13 +348,23 @@ parse_unset(struct tokenlist *tl) /*--------------------------------------------------------------------*/ +static const struct purge_var { + const char *name; + unsigned flag; +} purge_var[] = { +#define PVAR(a, b, c) { a, b }, +#include "purge_vars.h" +#undef PVAR + { 0, 0 } +}; + static void parse_purge(struct tokenlist *tl) { + const struct purge_var *pv; vcc_NextToken(tl); - Expect(tl, '('); vcc_NextToken(tl); @@ -362,6 +373,25 @@ parse_purge(struct tokenlist *tl) tl->indent += INDENT; while (1) { ExpectErr(tl, VAR); + + /* Check valididity of purge variable */ + for (pv = purge_var; pv->name != NULL; pv++) { + if (!strncmp(pv->name, tl->t->b, + strlen(pv->name))) + break; + } + if (pv->name == NULL) { + vsb_printf(tl->sb, "Unknown purge variable."); + vcc_ErrWhere(tl, tl->t); + return; + } + if (pv->flag && + tl->t->b + strlen(pv->name) >= tl->t->e) { + vsb_printf(tl->sb, "Missing header name."); + vcc_ErrWhere(tl, tl->t); + return; + } + Fb(tl, 1, " \"%.*s\",\n", PF(tl->t)); vcc_NextToken(tl); switch(tl->t->tok) {