return process, nil } stdout := gbytes.NewBuffer() stderr := gbytes.NewBuffer() processIO := garden.ProcessIO{ Stdout: stdout, Stderr: stderr, } process, err := container.Attach(42, processIO) Ω(err).ShouldNot(HaveOccurred()) attachedHandle, attachedID, attachedIO := fakeConnection.AttachArgsForCall(0) Ω(attachedHandle).Should(Equal("some-handle")) Ω(attachedID).Should(Equal(uint32(42))) Ω(attachedIO).Should(Equal(processIO)) Ω(process.ID()).Should(Equal(uint32(42))) status, err := process.Wait() Ω(err).ShouldNot(HaveOccurred()) Ω(status).Should(Equal(123)) Eventually(stdout).Should(gbytes.Say("stdout data")) Eventually(stderr).Should(gbytes.Say("stderr data")) }) })
fakeProcess.IDReturns(6) }) itRetries(func() error { var err error process, err = conn.Attach("la-contineur", 6, processIO) return err }, func(err error) { innerConnection.AttachReturns(fakeProcess, err) }, func() int { return innerConnection.AttachCallCount() }, func() { It("calls through to garden", func() { Ω(innerConnection.AttachCallCount()).Should(Equal(1)) handle, processID, calledProcessIO := innerConnection.AttachArgsForCall(0) Ω(handle).Should(Equal("la-contineur")) Ω(processID).Should(Equal(uint32(6))) Ω(calledProcessIO).Should(Equal(processIO)) }) Describe("the process", func() { Describe("Wait", func() { BeforeEach(func() { errs := make(chan error, 1) errs <- fmt.Errorf("connection: decode failed: %s", io.EOF) close(errs) fakeProcess.WaitStub = func() (int, error) { err := <-errs if err == nil {