]> Cypherpunks repositories - gostls13.git/commitdiff
os/signal: skip TestTerminalSignal if posix_openpt fails with EACCES
authorMichael Hudson-Doyle <michael.hudson@canonical.com>
Tue, 30 Jan 2018 21:27:49 +0000 (10:27 +1300)
committerMichael Hudson-Doyle <michael.hudson@canonical.com>
Wed, 31 Jan 2018 00:50:06 +0000 (00:50 +0000)
This happens in a chroot and so causes failures when packaging Go 1.10 for
Debian/Ubuntu.

Change-Id: I817038c237e584ce185b2168f8c7a10b9ef27b43
Reviewed-on: https://go-review.googlesource.com/90875
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/go/build/deps_test.go
src/os/signal/internal/pty/pty.go
src/os/signal/signal_cgo_test.go

index d21eacc6fbd0b7b62341fd70466257cafef20ec2..07a9cd3c8218550be56c694be60f4e670dc15db2 100644 (file)
@@ -301,7 +301,7 @@ var pkgDeps = map[string][]string{
        "os/user": {"L4", "CGO", "io/ioutil", "os", "syscall"},
 
        // Internal package used only for testing.
-       "os/signal/internal/pty": {"CGO", "fmt", "os"},
+       "os/signal/internal/pty": {"CGO", "fmt", "os", "syscall"},
 
        // Basic networking.
        // Because net must be used by any package that wants to
index fe293a0126f8d89b6bb786a7701a71b4e1099dd7..c4c1567fce0b314f9acd386b6fa1a4aef36ccec9 100644 (file)
@@ -21,21 +21,36 @@ import "C"
 import (
        "fmt"
        "os"
+       "syscall"
 )
 
+type PtyError struct {
+       FuncName    string
+       ErrorString string
+       Errno       syscall.Errno
+}
+
+func ptyError(name string, err error) *PtyError {
+       return &PtyError{name, err.Error(), err.(syscall.Errno)}
+}
+
+func (e *PtyError) Error() string {
+       return fmt.Sprintf("%s: %s", e.FuncName, e.ErrorString)
+}
+
 // Open returns a master pty and the name of the linked slave tty.
 func Open() (master *os.File, slave string, err error) {
        m, err := C.posix_openpt(C.O_RDWR)
        if err != nil {
-               return nil, "", fmt.Errorf("posix_openpt: %v", err)
+               return nil, "", ptyError("posix_openpt", err)
        }
        if _, err := C.grantpt(m); err != nil {
                C.close(m)
-               return nil, "", fmt.Errorf("grantpt: %v", err)
+               return nil, "", ptyError("grantpt", err)
        }
        if _, err := C.unlockpt(m); err != nil {
                C.close(m)
-               return nil, "", fmt.Errorf("unlockpt: %v", err)
+               return nil, "", ptyError("unlockpt", err)
        }
        slave = C.GoString(C.ptsname(m))
        return os.NewFile(uintptr(m), "pty-master"), slave, nil
index 27707fadcee4b60ff8ea8a658011163af7e3812e..84a2a08ce9b6e5a11e072f581b72cbc890e40414 100644 (file)
@@ -72,6 +72,10 @@ func TestTerminalSignal(t *testing.T) {
 
        master, sname, err := pty.Open()
        if err != nil {
+               ptyErr := err.(*pty.PtyError)
+               if ptyErr.FuncName == "posix_openpt" && ptyErr.Errno == syscall.EACCES {
+                       t.Skip("posix_openpt failed with EACCES, assuming chroot and skipping")
+               }
                t.Fatal(err)
        }
        defer master.Close()