summaryrefslogtreecommitdiff
path: root/src/VBox/Storage/testcase/tstVDSnap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Storage/testcase/tstVDSnap.cpp')
-rw-r--r--src/VBox/Storage/testcase/tstVDSnap.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/VBox/Storage/testcase/tstVDSnap.cpp b/src/VBox/Storage/testcase/tstVDSnap.cpp
index 83313e1f..d32d3b55 100644
--- a/src/VBox/Storage/testcase/tstVDSnap.cpp
+++ b/src/VBox/Storage/testcase/tstVDSnap.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -229,6 +229,21 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
unsigned cDiffs = 0;
unsigned idDiff = 0; /* Diff ID counter for the filename */
+ /* Delete all images from a previous run. */
+ RTFileDelete(pTest->pcszBaseImage);
+ for (unsigned i = 0; i < pTest->cIterations; i++)
+ {
+ char *pszDiffFilename = NULL;
+
+ rc = RTStrAPrintf(&pszDiffFilename, "tstVDSnapDiff%u.%s", i, pTest->pcszDiffSuff);
+ if (RT_SUCCESS(rc))
+ {
+ if (RTFileExists(pszDiffFilename))
+ RTFileDelete(pszDiffFilename);
+ RTStrFree(pszDiffFilename);
+ }
+ }
+
/* Create the virtual disk test data */
pbTestPattern = (uint8_t *)RTMemAlloc(pTest->cbTestPattern);
@@ -260,10 +275,22 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
if (pbTestPattern) \
RTMemFree(pbTestPattern); \
VDDestroy(pVD); \
+ g_cErrors++; \
return rc; \
} \
} while (0)
+#define CHECK_BREAK(str) \
+ do \
+ { \
+ RTPrintf("%s rc=%Rrc\n", str, rc); \
+ if (RT_FAILURE(rc)) \
+ { \
+ g_cErrors++; \
+ break; \
+ } \
+ } while (0)
+
/* Create error interface. */
/* Create error interface. */
VDIfError.pfnError = tstVDError;
@@ -292,7 +319,7 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
{
/* Write */
rc = tstVDSnapWrite(pVD, paDiskSeg, cDiskSegments, cbDisk, fInit);
- CHECK("tstVDSnapWrite()");
+ CHECK_BREAK("tstVDSnapWrite()");
fInit = false;
@@ -313,7 +340,7 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
rc = VDCreateDiff(pVD, pTest->pcszBackend, pszDiffFilename,
VD_IMAGE_FLAGS_NONE, "Test diff image", NULL, NULL,
VD_OPEN_FLAGS_NORMAL, NULL, NULL);
- CHECK("VDCreateDiff()");
+ CHECK_BREAK("VDCreateDiff()");
RTStrFree(pszDiffFilename);
VDDumpImages(pVD);
@@ -333,7 +360,7 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
rc = VDMerge(pVD, uStartMerge, uEndMerge, NULL);
else
rc = VDMerge(pVD, uEndMerge, uStartMerge, NULL);
- CHECK("VDMerge()");
+ CHECK_BREAK("VDMerge()");
cDiffs -= uEndMerge - uStartMerge;
@@ -351,7 +378,7 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
/* Now compare the result with our test pattern */
rc = tstVDSnapReadVerify(pVD, paDiskSeg, cDiskSegments, cbDisk);
- CHECK("tstVDSnapReadVerify()");
+ CHECK_BREAK("tstVDSnapReadVerify()");
}
cIteration++;
}
@@ -372,7 +399,7 @@ static int tstVDOpenCreateWriteMerge(PVDSNAPTEST pTest)
RTStrFree(pszDiffFilename);
}
#undef CHECK
- return 0;
+ return rc;
}
int main(int argc, char *argv[])