return nil } err := container.StreamIn(garden.StreamInSpec{ User: "******", Path: "to", TarStream: bytes.NewBufferString("stuff"), }) Ω(err).ShouldNot(HaveOccurred()) }) Context("when streaming in fails", func() { disaster := errors.New("oh no!") BeforeEach(func() { fakeConnection.StreamInReturns( disaster) }) It("returns the error", func() { err := container.StreamIn(garden.StreamInSpec{ Path: "to", }) Ω(err).Should(Equal(disaster)) }) }) }) Describe("StreamOut", func() { It("sends a stream out request", func() { fakeConnection.StreamOutReturns(ioutil.NopCloser(strings.NewReader("kewl")), nil)
TarStream: reader, }) Ω(err).ShouldNot(HaveOccurred()) Ω(innerConnection.StreamInCallCount()).Should(Equal(1)) handle, spec := innerConnection.StreamInArgsForCall(0) Ω(handle).Should(Equal("beethoven")) Ω(spec.Path).Should(Equal("/dev/sound")) Ω(spec.User).Should(Equal("bach")) Ω(spec.TarStream).Should(Equal(reader)) }) It("does not retry as the other end of the connection may have already started reading the body", func() { reader := &bytes.Buffer{} innerConnection.StreamInReturns(retryableErrors[0]) err := conn.StreamIn("beethoven", garden.StreamInSpec{ Path: "/dev/sound", User: "******", TarStream: reader, }) Ω(err).Should(MatchError(retryableErrors[0])) Ω(innerConnection.StreamInCallCount()).Should(Equal(1)) }) }) Describe("StreamOut", func() { handle := "suitcase"