}, requestedIO) Expect(fakeProcessTracker.RunCallCount()).To(Equal(1)) _, cmd, io, tty, _ := fakeProcessTracker.RunArgsForCall(0) Expect(cmd.Path).To(Equal("dosh")) Expect(cmd.Args).To(Equal([]string{"dosh", "some-path", "an-arg", "another-arg"})) Expect(io).To(Equal(requestedIO)) Expect(tty).To(Equal(requestedTTY)) }) PIt("requests sequential process ids", func() {}) }) Describe("Attach", func() { It("attaches to the requested process", func() { requestedIO := garden.ProcessIO{Stdout: gbytes.NewBuffer()} container.Attach(33, requestedIO) Expect(fakeProcessTracker.AttachCallCount()).To(Equal(1)) id, io := fakeProcessTracker.AttachArgsForCall(0) Expect(id).To(Equal(uint32(33))) Expect(io).To(Equal(requestedIO)) }) }) PIt("adds a signaller to the spawned process", func() { }) })
return process, nil } }) It("streams stderr and stdout and exit status", func() { stdout := gbytes.NewBuffer() stderr := gbytes.NewBuffer() process, err := container.Attach(1, garden.ProcessIO{ Stdout: stdout, Stderr: stderr, }) Expect(err).ToNot(HaveOccurred()) pid, _ := fakeProcessTracker.AttachArgsForCall(0) Expect(pid).To(Equal(uint32(1))) Expect(process.ID()).To(Equal(uint32(42))) Eventually(stdout).Should(gbytes.Say("hi out\n")) Eventually(stderr).Should(gbytes.Say("hi err\n")) Expect(process.Wait()).To(Equal(123)) }) }) Context("when attaching fails", func() { disaster := errors.New("oh no!") JustBeforeEach(func() {