Example #1
0
				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"