libvirt/tests/virshtest.c

352 lines
7.4 KiB
C
Raw Normal View History

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "xml.h"
#include "testutils.h"
#include "internal.h"
static char *progname;
#define MAX_FILE 4096
static int testFilterLine(char *buffer,
const char *toRemove) {
char *start;
char *end;
if (!(start = strstr(buffer, toRemove)))
return -1;
if (!(end = strstr(start+1, "\n"))) {
*start = '\0';
} else {
memmove(start, end, strlen(end)+1);
}
return 0;
}
static int testCompareOutput(const char *expect, const char *filter, const char *const argv[]) {
char expectData[MAX_FILE];
char actualData[MAX_FILE];
char *expectPtr = &(expectData[0]);
char *actualPtr = &(actualData[0]);
if (virtTestLoadFile(expect, &expectPtr, MAX_FILE) < 0)
return -1;
if (virtTestCaptureProgramOutput(argv, &actualPtr, MAX_FILE) < 0)
return -1;
if (filter)
if (testFilterLine(actualData, filter) < 0)
return -1;
if (getenv("DEBUG_TESTS")) {
printf("Expect %d '%s'\n", strlen(expectData), expectData);
printf("Actual %d '%s'\n", strlen(actualData), actualData);
}
if (strcmp(expectData, actualData))
return -1;
return 0;
}
#define VIRSH_DEFAULT "../src/virsh", \
"--connect", \
"test:///default"
static char *custom_uri;
#define VIRSH_CUSTOM "../src/virsh", \
"--connect", \
custom_uri
static int testCompareListDefault(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_DEFAULT,
"list",
NULL
};
return testCompareOutput("virshdata/list-default.txt",
NULL,
argv);
}
static int testCompareListCustom(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"list",
NULL
};
return testCompareOutput("virshdata/list-custom.txt",
NULL,
argv);
}
static int testCompareNodeinfoDefault(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_DEFAULT,
"nodeinfo",
NULL
};
return testCompareOutput("virshdata/nodeinfo-default.txt",
NULL,
argv);
}
static int testCompareNodeinfoCustom(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"nodeinfo",
NULL
};
return testCompareOutput("virshdata/nodeinfo-custom.txt",
NULL,
argv);
}
static int testCompareDominfoByID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"dominfo",
"1",
NULL
};
return testCompareOutput("virshdata/dominfo-fc4.txt",
"\nCPU time:",
argv);
}
static int testCompareDominfoByUUID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"dominfo",
"ef861801-45b9-11cb-88e3-afbfe5370493",
NULL
};
return testCompareOutput("virshdata/dominfo-fc4.txt",
"\nCPU time:",
argv);
}
static int testCompareDominfoByName(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"dominfo",
"fc4",
NULL
};
return testCompareOutput("virshdata/dominfo-fc4.txt",
"\nCPU time:",
argv);
}
static int testCompareDomuuidByID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domuuid",
"1",
NULL
};
return testCompareOutput("virshdata/domuuid-fc4.txt",
NULL,
argv);
}
static int testCompareDomuuidByName(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domuuid",
"fc4",
NULL
};
return testCompareOutput("virshdata/domuuid-fc4.txt",
NULL,
argv);
}
static int testCompareDomidByName(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domid",
"fc4",
NULL
};
return testCompareOutput("virshdata/domid-fc4.txt",
NULL,
argv);
}
static int testCompareDomidByUUID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domid",
"ef861801-45b9-11cb-88e3-afbfe5370493",
NULL
};
return testCompareOutput("virshdata/domid-fc4.txt",
NULL,
argv);
}
static int testCompareDomnameByID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domname",
"1",
NULL
};
return testCompareOutput("virshdata/domname-fc4.txt",
NULL,
argv);
}
static int testCompareDomnameByUUID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domname",
"ef861801-45b9-11cb-88e3-afbfe5370493",
NULL
};
return testCompareOutput("virshdata/domname-fc4.txt",
NULL,
argv);
}
static int testCompareDomstateByID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domstate",
"1",
NULL
};
return testCompareOutput("virshdata/domstate-fc4.txt",
NULL,
argv);
}
static int testCompareDomstateByUUID(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domstate",
"ef861801-45b9-11cb-88e3-afbfe5370493",
NULL
};
return testCompareOutput("virshdata/domstate-fc4.txt",
NULL,
argv);
}
static int testCompareDomstateByName(void *data ATTRIBUTE_UNUSED) {
const char *const argv[] = {
VIRSH_CUSTOM,
"domstate",
"fc4",
NULL
};
return testCompareOutput("virshdata/domstate-fc4.txt",
NULL,
argv);
}
int
main(int argc, char **argv)
{
int ret = 0;
char cwd[PATH_MAX];
char buffer[PATH_MAX];
if (!getcwd(cwd, PATH_MAX-1))
return 1;
snprintf(buffer, PATH_MAX-1, "test://%s/../docs/testnode.xml", cwd);
buffer[PATH_MAX-1] = '\0';
progname = argv[0];
custom_uri = buffer;
if (argc > 1) {
fprintf(stderr, "Usage: %s\n", progname);
exit(EXIT_FAILURE);
}
if (virtTestRun("virsh list (default)",
1, testCompareListDefault, NULL) != 0)
ret = -1;
if (virtTestRun("virsh list (custom)",
1, testCompareListCustom, NULL) != 0)
ret = -1;
if (virtTestRun("virsh nodeinfo (default)",
1, testCompareNodeinfoDefault, NULL) != 0)
ret = -1;
if (virtTestRun("virsh nodeinfo (custom)",
1, testCompareNodeinfoCustom, NULL) != 0)
ret = -1;
if (virtTestRun("virsh dominfo (by id)",
1, testCompareDominfoByID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh dominfo (by uuid)",
1, testCompareDominfoByUUID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh dominfo (by name)",
1, testCompareDominfoByName, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domid (by name)",
1, testCompareDomidByName, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domid (by uuid)",
1, testCompareDomidByUUID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domuuid (by id)",
1, testCompareDomuuidByID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domuuid (by name)",
1, testCompareDomuuidByName, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domname (by id)",
1, testCompareDomnameByID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domname (by uuid)",
1, testCompareDomnameByUUID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domstate (by id)",
1, testCompareDomstateByID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domstate (by uuid)",
1, testCompareDomstateByUUID, NULL) != 0)
ret = -1;
if (virtTestRun("virsh domstate (by name)",
1, testCompareDomstateByName, NULL) != 0)
ret = -1;
exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}