mirror of
https://github.com/golang/go
synced 2024-09-25 15:20:13 -06:00
internal/testenv: make MustHaveSymlink message friendly
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>
This commit is contained in:
parent
5bddca64a8
commit
9be2a279ee
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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, ""
|
||||
}
|
||||
|
@ -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, ""
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user