Selaa lähdekoodia

Fixed a bug - no panic anymore when logining in without TTY

Fixes #8956

Signed-off-by: Marianna <mtesselh@gmail.com>
Marianna 10 vuotta sitten
vanhempi
commit
e6fd57b90b
2 muutettua tiedostoa jossa 39 lisäystä ja 1 poistoa
  1. 4 1
      api/client/commands.go
  2. 35 0
      integration-cli/docker_cli_login_test.go

+ 4 - 1
api/client/commands.go

@@ -289,7 +289,10 @@ func (cli *DockerCli) CmdLogin(args ...string) error {
 	// the password or email from the config file, so prompt them
 	if username != authconfig.Username {
 		if password == "" {
-			oldState, _ := term.SaveState(cli.inFd)
+			oldState, err := term.SaveState(cli.inFd)
+			if err != nil {
+				return err
+			}
 			fmt.Fprintf(cli.out, "Password: ")
 			term.DisableEcho(cli.inFd, oldState)
 

+ 35 - 0
integration-cli/docker_cli_login_test.go

@@ -0,0 +1,35 @@
+package main
+
+import (
+	"bytes"
+	"io"
+	"os"
+	"os/exec"
+	"testing"
+)
+
+func TestLoginWithoutTTY(t *testing.T) {
+	cmd := exec.Command(dockerBinary, "login")
+	// setup STDOUT and STDERR so that we see any output and errors in our console
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+
+	// create a buffer with text then a new line as a return
+	buf := bytes.NewBuffer([]byte("buffer test string \n"))
+
+	// use a pipe for stdin and manually copy the data so that
+	// the process does not get the TTY
+	in, err := cmd.StdinPipe()
+	if err != nil {
+		t.Fatal(err)
+	}
+	// copy the bytes into the commands stdin along with a new line
+	go io.Copy(in, buf)
+
+	// run the command and block until it's done
+	if err := cmd.Run(); err == nil {
+		t.Fatal("Expected non nil err when loginning in & TTY not available")
+	}
+
+	logDone("login - login without TTY")
+}