]> Cypherpunks repositories - gostls13.git/commitdiff
os: allow $HOME to not exist in TestUserHomeDir
authorBryan C. Mills <bcmills@google.com>
Thu, 8 Dec 2022 19:10:59 +0000 (14:10 -0500)
committerGopher Robot <gobot@golang.org>
Tue, 31 Jan 2023 18:47:06 +0000 (18:47 +0000)
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 <bcmills@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/os/file.go
src/os/os_test.go

index 3d71ac068e244d189956fcb6fd7d92e12a17c1cb..c41adc7da60c7b1f7721b2b123d9726cc9309f39 100644 (file)
@@ -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 {
index 7d39eb3e02afa6ddebb04ea6609a101ec19a288a..a8488a11f8c9eed5e575ef678b05dfd7f0ca064a 100644 (file)
@@ -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() {