diff options
author | 2017-01-12 15:15:16 +0000 | |
---|---|---|
committer | 2017-01-12 16:55:52 +0000 | |
commit | 326a6a588e5c25a707697bf153bbef36071096ff (patch) | |
tree | 84dac8f3ee808f1c05e7e68ea85ed3ca7e852629 /src/test/cpp/util/file_windows_test.cc | |
parent | 117197000692fd7391962ef968228a31bf97399a (diff) |
Bazel client, Windows: implement CanAccess methods
See https://github.com/bazelbuild/bazel/issues/2107
--
PiperOrigin-RevId: 144321891
MOS_MIGRATED_REVID=144321891
Diffstat (limited to 'src/test/cpp/util/file_windows_test.cc')
-rw-r--r-- | src/test/cpp/util/file_windows_test.cc | 73 |
1 files changed, 61 insertions, 12 deletions
diff --git a/src/test/cpp/util/file_windows_test.cc b/src/test/cpp/util/file_windows_test.cc index 5ed7a77d3d..5d9f0092cc 100644 --- a/src/test/cpp/util/file_windows_test.cc +++ b/src/test/cpp/util/file_windows_test.cc @@ -32,10 +32,11 @@ using std::wstring; void ResetMsysRootForTesting(); string NormalizeWindowsPath(string path); -static string GetTestTmpDir() { +static void GetTestTmpDir(string* result) { char buf[MAX_PATH] = {0}; DWORD len = GetEnvironmentVariableA("TEST_TMPDIR", buf, MAX_PATH); - return string(buf); + result->assign(buf); + ASSERT_LT(0, result->size()); } TEST(FileTest, TestNormalizeWindowsPath) { @@ -192,9 +193,8 @@ TEST(FileTest, TestAsShortWindowsPath) { ASSERT_TRUE(AsShortWindowsPath("nul", &actual)); ASSERT_EQ(string("NUL"), actual); - string tmpdir(GetTestTmpDir()); - ASSERT_LT(0, tmpdir.size()); - + string tmpdir; + GetTestTmpDir(&tmpdir); string short_tmpdir; ASSERT_TRUE(AsShortWindowsPath(tmpdir, &short_tmpdir)); ASSERT_LT(0, short_tmpdir.size()); @@ -266,8 +266,8 @@ TEST(FileTest, TestPathExistsWindows) { ASSERT_TRUE(PathExists("/dev/null")); ASSERT_TRUE(PathExists("Nul")); - string tmpdir(GetTestTmpDir()); - ASSERT_LT(0, tmpdir.size()); + string tmpdir; + GetTestTmpDir(&tmpdir); ASSERT_TRUE(PathExists(tmpdir)); // Create a fake msys root. We'll also use it as a junction target. @@ -309,8 +309,8 @@ TEST(FileTest, TestIsDirectory) { ASSERT_FALSE(IsDirectory("/dev/null")); ASSERT_FALSE(IsDirectory("Nul")); - string tmpdir(GetTestTmpDir()); - ASSERT_LT(0, tmpdir.size()); + string tmpdir; + GetTestTmpDir(&tmpdir); ASSERT_TRUE(IsDirectory(tmpdir)); ASSERT_TRUE(IsDirectory("C:\\")); ASSERT_TRUE(IsDirectory("C:/")); @@ -346,9 +346,8 @@ TEST(FileTest, TestUnlinkPath) { ASSERT_FALSE(UnlinkPath("/dev/null")); ASSERT_FALSE(UnlinkPath("Nul")); - string tmpdir(GetTestTmpDir()); - ASSERT_LT(0, tmpdir.size()); - ASSERT_TRUE(PathExists(tmpdir)); + string tmpdir; + GetTestTmpDir(&tmpdir); // Create a directory under `tempdir`, a file inside it, and a junction // pointing to it. @@ -408,4 +407,54 @@ TEST(FileTest, TestMakeDirectories) { ASSERT_EQ(0, rmdir(JoinPath(tmpdir, "dir4").c_str())); } +TEST(FileTest, CanAccess) { + ASSERT_FALSE(CanReadFile("C:/windows/this/should/not/exist/mkay")); + ASSERT_FALSE(CanExecuteFile("C:/this/should/not/exist/mkay")); + ASSERT_FALSE(CanAccessDirectory("C:/this/should/not/exist/mkay")); + + ASSERT_FALSE(CanReadFile("non.existent")); + ASSERT_FALSE(CanExecuteFile("non.existent")); + ASSERT_FALSE(CanAccessDirectory("non.existent")); + + string tmpdir; + GetTestTmpDir(&tmpdir); + string dir(JoinPath(tmpdir, "canaccesstest")); + ASSERT_EQ(0, mkdir(dir.c_str())); + + ASSERT_FALSE(CanReadFile(dir)); + ASSERT_FALSE(CanExecuteFile(dir)); + ASSERT_TRUE(CanAccessDirectory(dir)); + + string junc(JoinPath(tmpdir, "junc1")); + RunCommand(string("cmd.exe /C mklink /J \"") + junc + "\" \"" + dir + + "\" >NUL 2>NUL"); + ASSERT_FALSE(CanReadFile(junc)); + ASSERT_FALSE(CanExecuteFile(junc)); + ASSERT_TRUE(CanAccessDirectory(junc)); + + string file(JoinPath(dir, "foo.txt")); + FILE* fh = fopen(file.c_str(), "wt"); + ASSERT_NE(nullptr, fh); + ASSERT_LT(0, fprintf(fh, "hello")); + fclose(fh); + + ASSERT_TRUE(CanReadFile(file)); + ASSERT_FALSE(CanExecuteFile(file)); + ASSERT_FALSE(CanAccessDirectory(file)); + + ASSERT_TRUE(CanReadFile(JoinPath(junc, "foo.txt"))); + ASSERT_FALSE(CanExecuteFile(JoinPath(junc, "foo.txt"))); + ASSERT_FALSE(CanAccessDirectory(JoinPath(junc, "foo.txt"))); + + string file2(JoinPath(dir, "foo.exe")); + ASSERT_EQ(0, rename(file.c_str(), file2.c_str())); + ASSERT_TRUE(CanReadFile(file2)); + ASSERT_TRUE(CanExecuteFile(file2)); + ASSERT_FALSE(CanAccessDirectory(file2)); + + ASSERT_EQ(0, unlink(file2.c_str())); + ASSERT_EQ(0, rmdir(junc.c_str())); + ASSERT_EQ(0, rmdir(dir.c_str())); +} + } // namespace blaze_util |