From: Bryan C. Mills Date: Thu, 30 Jun 2022 17:30:48 +0000 (-0400) Subject: cmd/go: add a 'sleep' command for script tests X-Git-Tag: go1.19rc1~24 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=84db00ffd1;p=gostls13.git cmd/go: add a 'sleep' command for script tests Due to mtime skew we don't index mutable packages with an mtime younger than 2 seconds. In order to test indexed packages reliably, we want to be able to sleep long enough for the files in the package to be cached. (As an alternative we could instead use os.Chtimes to fake old enough timestamps, but sleeping keeps the tests more realistic.) For #53586. Change-Id: I1873f47c55a72d928451593b8c989f0092a557db Reviewed-on: https://go-review.googlesource.com/c/go/+/415474 Auto-Submit: Bryan Mills Run-TryBot: Bryan Mills Reviewed-by: Russ Cox TryBot-Result: Gopher Robot --- diff --git a/src/cmd/go/script_test.go b/src/cmd/go/script_test.go index 3ad0608725..5e82929f19 100644 --- a/src/cmd/go/script_test.go +++ b/src/cmd/go/script_test.go @@ -521,6 +521,7 @@ var scriptCmds = map[string]func(*testScript, simpleStatus, []string){ "mv": (*testScript).cmdMv, "rm": (*testScript).cmdRm, "skip": (*testScript).cmdSkip, + "sleep": (*testScript).cmdSleep, "stale": (*testScript).cmdStale, "stderr": (*testScript).cmdStderr, "stdout": (*testScript).cmdStdout, @@ -921,6 +922,21 @@ func (ts *testScript) cmdSkip(want simpleStatus, args []string) { ts.t.Skip() } +// sleep sleeps for the given duration +func (ts *testScript) cmdSleep(want simpleStatus, args []string) { + if len(args) != 1 { + ts.fatalf("usage: sleep duration") + } + d, err := time.ParseDuration(args[0]) + if err != nil { + ts.fatalf("sleep: %v", err) + } + if want != success { + ts.fatalf("unsupported: %v sleep", want) + } + time.Sleep(d) +} + // stale checks that the named build targets are stale. func (ts *testScript) cmdStale(want simpleStatus, args []string) { if len(args) == 0 { diff --git a/src/cmd/go/testdata/script/README b/src/cmd/go/testdata/script/README index 85e575d56e..c575bff1a5 100644 --- a/src/cmd/go/testdata/script/README +++ b/src/cmd/go/testdata/script/README @@ -176,6 +176,11 @@ The commands are: - skip [message] Mark the test skipped, including the message if given. +- sleep duration + Sleep for the given duration (a time.Duration string). + (Tests should generally poll instead of sleeping, but sleeping may sometimes + be necessary, for example, to ensure that modified files have unique mtimes.) + - [!] stale path... The packages named by the path arguments must (or must not) be reported as "stale" by the go command.