From cf17015fde9894aa9cd326afb61f05a726b782fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Sun, 9 Feb 2020 02:00:06 +0100 Subject: [PATCH] virshtest: use virCommand instead of custom impl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Our virCommand helper API already has the ability to capture program output, there's no need to open-code it. Apart from simplifying the code, the test is marginally faster due to recent improvements in virCommandMassClose. Until now, both stderr and stdout were stored in the same buffer. This change stores stderr separately and expects it to be empty for all the tests we currently run. Signed-off-by: Ján Tomko Reviewed-by: Daniel P. Berrangé --- tests/virshtest.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/virshtest.c b/tests/virshtest.c index 83675710ea..add33215b7 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -5,6 +5,7 @@ #include "internal.h" #include "virxml.h" #include "testutils.h" +#include "vircommand.h" #include "virstring.h" #define VIR_FROM_THIS VIR_FROM_NONE @@ -61,10 +62,26 @@ testCompareOutputLit(const char *expectData, const char *filter, const char *const argv[]) { g_autofree char *actualData = NULL; + const char *empty = ""; + g_autoptr(virCommand) cmd = NULL; + g_autofree char *errbuf = NULL; - if (virTestCaptureProgramOutput(argv, &actualData, 4096) < 0) + if (!(cmd = virCommandNewArgs(argv))) return -1; + virCommandAddEnvString(cmd, "LANG=C"); + virCommandSetInputBuffer(cmd, empty); + virCommandSetOutputBuffer(cmd, &actualData); + virCommandSetErrorBuffer(cmd, &errbuf); + + if (virCommandRun(cmd, NULL) < 0) + return -1; + + if (STRNEQ(errbuf, "")) { + fprintf(stderr, "Command reported error: %s", errbuf); + return -1; + } + if (filter && testFilterLine(actualData, filter) < 0) return -1;