1
0
mirror of https://github.com/golang/go synced 2024-11-22 10:04:42 -07:00

internal/testenv: add Executable

Tests commonly use code to get os.Executable value, and some cache the
resulting value.

To reduce code duplication, add a helper that does just that.

Change-Id: I9dd7eb24e24a3abd92be2b87227e823f0fca5cb3
Reviewed-on: https://go-review.googlesource.com/c/go/+/609301
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
Kir Kolyshkin 2024-08-29 18:51:10 -07:00 committed by Damien Neil
parent 7303a283c4
commit b4d4744059

View File

@ -62,7 +62,7 @@ var tryExec = sync.OnceValue(func() error {
// We know that this is a test executable. We should be able to run it with a
// no-op flag to check for overall exec support.
exe, err := os.Executable()
exe, err := exePath()
if err != nil {
return fmt.Errorf("can't probe for exec support: %w", err)
}
@ -71,6 +71,24 @@ var tryExec = sync.OnceValue(func() error {
return cmd.Run()
})
// Executable is a wrapper around [MustHaveExec] and [os.Executable].
// It returns the path name for the executable that started the current process,
// or skips the test if the current system can't start new processes,
// or fails the test if the path can not be obtained.
func Executable(t testing.TB) string {
MustHaveExec(t)
exe, err := exePath()
if err != nil {
t.Fatalf("os.Executable error: %v", err)
}
return exe
}
var exePath = sync.OnceValues(func() (string, error) {
return os.Executable()
})
var execPaths sync.Map // path -> error
// MustHaveExecPath checks that the current system can start the named executable