[4.1] 09ce321 Add a setenv command to varnishtest
PÃ¥l Hermunn Johansen
hermunn at varnish-software.com
Thu Apr 6 13:36:05 CEST 2017
commit 09ce321d10e797bcb1908791f53b90dbfe46adce
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date: Mon Feb 13 17:18:56 2017 +0100
Add a setenv command to varnishtest
This lets you set environment variables in a test case.
Usage is
setenv "FOO" "bar"
which will set FOO=bar if FOO does not already exist.
There is also an optional '-force' argument, which will overwrite the
current variable if already set:
setenv -force "FOO" "baz"
The force argument corresponds to passing a non-zero third argument to
setenv(3).
diff --git a/bin/varnishtest/tests/m10027.vtc b/bin/varnishtest/tests/m10027.vtc
new file mode 100644
index 0000000..7c6adaa
--- /dev/null
+++ b/bin/varnishtest/tests/m10027.vtc
@@ -0,0 +1,73 @@
+varnishtest "Test setenv"
+
+setenv FOO "BAR BAZ"
+
+varnish v1 -vcl {
+ import ${vmod_std};
+
+ backend dummy { .host = "${bad_ip}"; .port = "9080"; }
+
+ sub vcl_recv {
+ return(synth(200));
+ }
+
+ sub vcl_synth {
+ set resp.http.X-FOO = std.getenv("FOO");
+ }
+} -start
+
+client c1 {
+ txreq
+ rxresp
+ expect resp.http.X-FOO == "BAR BAZ"
+} -run
+
+varnish v1 -stop
+
+setenv FOO QUUX
+
+varnish v2 -vcl {
+ import ${vmod_std};
+
+ backend dummy { .host = "${bad_ip}"; .port = "9080"; }
+
+ sub vcl_recv {
+ return(synth(200));
+ }
+
+ sub vcl_synth {
+ set resp.http.X-FOO = std.getenv("FOO");
+ }
+} -start
+
+client c2 -connect ${v2_sock} {
+ txreq
+ rxresp
+ expect resp.http.X-FOO == "BAR BAZ"
+} -run
+
+varnish v2 -stop
+
+setenv -force FOO QUUX
+
+varnish v3 -vcl {
+ import ${vmod_std};
+
+ backend dummy { .host = "${bad_ip}"; .port = "9080"; }
+
+ sub vcl_recv {
+ return(synth(200));
+ }
+
+ sub vcl_synth {
+ set resp.http.X-FOO = std.getenv("FOO");
+ }
+} -start
+
+client c3 -connect ${v3_sock} {
+ txreq
+ rxresp
+ expect resp.http.X-FOO == "QUUX"
+} -run
+
+varnish v2 -stop
diff --git a/bin/varnishtest/vtc.c b/bin/varnishtest/vtc.c
index 5532e33..4d75686 100644
--- a/bin/varnishtest/vtc.c
+++ b/bin/varnishtest/vtc.c
@@ -497,6 +497,38 @@ cmd_err_shell(CMD_ARGS)
}
/**********************************************************************
+ * Set environment variables
+ */
+
+static void
+cmd_setenv(CMD_ARGS)
+{
+ int r;
+ int force;
+
+ (void)priv;
+ (void)cmd;
+
+ if (av == NULL)
+ return;
+ AN(av[1]);
+ AN(av[2]);
+
+ force = 0;
+ if (strcmp("-force", av[1]) == 0) {
+ force = 1;
+ av++;
+ AN(av[2]);
+ }
+ if (av[3] != NULL)
+ vtc_log(vl, 0, "CMD setenv: Unexpected argument '%s'", av[3]);
+ r = setenv(av[1], av[2], force);
+ if (r != 0)
+ vtc_log(vl, 0, "CMD setenv %s=\"%s\" failed: %s",
+ av[1], av[2], strerror(errno));
+}
+
+/**********************************************************************
* Dump command arguments
*/
@@ -659,6 +691,7 @@ static const struct cmds cmds[] = {
{ "feature", cmd_feature },
{ "logexpect", cmd_logexp },
{ "process", cmd_process },
+ { "setenv", cmd_setenv },
{ NULL, NULL }
};
More information about the varnish-commit
mailing list