[Varnish] #1062: Cannot test response header emptiness in varnishtest
Varnish
varnish-bugs at varnish-cache.org
Fri Nov 18 17:29:09 CET 2011
#1062: Cannot test response header emptiness in varnishtest
-------------------------------------------------+--------------------------
Reporter: ofavre | Type: defect
Status: new | Priority: normal
Milestone: | Component: varnishtest
Version: 3.0.2 | Severity: normal
Keywords: expect varnishtest vtc header empty |
-------------------------------------------------+--------------------------
Consider the following test:
{{{
varnishtest "Varnishtest bug: bad substitution with quoted values with
resp.http.*"
server s1 {
rxreq
txresp
} -start
varnish v1 -vcl+backend {
sub vcl_deliver {
# Test with, and without the following line
set resp.http.X-Test = "a";
}
} -start
client c1 {
txreq
rxresp
expect resp.http.X-Test == "a"
expect resp.http.X-Test != "resp.http.X-Test"
} -run
}}}
The expect command does a replacement (using cmd_var_resolve()) in the LHS
and RHS site, the enclosing double-quotes are ignored.
Therefore it is impossible to test for a header emptiness:
If the header exists (and is equal to "a"), the two tests are equivalent
to:
{{{
assert(strcmp("a", "a") == 0);
assert(strcmp("a", "a") != 0); // instead of assert(strcmp("a",
"resp.http.X-Test") != 0);
}}}
If the header doesn't exist, the two tests are equivalent to:
{{{
assert(strcmp("resp.http.X-Test", "a") == 0);
assert(strcmp("resp.http.X-Test", "resp.http.X-Test") != 0); // instead of
assert(strcmp(NULL, "resp.http.X-Test") != 0);
}}}
=== Here are a few possible fixes: ===
- Changing the language in order to make it respect double quoted strings,
and maybe honor macro replacements like ${var} ;
- Permit running the test would be to '''implement the "~" test''' (a
third case in varnishtest/vtc_http.c:cmd_http_expect()) using a regex ;
- In varnishtest/vtc_http.c:cmd_var_resolve(): if spec matches
req/resp.http. and http_find_header() doesn't find the header and returns
NULL, return NULL or "".
--
Ticket URL: <https://www.varnish-cache.org/trac/ticket/1062>
Varnish <https://varnish-cache.org/>
The Varnish HTTP Accelerator
More information about the varnish-bugs
mailing list