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

Fixes #8956

Signed-off-by: Marianna <mtesselh@gmail.com>
This commit is contained in:
Marianna 2014-11-17 19:25:06 -08:00
parent 882db5f885
commit e6fd57b90b
2 changed files with 39 additions and 1 deletions

View File

@ -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)

View File

@ -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")
}