]> Cypherpunks repositories - gostls13.git/commitdiff
internal/testenv: make MustHaveSymlink message friendly
authorHiroshi Ioka <hirochachacha@gmail.com>
Wed, 24 Aug 2016 04:22:54 +0000 (13:22 +0900)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 24 Aug 2016 05:08:52 +0000 (05:08 +0000)
Change-Id: If6e12ebc41152bc0534d3d383df80e960efe97f0
Reviewed-on: https://go-review.googlesource.com/27577
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/internal/testenv/testenv.go
src/internal/testenv/testenv_notwin.go
src/internal/testenv/testenv_windows.go

index 7aff89928e00ca167c14c8a09aa21efceb212ccc..f99ec26557ffaad3e6a0a3fde550f6d9f58c7257 100644 (file)
@@ -129,14 +129,16 @@ func MustHaveExternalNetwork(t *testing.T) {
 
 // HasSymlink reports whether the current system can use os.Symlink.
 func HasSymlink() bool {
-       return hasSymlink()
+       ok, _ := hasSymlink()
+       return ok
 }
 
 // MustHaveSymlink reports whether the current system can use os.Symlink.
 // If not, MustHaveSymlink calls t.Skip with an explanation.
 func MustHaveSymlink(t *testing.T) {
-       if !HasSymlink() {
-               t.Skipf("skipping test: cannot make symlinks on %s/%s", runtime.GOOS, runtime.GOARCH)
+       ok, reason := hasSymlink()
+       if !ok {
+               t.Skipf("skipping test: cannot make symlinks on %s/%s%s", runtime.GOOS, runtime.GOARCH, reason)
        }
 }
 
index 16673029aa5bbcee18a1520bb6ee585d1d2458c7..d8ce6cd38536daeff05ac34a7738629b5d4e6a6c 100644 (file)
@@ -10,11 +10,11 @@ import (
        "runtime"
 )
 
-func hasSymlink() bool {
+func hasSymlink() (ok bool, reason string) {
        switch runtime.GOOS {
        case "android", "nacl", "plan9":
-               return false
+               return false, ""
        }
 
-       return true
+       return true, ""
 }
index 042c0f2867a623a495bd6516a2dd7844a07cd1e5..e593f64711c382d688080c1ca01bceb784456d7b 100644 (file)
@@ -13,7 +13,7 @@ import (
 )
 
 var symlinkOnce sync.Once
-var winHasSymlink = true
+var winSymlinkErr error
 
 func initWinHasSymlink() {
        tmpdir, err := ioutil.TempDir("", "symtest")
@@ -27,14 +27,23 @@ func initWinHasSymlink() {
                err = err.(*os.LinkError).Err
                switch err {
                case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD:
-                       winHasSymlink = false
+                       winSymlinkErr = err
                }
        }
        os.Remove("target")
 }
 
-func hasSymlink() bool {
+func hasSymlink() (ok bool, reason string) {
        symlinkOnce.Do(initWinHasSymlink)
 
-       return winHasSymlink
+       switch winSymlinkErr {
+       case nil:
+               return true, ""
+       case syscall.EWINDOWS:
+               return false, ": symlinks are not supported on your version of Windows"
+       case syscall.ERROR_PRIVILEGE_NOT_HELD:
+               return false, ": you don't have enough privileges to create symlinks"
+       }
+
+       return false, ""
 }