The testsuite is absolutely essential to feeling comfortable
about swapping the backing chain structure over to a new format.
This patch tests the path settings, and demonstrates that the
correct short name is being passed to the child.
* tests/virstoragetest.c (testStorageChain): Test path.
(mymain): Update expected data.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
tests/virstoragetest.c | 69 ++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 56 insertions(+), 13 deletions(-)
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 093053a..9c2f815 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -218,6 +218,8 @@ struct _testFileData
bool expIsFile;
unsigned long long expCapacity;
bool expEncrypted;
+ const char *pathRel;
+ const char *pathAbs;
};
enum {
@@ -286,6 +288,7 @@ testStorageChain(const void *args)
char *expect = NULL;
char *actual = NULL;
const char *expBackingDirectory;
+ const char *expPath;
if (i == data->nfiles) {
fprintf(stderr, "probed chain was too long\n");
@@ -294,22 +297,28 @@ testStorageChain(const void *args)
expBackingDirectory = abs ? data->files[i]->expBackingDirAbs
: data->files[i]->expBackingDirRel;
+ expPath = abs ? data->files[i]->pathAbs
+ : data->files[i]->pathRel;
if (virAsprintf(&expect,
- "store:%s\nraw:%s\ndirectory:%s\nother:%d %d %lld %d",
+ "store:%s\nraw:%s\ndirectory:%s\nother:%d %d %lld
%d\n"
+ "path:%s\n",
NULLSTR(data->files[i]->expBackingStore),
NULLSTR(data->files[i]->expBackingStoreRaw),
NULLSTR(expBackingDirectory),
data->files[i]->expBackingFormat,
data->files[i]->expIsFile,
data->files[i]->expCapacity,
- data->files[i]->expEncrypted) < 0 ||
+ data->files[i]->expEncrypted,
+ NULLSTR(expPath)) < 0 ||
virAsprintf(&actual,
- "store:%s\nraw:%s\ndirectory:%s\nother:%d %d %lld %d",
+ "store:%s\nraw:%s\ndirectory:%s\nother:%d %d %lld
%d\n"
+ "path:%s\n",
NULLSTR(elt->backingStore),
NULLSTR(elt->backingStoreRaw),
NULLSTR(elt->directory),
elt->backingStoreFormat, elt->backingStoreIsFile,
- elt->capacity, !!elt->encryption) < 0) {
+ elt->capacity, !!elt->encryption,
+ NULLSTR(elt->path)) < 0) {
VIR_FREE(expect);
VIR_FREE(actual);
goto cleanup;
@@ -389,6 +398,8 @@ mymain(void)
/* Raw image, whether with right format or no specified format */
testFileData raw = {
.expBackingFormat = VIR_STORAGE_FILE_NONE,
+ .pathRel = "raw",
+ .pathAbs = canonraw,
};
TEST_CHAIN(1, "raw", absraw, VIR_STORAGE_FILE_RAW,
(&raw), EXP_PASS,
@@ -402,6 +413,7 @@ mymain(void)
(&raw), ALLOW_PROBE | EXP_PASS);
/* Qcow2 file with relative raw backing, format provided */
+ raw.pathAbs = "raw";
testFileData qcow2 = {
.expBackingStore = canonraw,
.expBackingStoreRaw = "raw",
@@ -410,6 +422,13 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_RAW,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "qcow2",
+ .pathAbs = canonqcow2,
+ };
+ testFileData qcow2_as_raw = {
+ .expBackingFormat = VIR_STORAGE_FILE_NONE,
+ .pathRel = "qcow2",
+ .pathAbs = canonqcow2,
};
TEST_CHAIN(3, "qcow2", absqcow2, VIR_STORAGE_FILE_QCOW2,
(&qcow2, &raw), EXP_PASS,
@@ -417,9 +436,9 @@ mymain(void)
(&qcow2, &raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS);
TEST_CHAIN(4, "qcow2", absqcow2, VIR_STORAGE_FILE_AUTO,
- (&raw), EXP_PASS,
+ (&qcow2_as_raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS,
- (&raw), EXP_PASS,
+ (&qcow2_as_raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS);
/* Rewrite qcow2 file to use absolute backing name */
@@ -430,6 +449,8 @@ mymain(void)
ret = -1;
qcow2.expBackingStoreRaw = absraw;
qcow2.expBackingDirRel = datadir;
+ raw.pathRel = absraw;
+ raw.pathAbs = absraw;
/* Qcow2 file with raw as absolute backing, backing format provided */
TEST_CHAIN(5, "qcow2", absqcow2, VIR_STORAGE_FILE_QCOW2,
@@ -438,9 +459,9 @@ mymain(void)
(&qcow2, &raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS);
TEST_CHAIN(6, "qcow2", absqcow2, VIR_STORAGE_FILE_AUTO,
- (&raw), EXP_PASS,
+ (&qcow2_as_raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS,
- (&raw), EXP_PASS,
+ (&qcow2_as_raw), EXP_PASS,
(&qcow2, &raw), ALLOW_PROBE | EXP_PASS);
/* Wrapped file access */
@@ -452,7 +473,10 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_QCOW2,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "wrap",
+ .pathAbs = abswrap,
};
+ qcow2.pathRel = absqcow2;
TEST_CHAIN(7, "wrap", abswrap, VIR_STORAGE_FILE_QCOW2,
(&wrap, &qcow2, &raw), EXP_PASS,
(&wrap, &qcow2, &raw), ALLOW_PROBE | EXP_PASS,
@@ -473,6 +497,7 @@ mymain(void)
ret = -1;
wrap.expBackingFormat = VIR_STORAGE_FILE_AUTO;
qcow2.expBackingFormat = VIR_STORAGE_FILE_AUTO;
+ qcow2_as_raw.pathRel = absqcow2;
/* Qcow2 file with raw as absolute backing, backing format omitted */
testFileData wrap_as_raw = {
@@ -483,11 +508,13 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_RAW,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "wrap",
+ .pathAbs = abswrap,
};
TEST_CHAIN(8, "wrap", abswrap, VIR_STORAGE_FILE_QCOW2,
- (&wrap_as_raw, &raw), EXP_PASS,
+ (&wrap_as_raw, &qcow2_as_raw), EXP_PASS,
(&wrap, &qcow2, &raw), ALLOW_PROBE | EXP_PASS,
- (&wrap_as_raw, &raw), EXP_PASS,
+ (&wrap_as_raw, &qcow2_as_raw), EXP_PASS,
(&wrap, &qcow2, &raw), ALLOW_PROBE | EXP_PASS);
/* Rewrite qcow2 to a missing backing file, with backing type */
@@ -501,6 +528,7 @@ mymain(void)
qcow2.expBackingStoreRaw = datadir "/bogus";
qcow2.expBackingFormat = VIR_STORAGE_FILE_NONE;
qcow2.expIsFile = false;
+ qcow2.pathRel = "qcow2";
/* Qcow2 file with missing backing file but specified type */
TEST_CHAIN(9, "qcow2", absqcow2, VIR_STORAGE_FILE_QCOW2,
@@ -552,16 +580,24 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_RAW,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "qed",
+ .pathAbs = absqed,
+ };
+ testFileData qed_as_raw = {
+ .expBackingFormat = VIR_STORAGE_FILE_NONE,
+ .pathRel = "qed",
+ .pathAbs = absqed,
};
TEST_CHAIN(12, "qed", absqed, VIR_STORAGE_FILE_AUTO,
- (&raw), EXP_PASS,
+ (&qed_as_raw), EXP_PASS,
(&qed, &raw), ALLOW_PROBE | EXP_PASS,
- (&raw), EXP_PASS,
+ (&qed_as_raw), EXP_PASS,
(&qed, &raw), ALLOW_PROBE | EXP_PASS);
/* directory */
testFileData dir = {
- .expIsFile = false,
+ .pathRel = "dir",
+ .pathAbs = absdir,
};
TEST_CHAIN(13, "dir", absdir, VIR_STORAGE_FILE_AUTO,
(&dir), EXP_PASS,
@@ -599,6 +635,8 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_RAW,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "../sub/link1",
+ .pathAbs = "../sub/link1",
};
testFileData link2 = {
.expBackingStore = canonqcow2,
@@ -608,7 +646,11 @@ mymain(void)
.expBackingFormat = VIR_STORAGE_FILE_QCOW2,
.expIsFile = true,
.expCapacity = 1024,
+ .pathRel = "sub/link2",
+ .pathAbs = abslink2,
};
+ raw.pathRel = "../raw";
+ raw.pathAbs = "../raw";
TEST_CHAIN(15, "sub/link2", abslink2, VIR_STORAGE_FILE_QCOW2,
(&link2, &link1, &raw), EXP_PASS,
(&link2, &link1, &raw), ALLOW_PROBE | EXP_PASS,
@@ -650,6 +692,7 @@ mymain(void)
ret = -1;
qcow2.expBackingStoreRaw = "wrap";
qcow2.expBackingDirRel = datadir;
+ qcow2.pathRel = absqcow2;
wrap.expBackingFormat = VIR_STORAGE_FILE_QCOW2;
/* Behavior of an infinite loop chain */
--
1.9.0