diff options
author | Chris Wilson <chris+github@qwirx.com> | 2007-09-19 21:58:24 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2007-09-19 21:58:24 +0000 |
commit | 867fbf737760a7764f6095a1b9b7554047c47eb3 (patch) | |
tree | 1bc17e74cfef9352857f62b3ee842fa95a8547a4 /test/raidfile | |
parent | 41f3230a75e965254ab47e3609f68c8634266d37 (diff) | |
parent | 2ff87143551e6882c90ceaba940a34779b922882 (diff) |
Replace trunk with chris/merge.
Diffstat (limited to 'test/raidfile')
-rw-r--r-- | test/raidfile/intercept.cpp | 272 | ||||
-rw-r--r-- | test/raidfile/testraidfile.cpp | 126 |
2 files changed, 86 insertions, 312 deletions
diff --git a/test/raidfile/intercept.cpp b/test/raidfile/intercept.cpp deleted file mode 100644 index 6df344e1..00000000 --- a/test/raidfile/intercept.cpp +++ /dev/null @@ -1,272 +0,0 @@ -// -------------------------------------------------------------------------- -// -// File -// Name: intercept.cpp -// Purpose: Syscall interception code for the raidfile test -// Created: 2003/07/22 -// -// -------------------------------------------------------------------------- - -#include "Box.h" - -#ifdef HAVE_SYS_SYSCALL_H - #include <sys/syscall.h> -#endif -#include <sys/types.h> -#include <unistd.h> -#include <sys/uio.h> -#include <errno.h> - -#ifndef PLATFORM_CLIB_FNS_INTERCEPTION_IMPOSSIBLE - -#if !defined(HAVE_SYSCALL) && !defined(HAVE___SYSCALL) && !defined(HAVE___SYSCALL_NEED_DEFN) - #define PLATFORM_NO_SYSCALL -#endif - -#ifdef PLATFORM_NO_SYSCALL - // For some reason, syscall just doesn't work on Darwin - // so instead, we build functions using assembler in a varient - // of the technique used in the Darwin Libc - extern "C" int - TEST_open(const char *path, int flags, mode_t mode); - extern "C" int - TEST_close(int d); - extern "C" ssize_t - TEST_write(int d, const void *buf, size_t nbytes); - extern "C" ssize_t - TEST_read(int d, void *buf, size_t nbytes); - extern "C" ssize_t - TEST_readv(int d, const struct iovec *iov, int iovcnt); - extern "C" off_t - TEST_lseek(int fildes, off_t offset, int whence); -#else - #ifdef HAVE___SYSCALL_NEED_DEFN - // Need this, not declared in syscall.h nor unistd.h - extern "C" off_t __syscall(quad_t number, ...); - #endif - #ifndef HAVE_SYSCALL - #undef syscall - #define syscall __syscall - #endif -#endif - -#include <string.h> -#include <stdio.h> - -#include "MemLeakFindOn.h" - -bool intercept_enabled = false; -const char *intercept_filename = 0; -int intercept_filedes = -1; -off_t intercept_errorafter = 0; -int intercept_errno = 0; -int intercept_syscall = 0; -off_t intercept_filepos = 0; - -#define SIZE_ALWAYS_ERROR -773 - -void intercept_clear_setup() -{ - intercept_enabled = false; - intercept_filename = 0; - intercept_filedes = -1; - intercept_errorafter = 0; - intercept_syscall = 0; - intercept_filepos = 0; -} - -bool intercept_triggered() -{ - return !intercept_enabled; -} - -void intercept_setup_error(const char *filename, unsigned int errorafter, int errortoreturn, int syscalltoerror) -{ - TRACE4("Setup for error: %s, after %d, err %d, syscall %d\n", filename, errorafter, errortoreturn, syscalltoerror); - intercept_enabled = true; - intercept_filename = filename; - intercept_filedes = -1; - intercept_errorafter = errorafter; - intercept_syscall = syscalltoerror; - intercept_errno = errortoreturn; - intercept_filepos = 0; -} - -bool intercept_errornow(int d, int size, int syscallnum) -{ - if(intercept_filedes != -1 && d == intercept_filedes && syscallnum == intercept_syscall) - { - //printf("Checking for err, %d, %d, %d\n", d, size, syscallnum); - if(size == SIZE_ALWAYS_ERROR) - { - // Looks good for an error! - TRACE2("Returning error %d for syscall %d\n", intercept_errno, syscallnum); - return true; - } - // where are we in the file? - if(intercept_filepos >= intercept_errorafter || intercept_filepos >= ((off_t)intercept_errorafter - size)) - { - TRACE3("Returning error %d for syscall %d, file pos %d\n", intercept_errno, syscallnum, (int)intercept_filepos); - return true; - } - } - return false; // no error please! -} - -int intercept_reterr() -{ - intercept_enabled = false; - intercept_filename = 0; - intercept_filedes = -1; - intercept_errorafter = 0; - intercept_syscall = 0; - return intercept_errno; -} - -#define CHECK_FOR_FAKE_ERROR_COND(D, S, CALL, FAILRES) \ - if(intercept_enabled) \ - { \ - if(intercept_errornow(D, S, CALL)) \ - { \ - errno = intercept_reterr(); \ - return FAILRES; \ - } \ - } - -extern "C" int -open(const char *path, int flags, mode_t mode) -{ - if(intercept_enabled) - { - if(intercept_syscall == SYS_open && strcmp(path, intercept_filename) == 0) - { - errno = intercept_reterr(); - return -1; - } - } -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_open(path, flags, mode); -#else - int r = syscall(SYS_open, path, flags, mode); -#endif - if(intercept_enabled && intercept_filedes == -1) - { - // Right file? - if(strcmp(intercept_filename, path) == 0) - { - intercept_filedes = r; - //printf("Found file to intercept, h = %d\n", r); - } - } - return r; -} - -extern "C" int -open64(const char *path, int flags, mode_t mode) -{ - // With _FILE_OFFSET_BITS set to 64 this should really use (flags | - // O_LARGEFILE) here, but not actually necessary for the tests and not - // worth the trouble finding O_LARGEFILE - return open(path, flags, mode); -} - -extern "C" int -close(int d) -{ - CHECK_FOR_FAKE_ERROR_COND(d, SIZE_ALWAYS_ERROR, SYS_close, -1); -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_close(d); -#else - int r = syscall(SYS_close, d); -#endif - if(r == 0) - { - if(d == intercept_filedes) - { - intercept_filedes = -1; - } - } - return r; -} - -extern "C" ssize_t -write(int d, const void *buf, size_t nbytes) -{ - CHECK_FOR_FAKE_ERROR_COND(d, nbytes, SYS_write, -1); -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_write(d, buf, nbytes); -#else - int r = syscall(SYS_write, d, buf, nbytes); -#endif - if(r != -1) - { - intercept_filepos += r; - } - return r; -} - -extern "C" ssize_t -read(int d, void *buf, size_t nbytes) -{ - CHECK_FOR_FAKE_ERROR_COND(d, nbytes, SYS_read, -1); -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_read(d, buf, nbytes); -#else - int r = syscall(SYS_read, d, buf, nbytes); -#endif - if(r != -1) - { - intercept_filepos += r; - } - return r; -} - -extern "C" ssize_t -readv(int d, const struct iovec *iov, int iovcnt) -{ - // how many bytes? - int nbytes = 0; - for(int b = 0; b < iovcnt; ++b) - { - nbytes += iov[b].iov_len; - } - - CHECK_FOR_FAKE_ERROR_COND(d, nbytes, SYS_readv, -1); -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_readv(d, iov, iovcnt); -#else - int r = syscall(SYS_readv, d, iov, iovcnt); -#endif - if(r != -1) - { - intercept_filepos += r; - } - return r; -} - -extern "C" off_t -lseek(int fildes, off_t offset, int whence) -{ - // random magic for lseek syscall, see /usr/src/lib/libc/sys/lseek.c - CHECK_FOR_FAKE_ERROR_COND(fildes, 0, SYS_lseek, -1); -#ifdef PLATFORM_NO_SYSCALL - int r = TEST_lseek(fildes, offset, whence); -#else - #ifdef HAVE_LSEEK_DUMMY_PARAM - off_t r = syscall(SYS_lseek, fildes, 0 /* extra 0 required here! */, offset, whence); - #elif defined(_FILE_OFFSET_BITS) - // Don't bother trying to call SYS__llseek on 32 bit since it is - // fiddly and not needed for the tests - off_t r = syscall(SYS_lseek, fildes, (uint32_t)offset, whence); - #else - off_t r = syscall(SYS_lseek, fildes, offset, whence); - #endif -#endif - if(r != -1) - { - intercept_filepos = r; - } - return r; -} - -#endif // n PLATFORM_CLIB_FNS_INTERCEPTION_IMPOSSIBLE diff --git a/test/raidfile/testraidfile.cpp b/test/raidfile/testraidfile.cpp index 1e510486..40703de5 100644 --- a/test/raidfile/testraidfile.cpp +++ b/test/raidfile/testraidfile.cpp @@ -12,7 +12,10 @@ #include <fcntl.h> #include <unistd.h> #include <errno.h> + +#ifdef HAVE_SYSCALL #include <sys/syscall.h> +#endif #include <string.h> @@ -207,16 +210,24 @@ void testReadingFileContents(int set, const char *filename, void *data, int data bytesread += r; } TEST_THAT(!readstream4.StreamDataLeft()); // check IOStream interface is correct + pread.reset(); // Be nasty, and create some errors for the RAID stuff to recover from... if(TestRAIDProperties) { char stripe1fn[256], stripe1fnRename[256]; - sprintf(stripe1fn, "testfiles/%d_%d/%s.rf", set, startDisc, filename); - sprintf(stripe1fnRename, "testfiles/%d_%d/%s.rf-REMOVED", set, startDisc, filename); + sprintf(stripe1fn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf", set, startDisc, filename); + sprintf(stripe1fnRename, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf-REMOVED", set, startDisc, + filename); char stripe2fn[256], stripe2fnRename[256]; - sprintf(stripe2fn, "testfiles/%d_%d/%s.rf", set, (startDisc + 1) % RAID_NUMBER_DISCS, filename); - sprintf(stripe2fnRename, "testfiles/%d_%d/%s.rf-REMOVED", set, (startDisc + 1) % RAID_NUMBER_DISCS, filename); + sprintf(stripe2fn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf", set, + (startDisc + 1) % RAID_NUMBER_DISCS, filename); + sprintf(stripe2fnRename, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf-REMOVED", set, + (startDisc + 1) % RAID_NUMBER_DISCS, filename); // Read with stripe1 + parity TEST_THAT(::rename(stripe2fn, stripe2fnRename) == 0); @@ -252,9 +263,15 @@ void testReadingFileContents(int set, const char *filename, void *data, int data } mungefilename[m++] = '\0'; char stripe1munge[256]; - sprintf(stripe1munge, "testfiles/%d_%d/.raidfile-unreadable/%s", set, startDisc, mungefilename); + sprintf(stripe1munge, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR ".raidfile-unreadable" + DIRECTORY_SEPARATOR "%s", set, startDisc, + mungefilename); char stripe2munge[256]; - sprintf(stripe2munge, "testfiles/%d_%d/.raidfile-unreadable/%s", set, (startDisc + 1) % RAID_NUMBER_DISCS, mungefilename); + sprintf(stripe2munge, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR ".raidfile-unreadable" + DIRECTORY_SEPARATOR "%s", set, + (startDisc + 1) % RAID_NUMBER_DISCS, mungefilename); #ifdef TRF_CAN_INTERCEPT @@ -359,10 +376,12 @@ void testReadWriteFileDo(int set, const char *filename, void *data, int datasize write4.Write(data, datasize); // This time, don't discard and transform it to a RAID File char writefnPre[256]; - sprintf(writefnPre, "testfiles/%d_%d/%s.rfwX", set, startDisc, filename); + sprintf(writefnPre, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rfwX", set, startDisc, filename); TEST_THAT(TestFileExists(writefnPre)); char writefn[256]; - sprintf(writefn, "testfiles/%d_%d/%s.rfw", set, startDisc, filename); + sprintf(writefn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rfw", set, startDisc, filename); int usageInBlocks = write4.GetDiscUsageInBlocks(); write4.Commit(DoTransform); // Check that files are nicely done... @@ -390,14 +409,19 @@ void testReadWriteFileDo(int set, const char *filename, void *data, int datasize fs1 = ((fullblocks / 2)+1) * RAID_BLOCK_SIZE; } char stripe1fn[256]; - sprintf(stripe1fn, "testfiles/%d_%d/%s.rf", set, startDisc, filename); + sprintf(stripe1fn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf", set, startDisc, filename); TEST_THAT(TestGetFileSize(stripe1fn) == fs1); char stripe2fn[256]; - sprintf(stripe2fn, "testfiles/%d_%d/%s.rf", set, (startDisc + 1) % RAID_NUMBER_DISCS, filename); + sprintf(stripe2fn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf", set, + (startDisc + 1) % RAID_NUMBER_DISCS, filename); TEST_THAT(TestGetFileSize(stripe2fn) == (int)(datasize - fs1)); // Parity file size char parityfn[256]; - sprintf(parityfn, "testfiles/%d_%d/%s.rf", set, (startDisc + 2) % RAID_NUMBER_DISCS, filename); + sprintf(parityfn, "testfiles" DIRECTORY_SEPARATOR "%d_%d" + DIRECTORY_SEPARATOR "%s.rf", set, + (startDisc + 2) % RAID_NUMBER_DISCS, filename); // Mildly complex calculation unsigned int blocks = datasize / RAID_BLOCK_SIZE; unsigned int bytesOver = datasize % RAID_BLOCK_SIZE; @@ -436,14 +460,16 @@ void testReadWriteFileDo(int set, const char *filename, void *data, int datasize if(datasize > (3*1024)) { int f; - TEST_THAT((f = ::open(stripe1fn, O_RDONLY, 0)) != -1); + TEST_THAT((f = ::open(stripe1fn, O_RDONLY | O_BINARY, + 0)) != -1); TEST_THAT(sizeof(testblock) == ::read(f, testblock, sizeof(testblock))); for(unsigned int q = 0; q < sizeof(testblock); ++q) { TEST_THAT(testblock[q] == ((char*)data)[q]); } ::close(f); - TEST_THAT((f = ::open(stripe2fn, O_RDONLY, 0)) != -1); + TEST_THAT((f = ::open(stripe2fn, O_RDONLY | O_BINARY, + 0)) != -1); TEST_THAT(sizeof(testblock) == ::read(f, testblock, sizeof(testblock))); for(unsigned int q = 0; q < sizeof(testblock); ++q) { @@ -536,7 +562,9 @@ void test_overwrites() // Generate a random pre-existing write file (and ensure that it doesn't exist already) int f; - TEST_THAT((f = ::open("testfiles/0_2/overwrite_B.rfwX", O_WRONLY | O_CREAT | O_EXCL, 0755)) != -1); + TEST_THAT((f = ::open("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "overwrite_B.rfwX", + O_WRONLY | O_CREAT | O_EXCL | O_BINARY, 0755)) != -1); TEST_THAT(::write(f, "TESTTEST", 8) == 8); ::close(f); @@ -557,7 +585,7 @@ int test(int argc, const char *argv[]) // Initialise the controller RaidFileController &rcontroller = RaidFileController::GetController(); - rcontroller.Initialise("testfiles/raidfile.conf"); + rcontroller.Initialise("testfiles" DIRECTORY_SEPARATOR "raidfile.conf"); // some data char data[TEST_DATA_SIZE]; @@ -574,9 +602,12 @@ int test(int argc, const char *argv[]) // Try creating a directory RaidFileWrite::CreateDirectory(0, "test-dir"); - TEST_THAT(TestDirExists("testfiles/0_0/test-dir")); - TEST_THAT(TestDirExists("testfiles/0_1/test-dir")); - TEST_THAT(TestDirExists("testfiles/0_2/test-dir")); + TEST_THAT(TestDirExists("testfiles" DIRECTORY_SEPARATOR "0_0" + DIRECTORY_SEPARATOR "test-dir")); + TEST_THAT(TestDirExists("testfiles" DIRECTORY_SEPARATOR "0_1" + DIRECTORY_SEPARATOR "test-dir")); + TEST_THAT(TestDirExists("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "test-dir")); TEST_THAT(RaidFileRead::DirectoryExists(0, "test-dir")); TEST_THAT(!RaidFileRead::DirectoryExists(0, "test-dir-not")); @@ -608,9 +639,12 @@ int test(int argc, const char *argv[]) // Before it's deleted, check to see the contents are as expected int f; - TEST_THAT((f = ::open("testfiles/0_2/test1.rfwX", O_RDONLY, 0)) >= 0); + TEST_THAT((f = ::open("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "test1.rfwX", O_RDONLY | O_BINARY, 0)) + >= 0); char buffer[sizeof(data)]; - TEST_THAT(::read(f, buffer, sizeof(buffer)) == sizeof(buffer)); + int bytes_read = ::read(f, buffer, sizeof(buffer)); + TEST_THAT(bytes_read == sizeof(buffer)); for(unsigned int l = 0; l < 1024; ++l) { TEST_THAT(buffer[l] == data[l]); @@ -624,7 +658,8 @@ int test(int argc, const char *argv[]) TEST_THAT(buffer[l+2048+sizeof(data2)] == data2[l]); } TEST_THAT(::lseek(f, sizeof(data), SEEK_SET) == sizeof(buffer)); - TEST_THAT(::read(f, buffer, sizeof(buffer)) == sizeof(buffer)); + bytes_read = ::read(f, buffer, sizeof(buffer)); + TEST_THAT(bytes_read == sizeof(buffer)); for(unsigned int l = 0; l < 1024; ++l) { TEST_THAT(buffer[l] == data[l]); @@ -635,7 +670,9 @@ int test(int argc, const char *argv[]) // Commit the data write1.Commit(); - TEST_THAT((f = ::open("testfiles/0_2/test1.rfw", O_RDONLY, 0)) >= 0); + TEST_THAT((f = ::open("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "test1.rfw", O_RDONLY | O_BINARY, 0)) + >= 0); ::close(f); // Now try and read it @@ -687,7 +724,9 @@ int test(int argc, const char *argv[]) write2.Write(data, sizeof(data)); // This time, discard it write2.Discard(); - TEST_THAT((f = ::open("testfiles/0_2/test1.rfw", O_RDONLY, 0)) == -1); + TEST_THAT((f = ::open("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "test1.rfw", O_RDONLY | O_BINARY, 0)) + == -1); // And leaving it there... RaidFileWrite writeLeave(0, "test1"); @@ -695,7 +734,9 @@ int test(int argc, const char *argv[]) writeLeave.Write(data, sizeof(data)); // This time, commit it writeLeave.Commit(); - TEST_THAT((f = ::open("testfiles/0_2/test1.rfw", O_RDONLY, 0)) != -1); + TEST_THAT((f = ::open("testfiles" DIRECTORY_SEPARATOR "0_2" + DIRECTORY_SEPARATOR "test1.rfw", O_RDONLY | O_BINARY, 0)) + != -1); ::close(f); // Then check that the thing will refuse to open it again. @@ -712,7 +753,8 @@ int test(int argc, const char *argv[]) write3b.Write(data + 3, sizeof(data) - 3); write3b.Commit(); // Test it - testReadingFileContents(0, "test1", data+3, sizeof(data) - 3, false /*TestRAIDProperties*/); + testReadingFileContents(0, "test1", data+3, sizeof(data) - 3, false + /* TestRAIDProperties */); // And once again, but this time making it a raid file RaidFileWrite write3c(0, "test1"); @@ -721,7 +763,8 @@ int test(int argc, const char *argv[]) write3c.Write(data + 7, sizeof(data) - 7); write3c.Commit(true); // make RAID // Test it - testReadingFileContents(0, "test1", data+7, sizeof(data) - 7, false /*TestRAIDProperties*/); + testReadingFileContents(0, "test1", data+7, sizeof(data) - 7, false + /*TestRAIDProperties*/); // Test opening a file which doesn't exist TEST_CHECK_THROWS( @@ -736,20 +779,23 @@ int test(int argc, const char *argv[]) w.Commit(true); // Try removing the parity file - TEST_THAT(::rename("testfiles/0_0/damage.rf", "testfiles/0_0/damage.rf-NT") == 0); + TEST_THAT(::rename("testfiles" DIRECTORY_SEPARATOR "0_0" + DIRECTORY_SEPARATOR "damage.rf", + "testfiles" DIRECTORY_SEPARATOR "0_0" + DIRECTORY_SEPARATOR "damage.rf-NT") == 0); { std::auto_ptr<RaidFileRead> pr0 = RaidFileRead::Open(0, "damage"); pr0->Read(buffer, sizeof(data)); } - TEST_THAT(::rename("testfiles/0_0/damage.rf-NT", "testfiles/0_0/damage.rf") == 0); - + TEST_THAT(::rename("testfiles" DIRECTORY_SEPARATOR "0_0" DIRECTORY_SEPARATOR "damage.rf-NT", "testfiles" DIRECTORY_SEPARATOR "0_0" DIRECTORY_SEPARATOR "damage.rf") == 0); + // Delete one of the files - TEST_THAT(::unlink("testfiles/0_1/damage.rf") == 0); // stripe 1 + TEST_THAT(::unlink("testfiles" DIRECTORY_SEPARATOR "0_1" DIRECTORY_SEPARATOR "damage.rf") == 0); // stripe 1 #ifdef TRF_CAN_INTERCEPT // Open it and read... { - intercept_setup_error("testfiles/0_2/damage.rf", 0, EIO, SYS_read); // stripe 2 + intercept_setup_error("testfiles" DIRECTORY_SEPARATOR "0_2" DIRECTORY_SEPARATOR "damage.rf", 0, EIO, SYS_read); // stripe 2 std::auto_ptr<RaidFileRead> pr1 = RaidFileRead::Open(0, "damage"); TEST_CHECK_THROWS( pr1->Read(buffer, sizeof(data)), @@ -761,7 +807,7 @@ int test(int argc, const char *argv[]) #endif //TRF_CAN_INTERCEPT // Delete another - TEST_THAT(::unlink("testfiles/0_0/damage.rf") == 0); // parity + TEST_THAT(::unlink("testfiles" DIRECTORY_SEPARATOR "0_0" DIRECTORY_SEPARATOR "damage.rf") == 0); // parity TEST_CHECK_THROWS( std::auto_ptr<RaidFileRead> pread2 = RaidFileRead::Open(0, "damage"), @@ -772,22 +818,22 @@ int test(int argc, const char *argv[]) { RaidFileWrite::CreateDirectory(0, "dirread"); // Make some contents - RaidFileWrite::CreateDirectory(0, "dirread/dfsdf1"); - RaidFileWrite::CreateDirectory(0, "dirread/ponwq2"); + RaidFileWrite::CreateDirectory(0, "dirread" DIRECTORY_SEPARATOR "dfsdf1"); + RaidFileWrite::CreateDirectory(0, "dirread" DIRECTORY_SEPARATOR "ponwq2"); { - RaidFileWrite w(0, "dirread/sdf9873241"); + RaidFileWrite w(0, "dirread" DIRECTORY_SEPARATOR "sdf9873241"); w.Open(); w.Write(data, sizeof(data)); w.Commit(true); } { - RaidFileWrite w(0, "dirread/fsdcxjni3242"); + RaidFileWrite w(0, "dirread" DIRECTORY_SEPARATOR "fsdcxjni3242"); w.Open(); w.Write(data, sizeof(data)); w.Commit(true); } { - RaidFileWrite w(0, "dirread/cskjnds3"); + RaidFileWrite w(0, "dirread" DIRECTORY_SEPARATOR "cskjnds3"); w.Open(); w.Write(data, sizeof(data)); w.Commit(false); @@ -803,15 +849,15 @@ int test(int argc, const char *argv[]) TEST_THAT(true == RaidFileRead::ReadDirectoryContents(0, std::string("dirread"), RaidFileRead::DirReadType_DirsOnly, names)); TEST_THAT(list_matches(names, dir_list1)); // Delete things - TEST_THAT(::unlink("testfiles/0_0/dirread/sdf9873241.rf") == 0); + TEST_THAT(::unlink("testfiles" DIRECTORY_SEPARATOR "0_0" DIRECTORY_SEPARATOR "dirread" DIRECTORY_SEPARATOR "sdf9873241.rf") == 0); TEST_THAT(true == RaidFileRead::ReadDirectoryContents(0, std::string("dirread"), RaidFileRead::DirReadType_FilesOnly, names)); TEST_THAT(list_matches(names, file_list1)); // Delete something else so that it's not recoverable - TEST_THAT(::unlink("testfiles/0_1/dirread/sdf9873241.rf") == 0); + TEST_THAT(::unlink("testfiles" DIRECTORY_SEPARATOR "0_1" DIRECTORY_SEPARATOR "dirread" DIRECTORY_SEPARATOR "sdf9873241.rf") == 0); TEST_THAT(false == RaidFileRead::ReadDirectoryContents(0, std::string("dirread"), RaidFileRead::DirReadType_FilesOnly, names)); TEST_THAT(list_matches(names, file_list1)); // And finally... - TEST_THAT(::unlink("testfiles/0_2/dirread/sdf9873241.rf") == 0); + TEST_THAT(::unlink("testfiles" DIRECTORY_SEPARATOR "0_2" DIRECTORY_SEPARATOR "dirread" DIRECTORY_SEPARATOR "sdf9873241.rf") == 0); TEST_THAT(true == RaidFileRead::ReadDirectoryContents(0, std::string("dirread"), RaidFileRead::DirReadType_FilesOnly, names)); TEST_THAT(list_matches(names, file_list2)); } |