}) }) Describe("StreamOut", func() { It("sends a stream out request", func() { fakeConnection.StreamOutReturns(ioutil.NopCloser(strings.NewReader("kewl")), nil) reader, err := container.StreamOut(garden.StreamOutSpec{ User: "******", Path: "from", }) bytes, err := ioutil.ReadAll(reader) Ω(err).ShouldNot(HaveOccurred()) Ω(string(bytes)).Should(Equal("kewl")) handle, spec := fakeConnection.StreamOutArgsForCall(0) Ω(handle).Should(Equal("some-handle")) Ω(spec.Path).Should(Equal("from")) Ω(spec.User).Should(Equal("deandra")) }) Context("when streaming out fails", func() { disaster := errors.New("oh no!") BeforeEach(func() { fakeConnection.StreamOutReturns(nil, disaster) }) It("returns the error", func() { _, err := container.StreamOut(garden.StreamOutSpec{ Path: "from",
itRetries(func() error { var err error gotReader, err = conn.StreamOut(handle, garden.StreamOutSpec{ Path: "/etc/passwd", User: "******", }) return err }, func(err error) { innerConnection.StreamOutReturns(gbytes.NewBuffer(), err) }, func() int { return innerConnection.StreamOutCallCount() }, func() { It("calls through to garden", func() { Ω(innerConnection.StreamOutCallCount()).Should(Equal(1)) calledHandle, calledSpec := innerConnection.StreamOutArgsForCall(0) Ω(calledHandle).Should(Equal(handle)) Ω(calledSpec.Path).Should(Equal("/etc/passwd")) Ω(calledSpec.User).Should(Equal("admin")) }) It("returns the reader", func() { Ω(gotReader).Should(Equal(gbytes.NewBuffer())) }) }) }) Describe("Attach", func() { var ( fakeProcess *gfakes.FakeProcess process garden.Process