diff options
| author | Alan Somers <asomers@FreeBSD.org> | 2024-12-23 20:26:11 +0000 |
|---|---|---|
| committer | Alan Somers <asomers@FreeBSD.org> | 2024-12-23 20:37:19 +0000 |
| commit | 969d1aa4dbfcbccd8de965f7761203208bf04e46 (patch) | |
| tree | a4d3f7ae56599c679df2fc31be304094e0bb5e98 /tests | |
| parent | 003818aca4cdda47adef808a56d48003aa514029 (diff) | |
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/sys/fs/fusefs/nfs.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/sys/fs/fusefs/nfs.cc b/tests/sys/fs/fusefs/nfs.cc index 79fead8e77cb..27ffc8f5cbc1 100644 --- a/tests/sys/fs/fusefs/nfs.cc +++ b/tests/sys/fs/fusefs/nfs.cc @@ -144,6 +144,36 @@ TEST_F(Fhstat, lookup_dot) EXPECT_EQ(mode, sb.st_mode); } +/* Gracefully handle failures to lookup ".". */ +TEST_F(Fhstat, lookup_dot_error) +{ + const char FULLPATH[] = "mountpoint/some_dir/."; + const char RELDIRPATH[] = "some_dir"; + fhandle_t fhp; + struct stat sb; + const uint64_t ino = 42; + const mode_t mode = S_IFDIR | 0755; + const uid_t uid = 12345; + + EXPECT_LOOKUP(FUSE_ROOT_ID, RELDIRPATH) + .WillOnce(Invoke(ReturnImmediate([=](auto in __unused, auto& out) { + SET_OUT_HEADER_LEN(out, entry); + out.body.entry.attr.mode = mode; + out.body.entry.nodeid = ino; + out.body.entry.generation = 1; + out.body.entry.attr.uid = uid; + out.body.entry.attr_valid = UINT64_MAX; + out.body.entry.entry_valid = 0; + }))); + + EXPECT_LOOKUP(ino, ".") + .WillOnce(Invoke(ReturnErrno(EDOOFUS))); + + ASSERT_EQ(0, getfh(FULLPATH, &fhp)) << strerror(errno); + ASSERT_EQ(-1, fhstat(&fhp, &sb)); + EXPECT_EQ(EDOOFUS, errno); +} + /* Use a file handle whose entry is still cached */ TEST_F(Fhstat, cached) { |
