From bb4ea80befa5f91aa50ccb170e0abdcbc0d01627 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 8 Dec 2022 14:10:59 -0500 Subject: [PATCH] os: allow $HOME to not exist in TestUserHomeDir This seems like a cleaner fix for the situation Debian has patched around with https://sources.debian.org/patches/golang-1.19/1.19.3-1/0001-Disable-test-for-UserHomeDir.patch/ Tested with 'GOCACHE=$(go env GOCACHE) HOME=/home/nobody go test os'. Change-Id: I9fd00da38b86df2edfcd8cb87629e2875573903e Reviewed-on: https://go-review.googlesource.com/c/go/+/456126 Run-TryBot: Bryan Mills Reviewed-by: Russ Cox Reviewed-by: Rob Pike Reviewed-by: Ian Lance Taylor Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot --- src/os/file.go | 3 +++ src/os/os_test.go | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/os/file.go b/src/os/file.go index 3d71ac068e..c41adc7da6 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -486,6 +486,9 @@ func UserConfigDir() (string, error) { // On Unix, including macOS, it returns the $HOME environment variable. // On Windows, it returns %USERPROFILE%. // On Plan 9, it returns the $home environment variable. +// +// If the expected variable is not set in the environment, UserHomeDir +// returns either a platform-specific default value or a non-nil error. func UserHomeDir() (string, error) { env, enverr := "HOME", "$HOME" switch runtime.GOOS { diff --git a/src/os/os_test.go b/src/os/os_test.go index 7d39eb3e02..a8488a11f8 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -2639,10 +2639,20 @@ func TestUserHomeDir(t *testing.T) { t.Fatal("UserHomeDir returned an empty string but no error") } if err != nil { - t.Skipf("UserHomeDir failed: %v", err) + // UserHomeDir may return a non-nil error if the environment variable + // for the home directory is empty or unset in the environment. + t.Skipf("skipping: %v", err) } + fi, err := Stat(dir) if err != nil { + if os.IsNotExist(err) { + // The user's home directory has a well-defined location, but does not + // exist. (Maybe nothing has written to it yet? That could happen, for + // example, on minimal VM images used for CI testing.) + t.Log(err) + return + } t.Fatal(err) } if !fi.IsDir() { -- 2.50.0