summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/syscalls/BUILD11
-rw-r--r--test/syscalls/build_defs.bzl11
-rw-r--r--test/syscalls/linux/inotify.cc6
-rw-r--r--test/syscalls/syscall_test_runner.go13
4 files changed, 28 insertions, 13 deletions
diff --git a/test/syscalls/BUILD b/test/syscalls/BUILD
index c46ac77f7..8c391c8a6 100644
--- a/test/syscalls/BUILD
+++ b/test/syscalls/BUILD
@@ -42,6 +42,7 @@ syscall_test(test = "//test/syscalls/linux:chmod_test")
syscall_test(
size = "medium",
test = "//test/syscalls/linux:chown_test",
+ use_tmpfs = True, # chwon tests require gofer to be running as root.
)
syscall_test(test = "//test/syscalls/linux:chroot_test")
@@ -137,7 +138,10 @@ syscall_test(
syscall_test(test = "//test/syscalls/linux:kill_test")
-syscall_test(test = "//test/syscalls/linux:link_test")
+syscall_test(
+ test = "//test/syscalls/linux:link_test",
+ use_tmpfs = True, # gofer needs CAP_DAC_READ_SEARCH to use AT_EMPTY_PATH with linkat(2)
+)
syscall_test(test = "//test/syscalls/linux:lseek_test")
@@ -151,7 +155,10 @@ syscall_test(test = "//test/syscalls/linux:mincore_test")
syscall_test(test = "//test/syscalls/linux:mkdir_test")
-syscall_test(test = "//test/syscalls/linux:mknod_test")
+syscall_test(
+ test = "//test/syscalls/linux:mknod_test",
+ use_tmpfs = True, # mknod is not supported over gofer.
+)
syscall_test(
size = "medium",
diff --git a/test/syscalls/build_defs.bzl b/test/syscalls/build_defs.bzl
index 854684d1c..6bcb7adf7 100644
--- a/test/syscalls/build_defs.bzl
+++ b/test/syscalls/build_defs.bzl
@@ -2,12 +2,12 @@
# syscall_test is a macro that will create targets to run the given test target
# on the host (native) and runsc.
-def syscall_test(test, shard_count = 5, size = "small"):
- _syscall_test(test, shard_count, size, "native")
- _syscall_test(test, shard_count, size, "kvm")
- _syscall_test(test, shard_count, size, "ptrace")
+def syscall_test(test, shard_count = 5, size = "small", use_tmpfs = False):
+ _syscall_test(test, shard_count, size, "native", False)
+ _syscall_test(test, shard_count, size, "kvm", use_tmpfs)
+ _syscall_test(test, shard_count, size, "ptrace", use_tmpfs)
-def _syscall_test(test, shard_count, size, platform):
+def _syscall_test(test, shard_count, size, platform, use_tmpfs):
test_name = test.split(":")[1]
# Prepend "runsc" to non-native platform names.
@@ -39,6 +39,7 @@ def _syscall_test(test, shard_count, size, platform):
# Arguments are passed directly to syscall_test_runner binary.
"--test-name=" + test_name,
"--platform=" + platform,
+ "--use-tmpfs=" + str(use_tmpfs),
"--debug=false",
"--strace=false",
"--parallel=true",
diff --git a/test/syscalls/linux/inotify.cc b/test/syscalls/linux/inotify.cc
index 167ca44a8..5c66db7c8 100644
--- a/test/syscalls/linux/inotify.cc
+++ b/test/syscalls/linux/inotify.cc
@@ -1222,7 +1222,8 @@ TEST(Inotify, LinkGeneratesAttribAndCreateEvents) {
const int rc = link(file1.path().c_str(), link1.path().c_str());
// link(2) is only supported on tmpfs in the sandbox.
- SKIP_IF(IsRunningOnGvisor() && rc != 0 && errno == EPERM);
+ SKIP_IF(IsRunningOnGvisor() && rc != 0 &&
+ (errno == EPERM || errno == ENOENT));
ASSERT_THAT(rc, SyscallSucceeds());
const std::vector<Event> events =
@@ -1238,7 +1239,8 @@ TEST(Inotify, HardlinksReuseSameWatch) {
TempPath link1(root.path() + "/link1");
const int rc = link(file1.path().c_str(), link1.path().c_str());
// link(2) is only supported on tmpfs in the sandbox.
- SKIP_IF(IsRunningOnGvisor() && rc != 0 && errno == EPERM);
+ SKIP_IF(IsRunningOnGvisor() && rc != 0 &&
+ (errno == EPERM || errno == ENOENT));
ASSERT_THAT(rc, SyscallSucceeds());
const FileDescriptor fd =
diff --git a/test/syscalls/syscall_test_runner.go b/test/syscalls/syscall_test_runner.go
index e5c2358a0..e8593ec73 100644
--- a/test/syscalls/syscall_test_runner.go
+++ b/test/syscalls/syscall_test_runner.go
@@ -45,6 +45,7 @@ var (
debug = flag.Bool("debug", false, "enable debug logs")
strace = flag.Bool("strace", false, "enable strace logs")
platform = flag.String("platform", "ptrace", "platform to run on")
+ useTmpfs = flag.Bool("use-tmpfs", false, "mounts tmpfs for /tmp")
parallel = flag.Bool("parallel", false, "run tests in parallel")
runscPath = flag.String("runsc", "", "path to runsc binary")
)
@@ -109,10 +110,14 @@ func runTestCaseRunsc(testBin string, tc gtest.TestCase, t *testing.T) {
// write to the rootfs, and expect EACCES, not EROFS.
spec.Root.Readonly = false
- // Forces '/tmp' to be mounted as tmpfs, otherwise test that rely on features
- // available in gVisor's tmpfs and not gofers, may fail.
- spec.Mounts = []specs.Mount{
- {Destination: "/tmp", Type: "tmpfs"},
+ // Test spec comes with pre-defined mounts that we don't want. Reset it.
+ spec.Mounts = nil
+ if *useTmpfs {
+ // Forces '/tmp' to be mounted as tmpfs, otherwise test that rely on
+ // features available in gVisor's tmpfs and not gofers, may fail.
+ spec.Mounts = []specs.Mount{
+ {Destination: "/tmp", Type: "tmpfs"},
+ }
}
// Set environment variable that indicates we are