[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