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 <eblake@redhat.com>
This commit is contained in:
Peter Krempa 2017-07-25 18:40:50 +02:00
parent b650caedf1
commit e5d03a2c1a
2 changed files with 38 additions and 0 deletions

View File

@ -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[],

View File

@ -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);