summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2021-05-27 19:51:54 -0700
committergVisor bot <gvisor-bot@google.com>2021-05-27 19:55:03 -0700
commit394c6089c3b8700164756677f53314d165f8d383 (patch)
tree61e947c2f697f750851fbd335c7c992fabc7a290
parente8fc815b6ef58b6faa136ef239f89ec98a8e55b4 (diff)
Fix test_app task-tree
Executing `select {}` to wait forever triggers Go runtime deadlock detection and kills the child, causing the number actual processes be less than expected. PiperOrigin-RevId: 376298799
-rw-r--r--pkg/test/testutil/BUILD1
-rw-r--r--pkg/test/testutil/testutil.go2
-rw-r--r--test/cmd/test_app/test_app.go20
3 files changed, 16 insertions, 7 deletions
diff --git a/pkg/test/testutil/BUILD b/pkg/test/testutil/BUILD
index a789c246e..7ff13cf12 100644
--- a/pkg/test/testutil/BUILD
+++ b/pkg/test/testutil/BUILD
@@ -12,6 +12,7 @@ go_library(
],
visibility = ["//:sandbox"],
deps = [
+ "//pkg/sentry/watchdog",
"//pkg/sync",
"//runsc/config",
"//runsc/specutils",
diff --git a/pkg/test/testutil/testutil.go b/pkg/test/testutil/testutil.go
index 663c83679..f6a3e34c7 100644
--- a/pkg/test/testutil/testutil.go
+++ b/pkg/test/testutil/testutil.go
@@ -42,6 +42,7 @@ import (
"github.com/cenkalti/backoff"
specs "github.com/opencontainers/runtime-spec/specs-go"
"golang.org/x/sys/unix"
+ "gvisor.dev/gvisor/pkg/sentry/watchdog"
"gvisor.dev/gvisor/pkg/sync"
"gvisor.dev/gvisor/runsc/config"
"gvisor.dev/gvisor/runsc/specutils"
@@ -184,6 +185,7 @@ func TestConfig(t *testing.T) *config.Config {
conf.Network = config.NetworkNone
conf.Strace = true
conf.TestOnlyAllowRunAsCurrentUserWithoutChroot = true
+ conf.WatchdogAction = watchdog.Panic
return conf
}
diff --git a/test/cmd/test_app/test_app.go b/test/cmd/test_app/test_app.go
index 3ba4f38f8..2d08ce2db 100644
--- a/test/cmd/test_app/test_app.go
+++ b/test/cmd/test_app/test_app.go
@@ -160,14 +160,17 @@ func (c *taskTree) SetFlags(f *flag.FlagSet) {
// Execute implements subcommands.Command.
func (c *taskTree) Execute(ctx context.Context, f *flag.FlagSet, args ...interface{}) subcommands.ExitStatus {
- stop := testutil.StartReaper()
- defer stop()
-
if c.depth == 0 {
log.Printf("Child sleeping, PID: %d\n", os.Getpid())
- select {}
+ for {
+ time.Sleep(time.Hour)
+ }
}
- log.Printf("Parent %d sleeping, PID: %d\n", c.depth, os.Getpid())
+
+ log.Printf("Parent %d creating %d children, PID: %d\n", c.depth, c.width, os.Getpid())
+
+ stop := testutil.StartReaper()
+ defer stop()
var cmds []*exec.Cmd
for i := 0; i < c.width; i++ {
@@ -175,7 +178,7 @@ func (c *taskTree) Execute(ctx context.Context, f *flag.FlagSet, args ...interfa
"/proc/self/exe", c.Name(),
"--depth", strconv.Itoa(c.depth-1),
"--width", strconv.Itoa(c.width),
- "--pause", strconv.FormatBool(c.pause))
+ fmt.Sprintf("--pause=%t", c.pause))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
@@ -190,7 +193,10 @@ func (c *taskTree) Execute(ctx context.Context, f *flag.FlagSet, args ...interfa
}
if c.pause {
- select {}
+ log.Printf("Parent %d sleeping, PID: %d\n", c.depth, os.Getpid())
+ for {
+ time.Sleep(time.Hour)
+ }
}
return subcommands.ExitSuccess