Merge pull request #7138 from avagin:fuse-test

PiperOrigin-RevId: 426270625
This commit is contained in:
gVisor bot
2022-02-03 16:57:22 -08:00
5 changed files with 98 additions and 110 deletions
+70 -76
View File
@@ -2,83 +2,77 @@ load("//test/runner:defs.bzl", "syscall_test")
package(licenses = ["notice"])
# FIXME(b/190750110)
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:stat_test",
# )
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:statfs_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:open_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:release_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:mknod_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:symlink_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:readlink_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:mkdir_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:read_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:write_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:rmdir_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:readdir_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:create_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:unlink_test",
# )
#
# syscall_test(
# fuse = "True",
# test = "//test/fuse/linux:setstat_test",
# )
syscall_test(
fuse = "True",
test = "//test/fuse/linux:stat_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:mount_test",
test = "//test/fuse/linux:statfs_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:open_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:release_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:mknod_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:symlink_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:readlink_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:mkdir_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:read_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:write_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:rmdir_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:readdir_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:create_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:unlink_test",
)
syscall_test(
fuse = "True",
test = "//test/fuse/linux:setstat_test",
)
+2
View File
@@ -170,6 +170,8 @@ cc_library(
"//test/util:posix_error",
"//test/util:temp_path",
"//test/util:test_util",
"//test/util:thread_util",
"@com_google_absl//absl/memory",
"@com_google_absl//absl/strings:str_format",
],
)
-15
View File
@@ -66,13 +66,6 @@ TEST_F(CreateTest, CreateFile) {
iov_out = FuseGenerateIovecs(out_header, entry_payload, out_payload);
SetServerResponse(FUSE_CREATE, iov_out);
// kernfs generates a successive FUSE_OPEN after the file is created. Linux's
// fuse kernel module will not send this FUSE_OPEN after creat(2).
out_header.len =
sizeof(struct fuse_out_header) + sizeof(struct fuse_open_out);
iov_out = FuseGenerateIovecs(out_header, out_payload);
SetServerResponse(FUSE_OPEN, iov_out);
int fd;
TempUmask mask(new_mask);
EXPECT_THAT(fd = creat(test_file_path.c_str(), mode), SyscallSucceeds());
@@ -97,14 +90,6 @@ TEST_F(CreateTest, CreateFile) {
EXPECT_EQ(in_payload.umask, new_mask);
EXPECT_EQ(std::string(name.data()), test_file_name_);
// Get the successive FUSE_OPEN.
struct fuse_open_in in_payload_open;
iov_in = FuseGenerateIovecs(in_header, in_payload_open);
GetServerActualRequest(iov_in);
EXPECT_EQ(in_header.len, sizeof(in_header) + sizeof(in_payload_open));
EXPECT_EQ(in_header.opcode, FUSE_OPEN);
EXPECT_EQ(in_payload_open.flags, open_flags & O_ACCMODE);
EXPECT_THAT(close(fd), SyscallSucceeds());
// Skip the FUSE_RELEASE.
SkipServerActualRequest();
+23 -19
View File
@@ -30,6 +30,7 @@
#include "test/util/posix_error.h"
#include "test/util/temp_path.h"
#include "test/util/test_util.h"
#include "test/util/thread_util.h"
namespace gvisor {
namespace testing {
@@ -160,6 +161,8 @@ void FuseTest::MountFuse(const char* mountOpts) {
void FuseTest::UnmountFuse() {
EXPECT_THAT(umount(mount_point_.path().c_str()), SyscallSucceeds());
shutdown(sock_[0], SHUT_RDWR);
fuse_server_->Join();
// TODO(gvisor.dev/issue/3330): ensure the process is terminated successfully.
}
@@ -232,6 +235,9 @@ void FuseTest::ServerFuseLoop() {
ASSERT_EQ(fds[fd_idx].revents, POLL_IN);
if (fds[fd_idx].fd == sock_[1]) {
ServerHandleCommand();
if (sock_[1] == -1) {
return;
}
} else if (fds[fd_idx].fd == dev_fd_) {
ServerProcessFuseRequest();
}
@@ -246,23 +252,13 @@ void FuseTest::ServerFuseLoop() {
void FuseTest::SetUpFuseServer(const struct fuse_init_out* payload) {
ASSERT_THAT(socketpair(AF_UNIX, SOCK_STREAM, 0, sock_), SyscallSucceeds());
switch (fork()) {
case -1:
GTEST_FAIL();
return;
case 0:
break;
default:
ASSERT_THAT(close(sock_[1]), SyscallSucceeds());
WaitServerComplete();
return;
}
// Begin child thread, i.e. the FUSE server.
ASSERT_THAT(close(sock_[0]), SyscallSucceeds());
ServerCompleteWith(ServerConsumeFuseInit(payload).ok());
ServerFuseLoop();
_exit(0);
fuse_server_ = absl::make_unique<ScopedThread>([this, payload]() {
// Begin child thread, i.e. the FUSE server.
ServerCompleteWith(ServerConsumeFuseInit(payload).ok());
ServerFuseLoop();
shutdown(sock_[1], SHUT_RDWR);
});
WaitServerComplete();
}
void FuseTest::ServerSendData(uint32_t data) {
@@ -275,8 +271,16 @@ void FuseTest::ServerSendData(uint32_t data) {
// is required after the switch keyword.
void FuseTest::ServerHandleCommand() {
uint32_t cmd;
EXPECT_THAT(RetryEINTR(read)(sock_[1], &cmd, sizeof(cmd)),
SyscallSucceedsWithValue(sizeof(cmd)));
int ret;
EXPECT_THAT(ret = RetryEINTR(read)(sock_[1], &cmd, sizeof(cmd)),
SyscallSucceeds());
if (ret == 0) {
shutdown(sock_[1], SHUT_RDWR);
sock_[1] = -1;
return;
}
EXPECT_EQ(ret, sizeof(cmd));
switch (static_cast<FuseTestCmd>(cmd)) {
case FuseTestCmd::kSetResponse:
+3
View File
@@ -25,8 +25,10 @@
#include <vector>
#include "gtest/gtest.h"
#include "absl/memory/memory.h"
#include "test/util/posix_error.h"
#include "test/util/temp_path.h"
#include "test/util/thread_util.h"
namespace gvisor {
namespace testing {
@@ -236,6 +238,7 @@ class FuseTest : public ::testing::Test {
int dev_fd_;
int sock_[2];
std::unique_ptr<ScopedThread> fuse_server_;
uint64_t nodeid_;
std::unordered_map<std::string, FuseMemBlock> lookup_map_;