Add inputpool to storagevolxml2argvtest

This allows testing the command line for cloning file-based
volumes into logical volumes and vice versa.
This commit is contained in:
Ján Tomko 2013-07-22 15:55:40 +02:00
parent 3a75fca289
commit 601d465254
3 changed files with 74 additions and 20 deletions

View File

@ -0,0 +1,2 @@
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/OtherDemo.img \
/dev/HostVG/Swap

View File

@ -0,0 +1,2 @@
qemu-img convert -f raw -O qcow2 -o encryption=on /dev/HostVG/Swap \
/var/lib/libvirt/images/OtherDemo.img

View File

@ -11,10 +11,32 @@
const char create_tool[] = "qemu-img"; const char create_tool[] = "qemu-img";
/* createVol sets this on volume creation */
static void
testSetVolumeType(virStorageVolDefPtr vol,
virStoragePoolDefPtr pool)
{
if (!vol)
return;
switch (pool->type) {
case VIR_STORAGE_POOL_DIR:
case VIR_STORAGE_POOL_FS:
case VIR_STORAGE_POOL_NETFS:
vol->type = VIR_STORAGE_VOL_FILE;
return;
case VIR_STORAGE_POOL_LOGICAL:
vol->type = VIR_STORAGE_VOL_BLOCK;
return;
}
}
static int static int
testCompareXMLToArgvFiles(bool shouldFail, testCompareXMLToArgvFiles(bool shouldFail,
const char *poolxml, const char *poolxml,
const char *volxml, const char *volxml,
const char *inputpoolxml,
const char *inputvolxml, const char *inputvolxml,
const char *cmdline, const char *cmdline,
unsigned int flags, unsigned int flags,
@ -22,6 +44,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
{ {
char *volXmlData = NULL; char *volXmlData = NULL;
char *poolXmlData = NULL; char *poolXmlData = NULL;
char *inputpoolXmlData = NULL;
char *inputvolXmlData = NULL; char *inputvolXmlData = NULL;
char *expectedCmdline = NULL; char *expectedCmdline = NULL;
char *actualCmdline = NULL; char *actualCmdline = NULL;
@ -34,6 +57,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
virStorageVolDefPtr vol = NULL, inputvol = NULL; virStorageVolDefPtr vol = NULL, inputvol = NULL;
virStoragePoolDefPtr pool = NULL; virStoragePoolDefPtr pool = NULL;
virStoragePoolDefPtr inputpool = NULL;
virStoragePoolObj poolobj = {.def = NULL }; virStoragePoolObj poolobj = {.def = NULL };
@ -53,13 +77,23 @@ testCompareXMLToArgvFiles(bool shouldFail,
poolobj.def = pool; poolobj.def = pool;
if (inputpoolxml) {
if (virtTestLoadFile(inputpoolxml, &inputpoolXmlData) < 0)
goto cleanup;
if (!(inputpool = virStoragePoolDefParseString(inputpoolXmlData)))
goto cleanup;
}
if (!(vol = virStorageVolDefParseString(pool, volXmlData))) if (!(vol = virStorageVolDefParseString(pool, volXmlData)))
goto cleanup; goto cleanup;
if (inputvolxml && if (inputvolxml &&
!(inputvol = virStorageVolDefParseString(pool, inputvolXmlData))) !(inputvol = virStorageVolDefParseString(inputpool, inputvolXmlData)))
goto cleanup; goto cleanup;
testSetVolumeType(vol, pool);
testSetVolumeType(inputvol, inputpool);
cmd = virStorageBackendCreateQemuImgCmd(conn, &poolobj, vol, inputvol, cmd = virStorageBackendCreateQemuImgCmd(conn, &poolobj, vol, inputvol,
flags, create_tool, imgformat); flags, create_tool, imgformat);
if (!cmd) { if (!cmd) {
@ -88,11 +122,13 @@ testCompareXMLToArgvFiles(bool shouldFail,
cleanup: cleanup:
virStoragePoolDefFree(pool); virStoragePoolDefFree(pool);
virStoragePoolDefFree(inputpool);
virStorageVolDefFree(vol); virStorageVolDefFree(vol);
virStorageVolDefFree(inputvol); virStorageVolDefFree(inputvol);
virCommandFree(cmd); virCommandFree(cmd);
VIR_FREE(actualCmdline); VIR_FREE(actualCmdline);
VIR_FREE(expectedCmdline); VIR_FREE(expectedCmdline);
VIR_FREE(inputpoolXmlData);
VIR_FREE(poolXmlData); VIR_FREE(poolXmlData);
VIR_FREE(volXmlData); VIR_FREE(volXmlData);
VIR_FREE(inputvolXmlData); VIR_FREE(inputvolXmlData);
@ -104,6 +140,7 @@ struct testInfo {
bool shouldFail; bool shouldFail;
const char *pool; const char *pool;
const char *vol; const char *vol;
const char *inputpool;
const char *inputvol; const char *inputvol;
const char *cmdline; const char *cmdline;
unsigned int flags; unsigned int flags;
@ -116,6 +153,7 @@ testCompareXMLToArgvHelper(const void *data)
int result = -1; int result = -1;
const struct testInfo *info = data; const struct testInfo *info = data;
char *poolxml = NULL; char *poolxml = NULL;
char *inputpoolxml = NULL;
char *volxml = NULL; char *volxml = NULL;
char *inputvolxml = NULL; char *inputvolxml = NULL;
char *cmdline = NULL; char *cmdline = NULL;
@ -124,6 +162,10 @@ testCompareXMLToArgvHelper(const void *data)
virAsprintf(&inputvolxml, "%s/storagevolxml2xmlin/%s.xml", virAsprintf(&inputvolxml, "%s/storagevolxml2xmlin/%s.xml",
abs_srcdir, info->inputvol) < 0) abs_srcdir, info->inputvol) < 0)
goto cleanup; goto cleanup;
if (info->inputpool &&
virAsprintf(&inputpoolxml, "%s/storagepoolxml2xmlin/%s.xml",
abs_srcdir, info->inputpool) < 0)
goto cleanup;
if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml", if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml",
abs_srcdir, info->pool) < 0 || abs_srcdir, info->pool) < 0 ||
virAsprintf(&volxml, "%s/storagevolxml2xmlin/%s.xml", virAsprintf(&volxml, "%s/storagevolxml2xmlin/%s.xml",
@ -135,13 +177,15 @@ testCompareXMLToArgvHelper(const void *data)
goto cleanup; goto cleanup;
result = testCompareXMLToArgvFiles(info->shouldFail, poolxml, volxml, result = testCompareXMLToArgvFiles(info->shouldFail, poolxml, volxml,
inputvolxml, cmdline, info->flags, inputpoolxml, inputvolxml,
cmdline, info->flags,
info->imgformat); info->imgformat);
cleanup: cleanup:
VIR_FREE(poolxml); VIR_FREE(poolxml);
VIR_FREE(volxml); VIR_FREE(volxml);
VIR_FREE(inputvolxml); VIR_FREE(inputvolxml);
VIR_FREE(inputpoolxml);
VIR_FREE(cmdline); VIR_FREE(cmdline);
return result; return result;
@ -161,11 +205,11 @@ mymain(void)
int ret = 0; int ret = 0;
unsigned int flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA; unsigned int flags = VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
#define DO_TEST_FULL(shouldFail, pool, vol, inputvol, cmdline, flags, \ #define DO_TEST_FULL(shouldFail, pool, vol, inputpool, inputvol, cmdline, \
imgformat) \ flags, imgformat) \
do { \ do { \
struct testInfo info = { shouldFail, pool, vol, inputvol, cmdline, \ struct testInfo info = { shouldFail, pool, vol, inputpool, inputvol, \
flags, imgformat }; \ cmdline, flags, imgformat }; \
if (virtTestRun("Storage Vol XML-2-argv " cmdline, \ if (virtTestRun("Storage Vol XML-2-argv " cmdline, \
1, testCompareXMLToArgvHelper, &info) < 0) \ 1, testCompareXMLToArgvHelper, &info) < 0) \
ret = -1; \ ret = -1; \
@ -179,47 +223,53 @@ mymain(void)
DO_TEST_FULL(true, pool, __VA_ARGS__) DO_TEST_FULL(true, pool, __VA_ARGS__)
DO_TEST("pool-dir", "vol-qcow2", DO_TEST("pool-dir", "vol-qcow2",
NULL, NULL, NULL,
"qcow2", 0, FMT_OPTIONS); "qcow2", 0, FMT_OPTIONS);
DO_TEST_FAIL("pool-dir", "vol-qcow2", DO_TEST_FAIL("pool-dir", "vol-qcow2",
NULL, NULL, NULL,
"qcow2-prealloc", flags, FMT_OPTIONS); "qcow2-prealloc", flags, FMT_OPTIONS);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
NULL, NULL, NULL,
"qcow2-nobacking-prealloc", flags, FMT_OPTIONS); "qcow2-nobacking-prealloc", flags, FMT_OPTIONS);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
"vol-file", "pool-dir", "vol-file",
"qcow2-nobacking-convert-prealloc", flags, FMT_OPTIONS); "qcow2-nobacking-convert-prealloc", flags, FMT_OPTIONS);
DO_TEST_FAIL("pool-dir", "vol-qcow2", DO_TEST_FAIL("pool-dir", "vol-qcow2",
"vol-file", "pool-dir", "vol-file",
"qcow2-convert-prealloc", flags, FMT_OPTIONS); "qcow2-convert-prealloc", flags, FMT_OPTIONS);
DO_TEST("pool-dir", "vol-qcow2", DO_TEST("pool-dir", "vol-qcow2",
NULL, NULL, NULL,
"qcow2-flag", 0, FMT_FLAG); "qcow2-flag", 0, FMT_FLAG);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
NULL, NULL, NULL,
"qcow2-nobacking-flag", 0, FMT_FLAG); "qcow2-nobacking-flag", 0, FMT_FLAG);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
"vol-file", "pool-dir", "vol-file",
"qcow2-nobacking-convert-flag", 0, FMT_FLAG); "qcow2-nobacking-convert-flag", 0, FMT_FLAG);
DO_TEST("pool-dir", "vol-qcow2", DO_TEST("pool-dir", "vol-qcow2",
NULL, NULL, NULL,
"qcow2-none", 0, FMT_NONE); "qcow2-none", 0, FMT_NONE);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
NULL, NULL, NULL,
"qcow2-nobacking-none", 0, FMT_NONE); "qcow2-nobacking-none", 0, FMT_NONE);
DO_TEST("pool-dir", "vol-qcow2-nobacking", DO_TEST("pool-dir", "vol-qcow2-nobacking",
"vol-file", "pool-dir", "vol-file",
"qcow2-nobacking-convert-none", 0, FMT_NONE); "qcow2-nobacking-convert-none", 0, FMT_NONE);
DO_TEST("pool-dir", "vol-qcow2-lazy", DO_TEST("pool-dir", "vol-qcow2-lazy",
NULL, NULL, NULL,
"qcow2-lazy", 0, FMT_OPTIONS); "qcow2-lazy", 0, FMT_OPTIONS);
DO_TEST("pool-dir", "vol-qcow2-1.1", DO_TEST("pool-dir", "vol-qcow2-1.1",
NULL, NULL, NULL,
"qcow2-1.1", 0, FMT_OPTIONS); "qcow2-1.1", 0, FMT_OPTIONS);
DO_TEST_FAIL("pool-dir", "vol-qcow2-0.10-lazy", DO_TEST_FAIL("pool-dir", "vol-qcow2-0.10-lazy",
NULL, NULL, NULL,
"qcow2-0.10-lazy", 0, FMT_OPTIONS); "qcow2-0.10-lazy", 0, FMT_OPTIONS);
DO_TEST("pool-dir", "vol-qcow2-nobacking",
"pool-logical", "vol-logical",
"qcow2-from-logical", 0, FMT_OPTIONS);
DO_TEST("pool-logical", "vol-logical",
"pool-dir", "vol-qcow2-nobacking",
"logical-from-qcow2", 0, FMT_OPTIONS);
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE; return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
} }