[master] 3b60931 Change shell_err to err_shell and make it work like varnish::err_cli with string expected to be present in stdout.
Poul-Henning Kamp
phk at FreeBSD.org
Thu Mar 12 15:27:09 CET 2015
commit 3b60931f49e10a7ea03988edbbe1b8be309a7226
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Mar 12 14:25:52 2015 +0000
Change shell_err to err_shell and make it work like varnish::err_cli
with string expected to be present in stdout.
If stderr is to be checked add: "2>&1" to cmd string
diff --git a/bin/varnishtest/tests/b00045.vtc b/bin/varnishtest/tests/b00045.vtc
index 3518617..e1e524d 100644
--- a/bin/varnishtest/tests/b00045.vtc
+++ b/bin/varnishtest/tests/b00045.vtc
@@ -14,4 +14,5 @@ client c1 {
delay .2
-shell_err 0x200 "${varnishd} -P ${tmpdir}/v1/varnishd.pid -b 127.0.0.1:80 -a :0 -n ${tmpdir} > /dev/null 2>&1"
+err_shell {Could not open pid/lock} \
+ "${varnishd} -P ${tmpdir}/v1/varnishd.pid -b 127.0.0.1:80 -a :0 -n ${tmpdir} 2>&1"
diff --git a/bin/varnishtest/vtc.c b/bin/varnishtest/vtc.c
index 4cf7941..6f20ebe 100644
--- a/bin/varnishtest/vtc.c
+++ b/bin/varnishtest/vtc.c
@@ -420,29 +420,47 @@ cmd_shell(CMD_ARGS)
r = system(av[1]);
AZ(WEXITSTATUS(r));
}
+
/**********************************************************************
* Shell command execution
*/
static void
-cmd_shell_err(CMD_ARGS)
+cmd_err_shell(CMD_ARGS)
{
(void)priv;
(void)cmd;
- int r;
+ struct vsb *vsb;
+ FILE *fp;
+ int r, c;
if (av == NULL)
return;
AN(av[1]);
AN(av[2]);
AZ(av[3]);
- vtc_dump(vl, 4, "shell_err", av[2], -1);
- r = system(av[2]);
- vtc_log(vl, 4, "shell status: 0x%x", r);
- if (strtol(av[1], NULL, 0) != r)
- vtc_log(vl, 0, "Wrong shell status: 0x%x", r);
+ vsb = VSB_new_auto();
+ AN(vsb);
+ vtc_dump(vl, 4, "cmd", av[2], -1);
+ fp = popen(av[2], "r");
+ if (fp == NULL)
+ vtc_log(vl, 0, "popen fails: %s", strerror(errno));
+ do {
+ c = getc(fp);
+ if (c != EOF)
+ VSB_putc(vsb, c);
+ } while (c != EOF);
+ r = pclose(fp);
+ vtc_log(vl, 4, "Status = %d", r);
+ AZ(VSB_finish(vsb));
+ vtc_dump(vl, 4, "stdout", VSB_data(vsb), VSB_len(vsb));
+ if (strstr(VSB_data(vsb), av[1]) == NULL)
+ vtc_log(vl, 0,
+ "Did not find expected string: (\"%s\")", av[1]);
else
- vtc_log(vl, 4, "Expected shell status: 0x%x", r);
+ vtc_log(vl, 4,
+ "Found expected string: (\"%s\")", av[1]);
+ VSB_delete(vsb);
}
/**********************************************************************
@@ -569,7 +587,7 @@ static const struct cmds cmds[] = {
{ "delay", cmd_delay },
{ "varnishtest",cmd_varnishtest },
{ "shell", cmd_shell },
- { "shell_err", cmd_shell_err },
+ { "err_shell", cmd_err_shell },
{ "sema", cmd_sema },
{ "random", cmd_random },
{ "feature", cmd_feature },
More information about the varnish-commit
mailing list