github.com/cloudfoundry-attic/ltc@v0.0.0-20151123212628-098adc7919fc/terminal/password_reader_test.go (about)

     1  package terminal_test
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  
     7  	"github.com/docker/docker/pkg/term"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  
    11  	"github.com/cloudfoundry-incubator/ltc/terminal"
    12  	"github.com/cloudfoundry-incubator/ltc/terminal/mocks"
    13  )
    14  
    15  type fakeStdin struct {
    16  	io.Reader
    17  }
    18  
    19  func (s *fakeStdin) Fd() uintptr { return 42 }
    20  
    21  var _ = Describe("PasswordReader", func() {
    22  	var (
    23  		fakeTerm *mocks.FakeTerm
    24  
    25  		inBuffer  *bytes.Buffer
    26  		outBuffer *bytes.Buffer
    27  
    28  		passwordReader terminal.PasswordReader
    29  	)
    30  
    31  	BeforeEach(func() {
    32  		fakeTerm = &mocks.FakeTerm{}
    33  
    34  		inBuffer = bytes.NewBufferString("secret\n")
    35  		outBuffer = &bytes.Buffer{}
    36  
    37  		passwordReader = &terminal.TermPasswordReader{
    38  			Term:   fakeTerm,
    39  			Stdin:  &fakeStdin{inBuffer},
    40  			Stdout: outBuffer,
    41  		}
    42  	})
    43  
    44  	Context("#PromptForPassword", func() {
    45  		It("should disable echo and prompt for a password", func() {
    46  			termState := &term.State{}
    47  			fakeTerm.SaveStateReturns(termState, nil)
    48  
    49  			Expect(passwordReader.PromptForPassword("P%s%s", "ro", "mpt")).To(Equal("secret"))
    50  
    51  			Expect(outBuffer.String()).To(Equal("Prompt: \n"))
    52  
    53  			Expect(fakeTerm.DisableEchoCallCount()).To(Equal(1))
    54  			fd, state := fakeTerm.DisableEchoArgsForCall(0)
    55  			Expect(fd).To(Equal(uintptr(42)))
    56  			Expect(state == termState).To(BeFalse())
    57  
    58  			Expect(fakeTerm.RestoreTerminalCallCount()).To(Equal(1))
    59  			fd, state = fakeTerm.RestoreTerminalArgsForCall(0)
    60  			Expect(fd).To(Equal(uintptr(42)))
    61  			Expect(state == termState).To(BeTrue())
    62  		})
    63  	})
    64  })