Expect(err).ToNot(HaveOccurred()) Expect(socketConnector.ConnectCallCount()).To(Equal(1)) Expect(socketConnector.ConnectArgsForCall(0)).To(Equal(process.Spec)) }) Context("when the process is interactive (i.e. connected to a TTY)", func() { BeforeEach(func() { process.Spec.TTY = &garden.TTYSpec{} }) It("makes stdin a raw terminal (because the remote terminal will handle echoing etc.)", func() { socketConnector.ConnectReturns([]unix_socket.Fd{FakeFd(0), FakeFd(0)}, 0, nil) Expect(process.Start()).To(Succeed()) Expect(fakeTerm.SetRawTerminalCallCount()).To(Equal(1)) }) It("restores the terminal state when the process is cleaned up", func() { socketConnector.ConnectReturns([]unix_socket.Fd{FakeFd(0), FakeFd(0)}, 0, nil) state := &term.State{} fakeTerm.SetRawTerminalReturns(state, nil) Expect(process.Start()).To(Succeed()) Expect(fakeTerm.RestoreTerminalCallCount()).To(Equal(0)) process.Cleanup() Expect(fakeTerm.RestoreTerminalCallCount()).To(Equal(1)) fd, state := fakeTerm.RestoreTerminalArgsForCall(0) Expect(fd).To(Equal(os.Stdin.Fd()))