tests: utils: Add virTestLoadFilePath helper

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.

Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Peter Krempa 2017-07-25 15:11:31 +02:00
parent 3c60388591
commit d492b19259
2 changed files with 53 additions and 0 deletions

View File

@ -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 terminated with a NULL
*
* 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[],

View File

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