X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcynara-tests%2Fcommon%2Fcynara_test_file_operations.cpp;h=1f7a5da9a7fa63e7b16b885ae8c13bc06b796a91;hb=1fa1192276c890e558fc168dd9a4bfb780f8132e;hp=0c27a26e2b05f6cb54f58e8955106c4d65729dab;hpb=271ac5ac762bcd7e1f9e45e1b0643f31a40d07ce;p=platform%2Fcore%2Ftest%2Fsecurity-tests.git diff --git a/src/cynara-tests/common/cynara_test_file_operations.cpp b/src/cynara-tests/common/cynara_test_file_operations.cpp index 0c27a26..1f7a5da 100644 --- a/src/cynara-tests/common/cynara_test_file_operations.cpp +++ b/src/cynara-tests/common/cynara_test_file_operations.cpp @@ -95,6 +95,9 @@ void copyCynaraFile(const std::string &src, const std::string &dst) ret = sendfile(outFd, inFd, 0, statSrc.st_size); RUNNER_ASSERT_ERRNO_MSG(ret != -1, "sendfile failed"); + + ret = fsync(outFd); + RUNNER_ASSERT_ERRNO_MSG(ret != -1, "fsync failed"); } void copyCynaraFiles(const std::string &source, const std::string &destination) @@ -114,12 +117,30 @@ void copyCynaraFiles(const std::string &source, const std::string &destination) std::string tempSrc = source + "/" + direntPtr->d_name; copyCynaraFile(tempSrc, tempDest); } + + syncDir(destination); +} + +void syncElem(const std::string &filename, int flags, mode_t mode) +{ + int fileFd = TEMP_FAILURE_RETRY(open(filename.c_str(), flags, mode)); + RUNNER_ASSERT_ERRNO_MSG(fileFd != -1, "open failed name=" << filename); + FdUniquePtr fdPtr(&fileFd); + + int ret = fsync(fileFd); + RUNNER_ASSERT_ERRNO_MSG(ret != -1, "fsync failed name=" << filename); +} + +void syncDir(const std::string &dirname, mode_t mode) { + syncElem(dirname, O_DIRECTORY, mode); } void makeDir(const std::string &directory) { RUNNER_ASSERT_ERRNO_MSG(!mkdir(directory.c_str(), S_IRWXU | S_IRWXG | S_IRWXO), "Unable to make " << directory << " test directory"); + + syncDir(directory); } void removeDirFiles(const std::string &dir) @@ -127,6 +148,8 @@ void removeDirFiles(const std::string &dir) int ret = nftw(dir.c_str(), removeFile, 2, FTW_DEPTH | FTW_PHYS); if (ret == -1) RUNNER_ASSERT_ERRNO_MSG(errno == ENOENT, "nftw failed"); + else + syncDir(dir); } void removeDirIfExists(const std::string &dir)