This new helper loads and returns a 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 | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
tests/testutils.h | 2 ++
2 files changed, 53 insertions(+)
diff --git a/tests/testutils.c b/tests/testutils.c
index 7f1c4672b..f193cdf8b 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -356,6 +356,57 @@ virTestLoadFile(const char *file, char **buf)
return 0;
}
+
+static char *
+virTestLoadFileGetPath(const char *p,
+ va_list ap)
+{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+ char *path = NULL;
+
+ virBufferAddLit(&buf, abs_srcdir "/");
+
+ if (p) {
+ virBufferAdd(&buf, p, -1);
+ virBufferStrcatVArgs(&buf, ap);
+ }
+
+ if (!(path = virBufferContentAndReset(&buf)))
+ VIR_TEST_VERBOSE("failed to format file path");
+
+ return path;
+}
+
+
+/**
+ * virTestLoadFilePath:
+ * @...: file name components.
+ *
+ * Constructs the test file path from variable arguments and loads the file.
+ * 'abs_srcdir' is automatically prepended.
+ */
+char *
+virTestLoadFilePath(const char *p, ...)
+{
+ char *path = NULL;
+ char *ret = NULL;
+ va_list ap;
+
+ va_start(ap, p);
+
+ if (!(path = virTestLoadFileGetPath(p, ap)))
+ goto cleanup;
+
+ ignore_value(virTestLoadFile(path, &ret));
+
+ cleanup:
+ va_end(ap);
+ 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 c7f02e468..98dfa990e 100644
--- a/tests/testutils.h
+++ b/tests/testutils.h
@@ -52,6 +52,8 @@ int virTestRun(const char *title,
int (*body)(const void *data),
const void *data);
int virTestLoadFile(const char *file, char **buf);
+char *virTestLoadFilePath(const char *p, ...)
+ ATTRIBUTE_SENTINEL;
int virTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen);
void virTestClearCommandPath(char *cmdset);
--
2.13.2