From e5d03a2c1a335ec1523610b38feda8eb848a1ed4 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 25 Jul 2017 18:40:50 +0200 Subject: [PATCH] tests: utils: Add virTestLoadFileJSON helper This new helper loads, parses and returns a JSON file from 'abs_srcdir' By using variable arguments for the function, it's not necessary to format the path separately in the test cases. Reviewed-by: Eric Blake --- tests/testutils.c | 34 ++++++++++++++++++++++++++++++++++ tests/testutils.h | 4 ++++ 2 files changed, 38 insertions(+) diff --git a/tests/testutils.c b/tests/testutils.c index 53ef351ef7..5e71f348be 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -407,6 +407,40 @@ virTestLoadFilePath(const char *p, ...) } +/** + * virTestLoadFileJSON: + * @...: name components terminated with a NULL + * + * Constructs the test file path from variable arguments and loads and parses + * the JSON file. 'abs_srcdir' is automatically prepended to the path. + */ +virJSONValuePtr +virTestLoadFileJSON(const char *p, ...) +{ + virJSONValuePtr ret = NULL; + char *jsonstr = NULL; + char *path = NULL; + va_list ap; + + va_start(ap, p); + + if (!(path = virTestLoadFileGetPath(p, ap))) + goto cleanup; + + if (virTestLoadFile(path, &jsonstr) < 0) + goto cleanup; + + if (!(ret = virJSONValueFromString(jsonstr))) + VIR_TEST_VERBOSE("failed to parse json from file '%s'", path); + + cleanup: + va_end(ap); + VIR_FREE(jsonstr); + VIR_FREE(path); + return ret; +} + + #ifndef WIN32 static void virTestCaptureProgramExecChild(const char *const argv[], diff --git a/tests/testutils.h b/tests/testutils.h index 98dfa990e6..49649c4f5a 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -27,6 +27,7 @@ # include "viralloc.h" # include "virfile.h" # include "virstring.h" +# include "virjson.h" # include "capabilities.h" # include "domain_conf.h" @@ -54,6 +55,9 @@ int virTestRun(const char *title, int virTestLoadFile(const char *file, char **buf); char *virTestLoadFilePath(const char *p, ...) ATTRIBUTE_SENTINEL; +virJSONValuePtr virTestLoadFileJSON(const char *p, ...) + ATTRIBUTE_SENTINEL; + int virTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen); void virTestClearCommandPath(char *cmdset);