Enable more FUSE syscall tests.

Several syscall tests are working after refactoring inode operations.
This change also renames the use_fusefs test attribute to add_fusefs,
since that more accurately describes what the attribute does.

PiperOrigin-RevId: 506692314
This commit is contained in:
Lucas Manning
2023-02-02 12:27:24 -08:00
committed by gVisor bot
parent b932fb1fb6
commit fc69a401df
5 changed files with 34 additions and 17 deletions
+7 -6
View File
@@ -72,7 +72,7 @@ def _syscall_test(
iouring = False,
container = None,
one_sandbox = True,
use_fusefs = False,
fusefs = False,
**kwargs):
# Prepend "runsc" to non-native platform names.
full_platform = platform if platform == "native" else "runsc_" + platform
@@ -85,7 +85,7 @@ def _syscall_test(
name += "_overlay"
if network != "none":
name += "_" + network + "net"
if use_fusefs:
if fusefs:
name += "_fuse"
# Apply all tags.
@@ -134,7 +134,7 @@ def _syscall_test(
"--platform-support=" + platform_support,
"--network=" + network,
"--use-tmpfs=" + str(use_tmpfs),
"--use-fusefs=" + str(use_fusefs),
"--fusefs=" + str(fusefs),
"--file-access=" + file_access,
"--overlay=" + str(overlay),
"--add-host-communication=" + str(add_host_communication),
@@ -167,7 +167,7 @@ def all_platforms():
def syscall_test(
test,
use_tmpfs = False,
use_fusefs = False,
add_fusefs = False,
add_overlay = False,
add_host_communication = False,
add_hostinet = False,
@@ -183,6 +183,7 @@ def syscall_test(
Args:
test: the test target.
use_tmpfs: use tmpfs in the defined tests.
add_fusefs: add a fusefs test.
add_overlay: add an overlay test.
add_host_communication: setup UDS and pipe external communication for tests.
add_hostinet: add a hostinet test.
@@ -268,12 +269,12 @@ def syscall_test(
file_access = "shared",
**kwargs
)
if use_fusefs:
if add_fusefs:
_syscall_test(
test = test,
platform = default_platform,
use_tmpfs = True,
use_fusefs = True,
fusefs = True,
add_host_communication = add_host_communication,
tags = platforms.get(default_platform, []) + tags,
debug = debug,
+1
View File
@@ -11,5 +11,6 @@ go_binary(
"//runsc/specutils",
"@com_github_hanwen_go_fuse_v2//fs:go_default_library",
"@com_github_hanwen_go_fuse_v2//fuse:go_default_library",
"@org_golang_x_sys//unix:go_default_library",
],
)
+4 -3
View File
@@ -23,6 +23,7 @@ import (
"github.com/hanwen/go-fuse/v2/fs"
"github.com/hanwen/go-fuse/v2/fuse"
"golang.org/x/sys/unix"
"gvisor.dev/gvisor/pkg/log"
"gvisor.dev/gvisor/runsc/specutils"
)
@@ -34,20 +35,20 @@ func main() {
os.Exit(1)
}
opts := &fuse.MountOptions{DirectMount: true, Debug: true, Options: []string{"default_permissions"}}
rawFS := fs.NewNodeFS(loopbackRoot, &fs.Options{Logger: golog.Default()})
rawFS := fs.NewNodeFS(loopbackRoot, &fs.Options{NullPermissions: true, Logger: golog.Default()})
server, err := fuse.NewServer(rawFS, "/tmp", opts)
if err != nil {
log.Warningf("could not create fuse server: %v", err)
os.Exit(1)
}
// Clear umask so that it doesn't affect the mode bits twice.
unix.Umask(0)
go server.Serve()
defer func() {
server.Unmount()
server.Wait()
}()
// TODO(b/267200022): Investigate why gofuse pollHack sometimes fails with
// EINTR.
if _, _, err := specutils.RetryEintr(func() (uintptr, uintptr, error) {
if err := server.WaitMount(); err != nil {
return 0, 0, err
+3 -3
View File
@@ -49,7 +49,7 @@ var (
platformSupport = flag.String("platform-support", "", "String passed to the test as GVISOR_PLATFORM_SUPPORT environment variable. Used to determine which syscall tests are expected to work with the current platform.")
network = flag.String("network", "none", "network stack to run on (sandbox, host, none)")
useTmpfs = flag.Bool("use-tmpfs", false, "mounts tmpfs for /tmp")
useFUSEfs = flag.Bool("use-fusefs", false, "mounts a fusefs for /tmp")
fusefs = flag.Bool("fusefs", false, "mounts a fusefs for /tmp")
fileAccess = flag.String("file-access", "exclusive", "mounts root in exclusive or shared mode")
overlay = flag.Bool("overlay", false, "wrap filesystem mounts with writable tmpfs overlay")
container = flag.Bool("container", false, "run tests in their own namespaces (user ns, network ns, etc), pretending to be root. Implicitly enabled if network=host, or if using network namespaces")
@@ -378,7 +378,7 @@ func runTestCaseRunsc(testBin string, tc *gtest.TestCase, args []string, t *test
args = tc.Args()
}
var spec *specs.Spec
if *useFUSEfs {
if *fusefs {
fuseServer, err := testutil.FindFile("test/runner/fuse/fuse")
if err != nil {
fatalf("cannot find fuse: %v", err)
@@ -433,7 +433,7 @@ func runTestCaseRunsc(testBin string, tc *gtest.TestCase, args []string, t *test
testTmpDir = "/tmp"
}
}
if *useFUSEfs {
if *fusefs {
// In fuse tests, the fuse server forwards all filesystem ops from /tmp
// to /fuse.
spec.Mounts = append(spec.Mounts, specs.Mount{
+19 -5
View File
@@ -63,11 +63,13 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:chdir_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:chmod_test",
)
@@ -126,9 +128,9 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:creat_test",
use_fusefs = True,
)
syscall_test(
@@ -184,6 +186,7 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:fchdir_test",
)
@@ -296,6 +299,7 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:lseek_test",
)
@@ -321,14 +325,15 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:mkdir_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:mknod_test",
use_fusefs = True,
)
syscall_test(
@@ -378,15 +383,16 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:open_create_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
shard_count = more_shards,
test = "//test/syscalls/linux:open_test",
use_fusefs = True,
)
syscall_test(
@@ -441,16 +447,19 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:pread64_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:preadv_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:preadv2_test",
)
@@ -506,11 +515,13 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:pwritev2_test",
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:pwrite64_test",
)
@@ -529,6 +540,7 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:read_test",
)
@@ -546,6 +558,7 @@ syscall_test(
syscall_test(
size = "medium",
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:readv_test",
)
@@ -914,16 +927,16 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:statfs_test",
use_fusefs = True,
use_tmpfs = True, # Test specifically relies on TEST_TMPDIR to be tmpfs.
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:stat_test",
use_fusefs = True,
)
syscall_test(
@@ -937,6 +950,7 @@ syscall_test(
)
syscall_test(
add_fusefs = True,
add_overlay = True,
test = "//test/syscalls/linux:symlink_test",
)