From c63be8c544d804fbf4e148d5a9a842e5125e3880 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 14 Jun 2017 12:08:26 +0200 Subject: [PATCH] return the length of data written when the stream errors --- stream.go | 2 +- stream_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/stream.go b/stream.go index 6248abe3e..183db9cbc 100644 --- a/stream.go +++ b/stream.go @@ -171,7 +171,7 @@ func (s *stream) Write(p []byte) (int, error) { } if s.err != nil { - return 0, s.err + return len(p) - len(s.dataForWriting), s.err } return len(p), nil diff --git a/stream_test.go b/stream_test.go index 34d894b14..ad066f9ca 100644 --- a/stream_test.go +++ b/stream_test.go @@ -478,6 +478,23 @@ var _ = Describe("Stream", func() { Expect(err).To(MatchError(testErr)) }) + It("returns how much was written when recieving a remote error", func() { + var writeReturned bool + var n int + var err error + + go func() { + n, err = str.Write([]byte("foobar")) + writeReturned = true + }() + + Eventually(func() []byte { return str.getDataForWriting(4) }).ShouldNot(BeEmpty()) + str.RegisterRemoteError(testErr) + Eventually(func() bool { return writeReturned }).Should(BeTrue()) + Expect(err).To(MatchError(testErr)) + Expect(n).To(Equal(4)) + }) + It("calls onReset when receiving a remote error", func() { var writeReturned bool str.writeOffset = 0x1000