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.
---
tests/testutils.c | 34 ++++++++++++++++++++++++++++++++++
tests/testutils.h | 4 ++++
2 files changed, 38 insertions(+)
diff --git a/tests/testutils.c b/tests/testutils.c
index f193cdf8b..75f69e1c3 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -407,6 +407,40 @@ virTestLoadFilePath(const char *p, ...)
}
+/**
+ * virTestLoadFileJSON:
+ * @...: name components
+ *
+ * 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 98dfa990e..49649c4f5 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);
--
2.13.2