summaryrefslogtreecommitdiffhomepage
path: root/test/fuse/linux/fuse_base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/fuse/linux/fuse_base.cc')
-rw-r--r--test/fuse/linux/fuse_base.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/test/fuse/linux/fuse_base.cc b/test/fuse/linux/fuse_base.cc
index 98b4e1466..e3c6b585c 100644
--- a/test/fuse/linux/fuse_base.cc
+++ b/test/fuse/linux/fuse_base.cc
@@ -129,7 +129,8 @@ void FuseTest::SkipServerActualRequest() {
// Sends the `kSetInodeLookup` command, expected mode, and the path of the
// inode to create under the mount point.
-void FuseTest::SetServerInodeLookup(const std::string& path, mode_t mode) {
+void FuseTest::SetServerInodeLookup(const std::string& path, mode_t mode,
+ uint64_t size) {
uint32_t cmd = static_cast<uint32_t>(FuseTestCmd::kSetInodeLookup);
EXPECT_THAT(RetryEINTR(write)(sock_[0], &cmd, sizeof(cmd)),
SyscallSucceedsWithValue(sizeof(cmd)));
@@ -137,6 +138,9 @@ void FuseTest::SetServerInodeLookup(const std::string& path, mode_t mode) {
EXPECT_THAT(RetryEINTR(write)(sock_[0], &mode, sizeof(mode)),
SyscallSucceedsWithValue(sizeof(mode)));
+ EXPECT_THAT(RetryEINTR(write)(sock_[0], &size, sizeof(size)),
+ SyscallSucceedsWithValue(sizeof(size)));
+
// Pad 1 byte for null-terminate c-string.
EXPECT_THAT(RetryEINTR(write)(sock_[0], path.c_str(), path.size() + 1),
SyscallSucceedsWithValue(path.size() + 1));
@@ -144,10 +148,10 @@ void FuseTest::SetServerInodeLookup(const std::string& path, mode_t mode) {
WaitServerComplete();
}
-void FuseTest::MountFuse() {
+void FuseTest::MountFuse(const char* mountOpts) {
EXPECT_THAT(dev_fd_ = open("/dev/fuse", O_RDWR), SyscallSucceeds());
- std::string mount_opts = absl::StrFormat("fd=%d,%s", dev_fd_, kMountOpts);
+ std::string mount_opts = absl::StrFormat("fd=%d,%s", dev_fd_, mountOpts);
mount_point_ = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
EXPECT_THAT(mount("fuse", mount_point_.path().c_str(), "fuse",
MS_NODEV | MS_NOSUID, mount_opts.c_str()),
@@ -311,11 +315,15 @@ void FuseTest::ServerHandleCommand() {
// request with this specific path comes in.
void FuseTest::ServerReceiveInodeLookup() {
mode_t mode;
+ uint64_t size;
std::vector<char> buf(FUSE_MIN_READ_BUFFER);
EXPECT_THAT(RetryEINTR(read)(sock_[1], &mode, sizeof(mode)),
SyscallSucceedsWithValue(sizeof(mode)));
+ EXPECT_THAT(RetryEINTR(read)(sock_[1], &size, sizeof(size)),
+ SyscallSucceedsWithValue(sizeof(size)));
+
EXPECT_THAT(RetryEINTR(read)(sock_[1], buf.data(), buf.size()),
SyscallSucceeds());
@@ -332,6 +340,9 @@ void FuseTest::ServerReceiveInodeLookup() {
// comply with the unqiueness of different path.
++nodeid_;
+ // Set the size.
+ out_payload.attr.size = size;
+
memcpy(buf.data(), &out_header, sizeof(out_header));
memcpy(buf.data() + sizeof(out_header), &out_payload, sizeof(out_payload));
lookups_.AddMemBlock(FUSE_LOOKUP, buf.data(), out_len);