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