From 62eef0e2fa9b2c385f7b2778e763486da6880d37 Mon Sep 17 00:00:00 2001 From: virtualsue Date: Thu, 22 Nov 2018 14:36:24 +0000 Subject: [PATCH] unix: rework TestGetwd to handle test dirs whose names contain symlinks TestGetwd can fail on systems that have unexpected directory/partition configurations using symlinks. Fixes golang/go#26678 Change-Id: I44dba94c5e8b6a8e1e7e112cd7d0541d22b65d84 GitHub-Last-Rev: 727a6cc6a718969828a15d1016c89ea9be8a12e0 GitHub-Pull-Request: golang/sys#22 Reviewed-on: https://go-review.googlesource.com/c/148537 Reviewed-by: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot --- unix/syscall_unix_test.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/unix/syscall_unix_test.go b/unix/syscall_unix_test.go index f84902da..0a28f6e5 100644 --- a/unix/syscall_unix_test.go +++ b/unix/syscall_unix_test.go @@ -453,9 +453,9 @@ func TestGetwd(t *testing.T) { t.Fatalf("Open .: %s", err) } defer fd.Close() - // These are chosen carefully not to be symlinks on a Mac - // (unlike, say, /var, /etc) - dirs := []string{"/", "/usr/bin"} + // Directory list for test. Do not worry if any are symlinks or do not + // exist on some common unix desktop environments. That will be checked. + dirs := []string{"/", "/usr/bin", "/etc", "/var", "/opt"} switch runtime.GOOS { case "android": dirs = []string{"/", "/system/bin"} @@ -475,6 +475,17 @@ func TestGetwd(t *testing.T) { } oldwd := os.Getenv("PWD") for _, d := range dirs { + // Check whether d exists, is a dir and that d's path does not contain a symlink + fi, err := os.Stat(d) + if err != nil || !fi.IsDir() { + t.Logf("Test dir %s stat error (%v) or not a directory, skipping", d, err) + continue + } + check, err := filepath.EvalSymlinks(d) + if err != nil || check != d { + t.Logf("Test dir %s (%s) is symlink or other error (%v), skipping", d, check, err) + continue + } err = os.Chdir(d) if err != nil { t.Fatalf("Chdir: %v", err)