aboutsummaryrefslogtreecommitdiffstats
path: root/util/system/fs_ut.cpp
diff options
context:
space:
mode:
authorIlnur Khuziev <ilnur.khuziev@yandex.ru>2022-02-10 16:46:13 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:46:13 +0300
commit736dcd8ca259457a136f2f9f9168c44643914323 (patch)
treeddd46a036d68bfa83aa11b892f31243ea6b068a1 /util/system/fs_ut.cpp
parent9bf2fa2b060c9881d3135c2208c624a1dd546ecc (diff)
downloadydb-736dcd8ca259457a136f2f9f9168c44643914323.tar.gz
Restoring authorship annotation for Ilnur Khuziev <ilnur.khuziev@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'util/system/fs_ut.cpp')
-rw-r--r--util/system/fs_ut.cpp420
1 files changed, 210 insertions, 210 deletions
diff --git a/util/system/fs_ut.cpp b/util/system/fs_ut.cpp
index de071ebf55..21d0a9729a 100644
--- a/util/system/fs_ut.cpp
+++ b/util/system/fs_ut.cpp
@@ -1,6 +1,6 @@
#include "fs.h"
-#include <library/cpp/testing/unittest/registar.h>
+#include <library/cpp/testing/unittest/registar.h>
#include "file.h"
#include "sysstat.h"
@@ -8,61 +8,61 @@
#include <util/folder/dirut.h>
#include <util/folder/path.h>
-//WARNING: on windows the test must be run with administative rules
-
+//WARNING: on windows the test must be run with administative rules
+
class TFsTest: public TTestBase {
UNIT_TEST_SUITE(TFsTest);
- UNIT_TEST(TestCreateRemove);
- UNIT_TEST(TestRename);
+ UNIT_TEST(TestCreateRemove);
+ UNIT_TEST(TestRename);
UNIT_TEST(TestSymlink);
UNIT_TEST(TestHardlink);
- UNIT_TEST(TestCwdOpts);
- UNIT_TEST(TestEnsureExists);
+ UNIT_TEST(TestCwdOpts);
+ UNIT_TEST(TestEnsureExists);
UNIT_TEST_SUITE_END();
public:
- void TestCreateRemove();
- void TestRename();
+ void TestCreateRemove();
+ void TestRename();
void TestSymlink();
void TestHardlink();
- void TestCwdOpts();
- void TestEnsureExists();
+ void TestCwdOpts();
+ void TestEnsureExists();
};
UNIT_TEST_SUITE_REGISTRATION(TFsTest);
-static void Touch(const TFsPath& path) {
- TFile file(path, CreateAlways | WrOnly);
- file.Write("123", 3);
-}
-
-void TFsTest::TestCreateRemove() {
- TFsPath dir1 = "dir_aбвг";
- NFs::RemoveRecursive(dir1);
- UNIT_ASSERT(!NFs::Exists(dir1));
- UNIT_ASSERT(NFs::MakeDirectory(dir1));
-
- UNIT_ASSERT(TFileStat(dir1).IsDir());
- UNIT_ASSERT(!NFs::MakeDirectory(dir1));
-
- UNIT_ASSERT(NFs::Exists(dir1));
- TFsPath subdir1 = dir1 / "a" / "b";
- //TFsPath link = dir1 / "link";
-
- UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, true));
- UNIT_ASSERT(NFs::Exists(subdir1));
- UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, false));
- UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE));
- UNIT_ASSERT_EXCEPTION(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, true), TIoException);
-
- TFsPath file1 = dir1 / "f1.txt";
+static void Touch(const TFsPath& path) {
+ TFile file(path, CreateAlways | WrOnly);
+ file.Write("123", 3);
+}
+
+void TFsTest::TestCreateRemove() {
+ TFsPath dir1 = "dir_aбвг";
+ NFs::RemoveRecursive(dir1);
+ UNIT_ASSERT(!NFs::Exists(dir1));
+ UNIT_ASSERT(NFs::MakeDirectory(dir1));
+
+ UNIT_ASSERT(TFileStat(dir1).IsDir());
+ UNIT_ASSERT(!NFs::MakeDirectory(dir1));
+
+ UNIT_ASSERT(NFs::Exists(dir1));
+ TFsPath subdir1 = dir1 / "a" / "b";
+ //TFsPath link = dir1 / "link";
+
+ UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, true));
+ UNIT_ASSERT(NFs::Exists(subdir1));
+ UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, false));
+ UNIT_ASSERT(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE));
+ UNIT_ASSERT_EXCEPTION(NFs::MakeDirectoryRecursive(subdir1, NFs::FP_COMMON_FILE, true), TIoException);
+
+ TFsPath file1 = dir1 / "f1.txt";
TFsPath file2 = subdir1 + TString("_f2.txt");
- TFsPath file3 = subdir1 / "f2.txt";
- Touch(file1);
- Touch(file2);
- Touch(file3);
- //UNIT_ASSERT(NFs::SymLink(file3.RealPath(), link));
-
+ TFsPath file3 = subdir1 / "f2.txt";
+ Touch(file1);
+ Touch(file2);
+ Touch(file3);
+ //UNIT_ASSERT(NFs::SymLink(file3.RealPath(), link));
+
UNIT_ASSERT(NFs::MakeDirectoryRecursive(dir1 / "subdir1" / "subdir2" / "subdir3" / "subdir4", NFs::FP_COMMON_FILE, false));
UNIT_ASSERT(NFs::MakeDirectoryRecursive(dir1 / "subdir1" / "subdir2", NFs::FP_COMMON_FILE, false));
@@ -72,202 +72,202 @@ void TFsTest::TestCreateRemove() {
TString longUtf8Name = "";
while (longUtf8Name.size() < 255) {
- longUtf8Name = longUtf8Name + "fф";
- }
+ longUtf8Name = longUtf8Name + "fф";
+ }
UNIT_ASSERT_EQUAL(longUtf8Name.size(), 255);
- TFsPath longfile = dir1 / longUtf8Name;
- Touch(longfile);
-
- UNIT_ASSERT(NFs::Exists(longfile));
- UNIT_ASSERT(NFs::Exists(file1));
- UNIT_ASSERT(NFs::Exists(file2));
- UNIT_ASSERT(NFs::Exists(file3));
- //UNIT_ASSERT(NFs::Exists(link));
-
- UNIT_ASSERT(!NFs::Remove(dir1));
- NFs::RemoveRecursive(dir1);
-
- UNIT_ASSERT(!NFs::Exists(file1));
- UNIT_ASSERT(!NFs::Exists(file2));
- UNIT_ASSERT(!NFs::Exists(file3));
- //UNIT_ASSERT(!NFs::Exists(link));
- UNIT_ASSERT(!NFs::Exists(subdir1));
- UNIT_ASSERT(!NFs::Exists(longfile));
- UNIT_ASSERT(!NFs::Exists(dir1));
-}
-
+ TFsPath longfile = dir1 / longUtf8Name;
+ Touch(longfile);
+
+ UNIT_ASSERT(NFs::Exists(longfile));
+ UNIT_ASSERT(NFs::Exists(file1));
+ UNIT_ASSERT(NFs::Exists(file2));
+ UNIT_ASSERT(NFs::Exists(file3));
+ //UNIT_ASSERT(NFs::Exists(link));
+
+ UNIT_ASSERT(!NFs::Remove(dir1));
+ NFs::RemoveRecursive(dir1);
+
+ UNIT_ASSERT(!NFs::Exists(file1));
+ UNIT_ASSERT(!NFs::Exists(file2));
+ UNIT_ASSERT(!NFs::Exists(file3));
+ //UNIT_ASSERT(!NFs::Exists(link));
+ UNIT_ASSERT(!NFs::Exists(subdir1));
+ UNIT_ASSERT(!NFs::Exists(longfile));
+ UNIT_ASSERT(!NFs::Exists(dir1));
+}
+
void RunRenameTest(TFsPath src, TFsPath dst) {
// if previous running was failed
- TFsPath dir1 = "dir";
- TFsPath dir2 = "dst_dir";
-
- NFs::Remove(src);
- NFs::Remove(dst);
-
- NFs::Remove(dir1 / src);
- NFs::Remove(dir1);
- NFs::Remove(dir2 / src);
- NFs::Remove(dir2);
-
+ TFsPath dir1 = "dir";
+ TFsPath dir2 = "dst_dir";
+
+ NFs::Remove(src);
+ NFs::Remove(dst);
+
+ NFs::Remove(dir1 / src);
+ NFs::Remove(dir1);
+ NFs::Remove(dir2 / src);
+ NFs::Remove(dir2);
+
{
- TFile file(src, CreateNew | WrOnly);
+ TFile file(src, CreateNew | WrOnly);
file.Write("123", 3);
}
UNIT_ASSERT(NFs::Rename(src, dst));
- UNIT_ASSERT(NFs::Exists(dst));
- UNIT_ASSERT(!NFs::Exists(src));
-
+ UNIT_ASSERT(NFs::Exists(dst));
+ UNIT_ASSERT(!NFs::Exists(src));
+
{
- TFile file(dst, OpenExisting);
+ TFile file(dst, OpenExisting);
UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 3);
}
-
- NFs::MakeDirectory(dir1);
+
+ NFs::MakeDirectory(dir1);
{
- TFile file(dir1 / src, CreateNew | WrOnly);
- file.Write("123", 3);
- }
+ TFile file(dir1 / src, CreateNew | WrOnly);
+ file.Write("123", 3);
+ }
UNIT_ASSERT(NFs::Rename(dir1, dir2));
- UNIT_ASSERT(NFs::Exists(dir2 / src));
- UNIT_ASSERT(!NFs::Exists(dir1));
-
- {
- TFile file(dir2 / src, OpenExisting);
- UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 3);
- }
-
+ UNIT_ASSERT(NFs::Exists(dir2 / src));
+ UNIT_ASSERT(!NFs::Exists(dir1));
+
+ {
+ TFile file(dir2 / src, OpenExisting);
+ UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 3);
+ }
+
UNIT_ASSERT(!NFs::Remove(src));
UNIT_ASSERT(NFs::Remove(dst));
UNIT_ASSERT(!NFs::Remove(dir1));
UNIT_ASSERT(NFs::Remove(dir2 / src));
UNIT_ASSERT(NFs::Remove(dir2));
-}
-
+}
+
void TFsTest::TestRename() {
- RunRenameTest("src.txt", "dst.txt");
- RunRenameTest("src_абвг.txt", "dst_абвг.txt");
-}
-
-static void RunHardlinkTest(const TFsPath& src, const TFsPath& dst) {
- NFs::Remove(src);
- NFs::Remove(dst);
-
- {
- TFile file(src, CreateNew | WrOnly);
- file.Write("123", 3);
- }
-
- UNIT_ASSERT(NFs::HardLink(src, dst));
-
- {
- TFile file(dst, OpenExisting | RdOnly);
- UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 3);
- }
- {
- TFile file(src, OpenExisting | WrOnly);
+ RunRenameTest("src.txt", "dst.txt");
+ RunRenameTest("src_абвг.txt", "dst_абвг.txt");
+}
+
+static void RunHardlinkTest(const TFsPath& src, const TFsPath& dst) {
+ NFs::Remove(src);
+ NFs::Remove(dst);
+
+ {
+ TFile file(src, CreateNew | WrOnly);
+ file.Write("123", 3);
+ }
+
+ UNIT_ASSERT(NFs::HardLink(src, dst));
+
+ {
+ TFile file(dst, OpenExisting | RdOnly);
+ UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 3);
+ }
+ {
+ TFile file(src, OpenExisting | WrOnly);
file.Write("1234", 4);
}
{
- TFile file(dst, OpenExisting | RdOnly);
+ TFile file(dst, OpenExisting | RdOnly);
UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 4);
}
{
- TFile file(dst, OpenExisting | WrOnly);
+ TFile file(dst, OpenExisting | WrOnly);
file.Write("12345", 5);
}
-
+
{
- TFile file(src, OpenExisting | RdOnly);
+ TFile file(src, OpenExisting | RdOnly);
UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 5);
}
-
+
UNIT_ASSERT(NFs::Remove(dst));
UNIT_ASSERT(NFs::Remove(src));
}
-void TFsTest::TestHardlink() {
- RunHardlinkTest("tempfile", "hardlinkfile");
- RunHardlinkTest("tempfile_абвг", "hardlinkfile_абвг"); //utf-8 names
-}
-
+void TFsTest::TestHardlink() {
+ RunHardlinkTest("tempfile", "hardlinkfile");
+ RunHardlinkTest("tempfile_абвг", "hardlinkfile_абвг"); //utf-8 names
+}
+
static void RunSymLinkTest(TString fileLocalName, TString symLinkName) {
// if previous running was failed
- TFsPath subDir = "tempsubdir";
- TFsPath srcFile = subDir / fileLocalName;
-
- TFsPath subsubDir1 = subDir / "dir1";
- TFsPath subsubDir2 = subDir / "dir2";
-
- TFsPath linkD1 = "symlinkdir";
- TFsPath linkD2 = subsubDir1 / "linkd2";
- TFsPath dangling = subsubDir1 / "dangling";
-
- NFs::Remove(srcFile);
- NFs::Remove(symLinkName);
- NFs::Remove(linkD2);
- NFs::Remove(dangling);
- NFs::Remove(subsubDir1);
- NFs::Remove(subsubDir2);
- NFs::Remove(subDir);
- NFs::Remove(linkD1);
-
- NFs::MakeDirectory(subDir);
- NFs::MakeDirectory(subsubDir1, NFs::FP_NONSECRET_FILE);
- NFs::MakeDirectory(subsubDir2, NFs::FP_SECRET_FILE);
+ TFsPath subDir = "tempsubdir";
+ TFsPath srcFile = subDir / fileLocalName;
+
+ TFsPath subsubDir1 = subDir / "dir1";
+ TFsPath subsubDir2 = subDir / "dir2";
+
+ TFsPath linkD1 = "symlinkdir";
+ TFsPath linkD2 = subsubDir1 / "linkd2";
+ TFsPath dangling = subsubDir1 / "dangling";
+
+ NFs::Remove(srcFile);
+ NFs::Remove(symLinkName);
+ NFs::Remove(linkD2);
+ NFs::Remove(dangling);
+ NFs::Remove(subsubDir1);
+ NFs::Remove(subsubDir2);
+ NFs::Remove(subDir);
+ NFs::Remove(linkD1);
+
+ NFs::MakeDirectory(subDir);
+ NFs::MakeDirectory(subsubDir1, NFs::FP_NONSECRET_FILE);
+ NFs::MakeDirectory(subsubDir2, NFs::FP_SECRET_FILE);
{
- TFile file(srcFile, CreateNew | WrOnly);
+ TFile file(srcFile, CreateNew | WrOnly);
file.Write("1234567", 7);
}
- UNIT_ASSERT(NFs::SymLink(subDir, linkD1));
- UNIT_ASSERT(NFs::SymLink("../dir2", linkD2));
- UNIT_ASSERT(NFs::SymLink("../dir3", dangling));
+ UNIT_ASSERT(NFs::SymLink(subDir, linkD1));
+ UNIT_ASSERT(NFs::SymLink("../dir2", linkD2));
+ UNIT_ASSERT(NFs::SymLink("../dir3", dangling));
UNIT_ASSERT_STRINGS_EQUAL(NFs::ReadLink(linkD2), TString("..") + LOCSLASH_S "dir2");
UNIT_ASSERT_STRINGS_EQUAL(NFs::ReadLink(dangling), TString("..") + LOCSLASH_S "dir3");
{
- TFile file(linkD1 / fileLocalName, OpenExisting | RdOnly);
+ TFile file(linkD1 / fileLocalName, OpenExisting | RdOnly);
UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 7);
}
- UNIT_ASSERT(NFs::SymLink(srcFile, symLinkName));
+ UNIT_ASSERT(NFs::SymLink(srcFile, symLinkName));
{
- TFile file(symLinkName, OpenExisting | RdOnly);
+ TFile file(symLinkName, OpenExisting | RdOnly);
UNIT_ASSERT_VALUES_EQUAL(file.GetLength(), 7);
}
{
- TFileStat fs(linkD1);
+ TFileStat fs(linkD1);
UNIT_ASSERT(!fs.IsFile());
UNIT_ASSERT(fs.IsDir());
UNIT_ASSERT(!fs.IsSymlink());
}
{
- TFileStat fs(linkD1, true);
+ TFileStat fs(linkD1, true);
UNIT_ASSERT(!fs.IsFile());
//UNIT_ASSERT(fs.IsDir()); // failed on unix
UNIT_ASSERT(fs.IsSymlink());
}
{
- TFileStat fs(symLinkName);
+ TFileStat fs(symLinkName);
UNIT_ASSERT(fs.IsFile());
UNIT_ASSERT(!fs.IsDir());
UNIT_ASSERT(!fs.IsSymlink());
UNIT_ASSERT_VALUES_EQUAL(fs.Size, 7u);
}
-
+
{
- TFileStat fs(symLinkName, true);
+ TFileStat fs(symLinkName, true);
//UNIT_ASSERT(fs.IsFile()); // no evidence that symlink has to be a file as well
UNIT_ASSERT(!fs.IsDir());
UNIT_ASSERT(fs.IsSymlink());
}
UNIT_ASSERT(NFs::Remove(symLinkName));
- UNIT_ASSERT(NFs::Exists(srcFile));
-
+ UNIT_ASSERT(NFs::Exists(srcFile));
+
UNIT_ASSERT(NFs::Remove(linkD1));
- UNIT_ASSERT(NFs::Exists(srcFile));
-
+ UNIT_ASSERT(NFs::Exists(srcFile));
+
UNIT_ASSERT(!NFs::Remove(subDir));
-
+
UNIT_ASSERT(NFs::Remove(srcFile));
UNIT_ASSERT(NFs::Remove(linkD2));
UNIT_ASSERT(NFs::Remove(dangling));
@@ -275,51 +275,51 @@ static void RunSymLinkTest(TString fileLocalName, TString symLinkName) {
UNIT_ASSERT(NFs::Remove(subsubDir2));
UNIT_ASSERT(NFs::Remove(subDir));
}
-
+
void TFsTest::TestSymlink() {
- // if previous running was failed
- RunSymLinkTest("f.txt", "fl.txt");
- RunSymLinkTest("f_абвг.txt", "fl_абвг.txt"); //utf-8 names
-}
-
-void TFsTest::TestCwdOpts() {
- TFsPath initialCwd = NFs::CurrentWorkingDirectory();
- TFsPath subdir = "dir_forcwd_абвг";
- NFs::MakeDirectory(subdir, NFs::FP_SECRET_FILE | NFs::FP_ALL_READ);
- NFs::SetCurrentWorkingDirectory(subdir);
- TFsPath newCwd = NFs::CurrentWorkingDirectory();
-
- UNIT_ASSERT_EQUAL(newCwd.Fix(), (initialCwd / subdir).Fix());
-
- NFs::SetCurrentWorkingDirectory("..");
- TFsPath newCwd2 = NFs::CurrentWorkingDirectory();
- UNIT_ASSERT_EQUAL(newCwd2.Fix(), initialCwd.Fix());
- UNIT_ASSERT(NFs::Remove(subdir));
-}
-
-void TFsTest::TestEnsureExists() {
- TFsPath fileExists = "tmp_file_абвг.txt";
- TFsPath nonExists = "tmp2_file_абвг.txt";
- {
- NFs::Remove(fileExists);
- NFs::Remove(nonExists);
- TFile file(fileExists, CreateNew | WrOnly);
- file.Write("1234567", 7);
- }
-
- UNIT_ASSERT_NO_EXCEPTION(NFs::EnsureExists(fileExists));
- UNIT_ASSERT_EXCEPTION(NFs::EnsureExists(nonExists), TFileError);
-
- TStringBuilder expected;
+ // if previous running was failed
+ RunSymLinkTest("f.txt", "fl.txt");
+ RunSymLinkTest("f_абвг.txt", "fl_абвг.txt"); //utf-8 names
+}
+
+void TFsTest::TestCwdOpts() {
+ TFsPath initialCwd = NFs::CurrentWorkingDirectory();
+ TFsPath subdir = "dir_forcwd_абвг";
+ NFs::MakeDirectory(subdir, NFs::FP_SECRET_FILE | NFs::FP_ALL_READ);
+ NFs::SetCurrentWorkingDirectory(subdir);
+ TFsPath newCwd = NFs::CurrentWorkingDirectory();
+
+ UNIT_ASSERT_EQUAL(newCwd.Fix(), (initialCwd / subdir).Fix());
+
+ NFs::SetCurrentWorkingDirectory("..");
+ TFsPath newCwd2 = NFs::CurrentWorkingDirectory();
+ UNIT_ASSERT_EQUAL(newCwd2.Fix(), initialCwd.Fix());
+ UNIT_ASSERT(NFs::Remove(subdir));
+}
+
+void TFsTest::TestEnsureExists() {
+ TFsPath fileExists = "tmp_file_абвг.txt";
+ TFsPath nonExists = "tmp2_file_абвг.txt";
+ {
+ NFs::Remove(fileExists);
+ NFs::Remove(nonExists);
+ TFile file(fileExists, CreateNew | WrOnly);
+ file.Write("1234567", 7);
+ }
+
+ UNIT_ASSERT_NO_EXCEPTION(NFs::EnsureExists(fileExists));
+ UNIT_ASSERT_EXCEPTION(NFs::EnsureExists(nonExists), TFileError);
+
+ TStringBuilder expected;
TString got;
- try {
+ try {
NFs::EnsureExists(nonExists);
expected << __LOCATION__;
- } catch (const TFileError& err) {
- got = err.what();
- }
- UNIT_ASSERT(got.Contains(expected));
- UNIT_ASSERT(got.Contains(NFs::CurrentWorkingDirectory()));
-
- UNIT_ASSERT(NFs::Remove(fileExists));
-}
+ } catch (const TFileError& err) {
+ got = err.what();
+ }
+ UNIT_ASSERT(got.Contains(expected));
+ UNIT_ASSERT(got.Contains(NFs::CurrentWorkingDirectory()));
+
+ UNIT_ASSERT(NFs::Remove(fileExists));
+}