fakeContainer.RunStub = func(spec garden.ProcessSpec, io garden.ProcessIO) (garden.Process, error) { writing := new(sync.WaitGroup) writing.Add(1) go func() { defer writing.Done() defer GinkgoRecover() _, err := fmt.Fprintf(io.Stdout, "stdout data") Ω(err).ShouldNot(HaveOccurred()) in, err := ioutil.ReadAll(io.Stdin) Ω(err).ShouldNot(HaveOccurred()) _, err = fmt.Fprintf(io.Stdout, "mirrored %s", string(in)) Ω(err).ShouldNot(HaveOccurred()) _, err = fmt.Fprintf(io.Stderr, "stderr data") Ω(err).ShouldNot(HaveOccurred()) }() process := new(fakes.FakeProcess) process.IDReturns(42) process.WaitStub = func() (int, error) { writing.Wait() return 123, nil } return process, nil }
Context("when a Run request is in-flight", func() { It("does not wait for the request to complete", func(done Done) { fakeContainer := new(fakes.FakeContainer) fakeContainer.RunStub = func(spec garden.ProcessSpec, io garden.ProcessIO) (garden.Process, error) { process := new(fakes.FakeProcess) process.WaitStub = func() (int, error) { time.Sleep(time.Minute) return 0, nil } go func() { defer GinkgoRecover() _, err := io.Stdout.Write([]byte("msg 1\n")) Ω(err).ShouldNot(HaveOccurred()) time.Sleep(time.Minute) _, err = io.Stdout.Write([]byte("msg 2\n")) Ω(err).ShouldNot(HaveOccurred()) }() return process, nil } fakeBackend.CreateReturns(fakeContainer, nil) clientContainer, err := apiClient.Create(garden.ContainerSpec{}) Ω(err).ShouldNot(HaveOccurred())