int main(int argc, char *argv[]) { int rc; RTR3InitExe(argc, &argv, 0); RTPrintf("tstVD-2: TESTING...\n"); rc = tstVDBackendInfo(); if (RT_FAILURE(rc)) { RTPrintf("tstVD-2: getting backend info test failed! rc=%Rrc\n", rc); g_cErrors++; } rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVD-2: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVD-2: SUCCESS\n"); else RTPrintf("tstVD-2: FAILURE - %d errors\n", g_cErrors); return !!g_cErrors; }
int main(int argc, char *argv[]) { RTR3InitExe(argc, &argv, 0); int rc; RTPrintf("tstVD: TESTING...\n"); /* * Clean up potential leftovers from previous unsuccessful runs. */ RTFileDelete("tmpVDCreate.vdi"); if (!RTDirExists("tmp")) { rc = RTDirCreate("tmp", RTFS_UNIX_IRWXU, 0); if (RT_FAILURE(rc)) { RTPrintf("tstVD: Failed to create 'tmp' directory! rc=%Rrc\n", rc); g_cErrors++; } } #ifdef VDI_TEST rc = tstVDCreateShareDelete("VDI", "tmpVDCreate.vdi", 10 * _1M, VD_IMAGE_FLAGS_FIXED); if (RT_FAILURE(rc)) { RTPrintf("tstVD: VDI shareable test failed! rc=%Rrc\n", rc); g_cErrors++; } #endif /* VDI_TEST */ /* * Clean up any leftovers. */ RTFileDelete("tmpVDCreate.vdi"); rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVD: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVD: SUCCESS\n"); else RTPrintf("tstVD: FAILURE - %d errors\n", g_cErrors); return !!g_cErrors; }
int main(int argc, char *argv[]) { RTR3InitExe(argc, &argv, 0); int rc; VDSNAPTEST Test; RTPrintf("tstVDSnap: TESTING...\n"); rc = RTRandAdvCreateParkMiller(&g_hRand); if (RT_FAILURE(rc)) { RTPrintf("tstVDSnap: Creating RNG failed rc=%Rrc\n", rc); return 1; } RTRandAdvSeed(g_hRand, 0x12345678); Test.pcszBackend = "vmdk"; Test.pcszBaseImage = "tstVDSnapBase.vmdk"; Test.pcszDiffSuff = "vmdk"; Test.cIterations = 30; Test.cbTestPattern = 10 * _1M; Test.cDiskSegsMin = 10; Test.cDiskSegsMax = 50; Test.cDiffsMinBeforeMerge = 5; Test.uCreateDiffChance = 50; /* % */ Test.uChangeSegChance = 50; /* % */ Test.uAllocatedBlocks = 50; /* 50% allocated */ Test.fForward = true; tstVDOpenCreateWriteMerge(&Test); /* Same test with backwards merge */ Test.fForward = false; tstVDOpenCreateWriteMerge(&Test); rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVDSnap: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVDSnap: SUCCESS\n"); else RTPrintf("tstVDSnap: FAILURE - %d errors\n", g_cErrors); RTRandAdvDestroy(g_hRand); return !!g_cErrors; }
int main(int argc, char *argv[]) { int rc; RTR3InitExe(argc, &argv, 0); if (argc != 3) { RTPrintf("Usage: ./tstVDCopy <hdd1> <hdd2>\n"); return 1; } RTPrintf("tstVDCopy: TESTING...\n"); PVBOXHDD pVD1 = NULL; PVBOXHDD pVD2 = NULL; PVDINTERFACE pVDIfs = NULL; VDINTERFACEERROR VDIfError; char *pszVD1 = NULL; char *pszVD2 = NULL; char *pbBuf1 = NULL; char *pbBuf2 = NULL; VDTYPE enmTypeVD1 = VDTYPE_INVALID; VDTYPE enmTypeVD2 = VDTYPE_INVALID; #define CHECK(str) \ do \ { \ if (RT_FAILURE(rc)) \ { \ RTPrintf("%s rc=%Rrc\n", str, rc); \ if (pVD1) \ VDCloseAll(pVD1); \ if (pVD2) \ VDCloseAll(pVD2); \ return rc; \ } \ } while (0) pbBuf1 = (char *)RTMemAllocZ(VD_MERGE_BUFFER_SIZE); pbBuf2 = (char *)RTMemAllocZ(VD_MERGE_BUFFER_SIZE); /* Create error interface. */ VDIfError.pfnError = tstVDError; rc = VDInterfaceAdd(&VDIfError.Core, "tstVD_Error", VDINTERFACETYPE_ERROR, NULL, sizeof(VDINTERFACEERROR), &pVDIfs); AssertRC(rc); rc = VDGetFormat(NULL /* pVDIfsDisk */, NULL /* pVDIfsImage */, argv[1], &pszVD1, &enmTypeVD1); CHECK("VDGetFormat() hdd1"); rc = VDGetFormat(NULL /* pVDIfsDisk */, NULL /* pVDIfsImage */, argv[2], &pszVD2, &enmTypeVD2); CHECK("VDGetFormat() hdd2"); rc = VDCreate(pVDIfs, VDTYPE_HDD, &pVD1); CHECK("VDCreate() hdd1"); rc = VDCreate(pVDIfs, VDTYPE_HDD, &pVD2); CHECK("VDCreate() hdd1"); rc = VDOpen(pVD1, pszVD1, argv[1], VD_OPEN_FLAGS_NORMAL, NULL); CHECK("VDOpen() hdd1"); rc = VDOpen(pVD2, pszVD2, argv[2], VD_OPEN_FLAGS_NORMAL, NULL); CHECK("VDOpen() hdd2"); uint64_t cbSize1 = 0; uint64_t cbSize2 = 0; cbSize1 = VDGetSize(pVD1, 0); Assert(cbSize1 != 0); cbSize2 = VDGetSize(pVD1, 0); Assert(cbSize1 != 0); if (cbSize1 == cbSize2) { uint64_t uOffCurr = 0; /* Compare block by block. */ while (uOffCurr < cbSize1) { size_t cbRead = RT_MIN((cbSize1 - uOffCurr), VD_MERGE_BUFFER_SIZE); rc = VDRead(pVD1, uOffCurr, pbBuf1, cbRead); CHECK("VDRead() hdd1"); rc = VDRead(pVD2, uOffCurr, pbBuf2, cbRead); CHECK("VDRead() hdd2"); if (memcmp(pbBuf1, pbBuf2, cbRead)) { RTPrintf("tstVDCopy: Images differ uOffCurr=%llu\n", uOffCurr); /* Do byte by byte comparison. */ for (size_t i = 0; i < cbRead; i++) { if (pbBuf1[i] != pbBuf2[i]) { RTPrintf("tstVDCopy: First different byte is at offset %llu\n", uOffCurr + i); break; } } break; } uOffCurr += cbRead; } } else RTPrintf("tstVDCopy: Images have different size hdd1=%llu hdd2=%llu\n", cbSize1, cbSize2); VDClose(pVD1, false); CHECK("VDClose() hdd1"); VDClose(pVD2, false); CHECK("VDClose() hdd2"); VDDestroy(pVD1); VDDestroy(pVD2); RTMemFree(pbBuf1); RTMemFree(pbBuf2); #undef CHECK rc = VDShutdown(); if (RT_FAILURE(rc)) { RTPrintf("tstVDCopy: unloading backends failed! rc=%Rrc\n", rc); g_cErrors++; } /* * Summary */ if (!g_cErrors) RTPrintf("tstVDCopy: SUCCESS\n"); else RTPrintf("tstVDCopy: FAILURE - %d errors\n", g_cErrors); return !!g_cErrors; }