summaryrefslogtreecommitdiffhomepage
path: root/test/fsstress
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2021-07-20 22:18:47 -0700
committergVisor bot <gvisor-bot@google.com>2021-07-20 22:21:24 -0700
commit0184f1a662b893a1634e9b2cf3adff57971b668c (patch)
tree01b67e01182728a2fb2ca97f83d6ab0f955f2d65 /test/fsstress
parent990cd1a950955e25dc8935a6aca61906307a0851 (diff)
Add fsstress test to goferfs
PiperOrigin-RevId: 385937353
Diffstat (limited to 'test/fsstress')
-rw-r--r--test/fsstress/BUILD6
-rw-r--r--test/fsstress/fsstress_test.go53
2 files changed, 56 insertions, 3 deletions
diff --git a/test/fsstress/BUILD b/test/fsstress/BUILD
index e74e7fff2..402445a7e 100644
--- a/test/fsstress/BUILD
+++ b/test/fsstress/BUILD
@@ -14,7 +14,11 @@ go_test(
"manual",
"local",
],
- deps = ["//pkg/test/dockerutil"],
+ deps = [
+ "//pkg/test/dockerutil",
+ "//pkg/test/testutil",
+ "@com_github_docker_docker//api/types/mount:go_default_library",
+ ],
)
go_library(
diff --git a/test/fsstress/fsstress_test.go b/test/fsstress/fsstress_test.go
index d53c8f90d..d9513c42c 100644
--- a/test/fsstress/fsstress_test.go
+++ b/test/fsstress/fsstress_test.go
@@ -18,6 +18,8 @@ package fsstress
import (
"context"
"flag"
+ "fmt"
+ "io/ioutil"
"math/rand"
"os"
"strconv"
@@ -25,7 +27,9 @@ import (
"testing"
"time"
+ "github.com/docker/docker/api/types/mount"
"gvisor.dev/gvisor/pkg/test/dockerutil"
+ "gvisor.dev/gvisor/pkg/test/testutil"
)
func init() {
@@ -42,6 +46,7 @@ type config struct {
operations string
processes string
target string
+ mounts []mount.Mount
}
func fsstress(t *testing.T, conf config) {
@@ -52,8 +57,19 @@ func fsstress(t *testing.T, conf config) {
const image = "basic/fsstress"
seed := strconv.FormatUint(uint64(rand.Uint32()), 10)
args := []string{"-d", conf.target, "-n", conf.operations, "-p", conf.processes, "-s", seed, "-X"}
- t.Logf("Repro: docker run --rm --runtime=%s gvisor.dev/images/%s %s", dockerutil.Runtime(), image, strings.Join(args, " "))
- out, err := d.Run(ctx, dockerutil.RunOpts{Image: image}, args...)
+ opts := dockerutil.RunOpts{
+ Image: image,
+ Mounts: conf.mounts,
+ }
+ var mounts string
+ if len(conf.mounts) > 0 {
+ mounts = " -v "
+ for _, m := range conf.mounts {
+ mounts += fmt.Sprintf("-v <any_dir>:%s", m.Target)
+ }
+ }
+ t.Logf("Repro: docker run --rm --runtime=%s%s gvisor.dev/images/%s %s", dockerutil.Runtime(), mounts, image, strings.Join(args, " "))
+ out, err := d.Run(ctx, opts, args...)
if err != nil {
t.Fatalf("docker run failed: %v\noutput: %s", err, out)
}
@@ -64,6 +80,39 @@ func fsstress(t *testing.T, conf config) {
}
}
+func TestFsstressGofer(t *testing.T) {
+ // This takes between 30-60s to run on my machine. Adjust as needed.
+ cfg := config{
+ operations: "500",
+ processes: "20",
+ target: "/test",
+ }
+ fsstress(t, cfg)
+}
+
+func TestFsstressGoferShared(t *testing.T) {
+ dir, err := ioutil.TempDir(testutil.TmpDir(), "fsstress")
+ if err != nil {
+ t.Fatalf("ioutil.TempDir() failed: %v", err)
+ }
+ defer os.RemoveAll(dir)
+
+ // This takes between 30-60s to run on my machine. Adjust as needed.
+ cfg := config{
+ operations: "500",
+ processes: "20",
+ target: "/test",
+ mounts: []mount.Mount{
+ {
+ Source: dir,
+ Target: "/test",
+ Type: "bind",
+ },
+ },
+ }
+ fsstress(t, cfg)
+}
+
func TestFsstressTmpfs(t *testing.T) {
// This takes between 10s to run on my machine. Adjust as needed.
cfg := config{