github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/tests/capturing_cread_closer_test.go (about) 1 package tests 2 3 import ( 4 "bytes" 5 "io" 6 ) 7 8 // CapturingReadCloser is a reader that captures data that was read from 9 // underlying reader 10 type CapturingReadCloser struct { 11 tee io.Reader 12 orig io.ReadCloser 13 capturedData bytes.Buffer 14 wasClosed bool 15 } 16 17 // Read reads data from reader 18 func (rc *CapturingReadCloser) Read(p []byte) (int, error) { 19 panicIf(rc.wasClosed, "reading after being closed") 20 return rc.tee.Read(p) 21 } 22 23 // Close closes a reader 24 func (rc *CapturingReadCloser) Close() error { 25 rc.wasClosed = true 26 return rc.orig.Close() 27 } 28 29 // NewCapturingReadCloser returns a new capturing reader 30 func NewCapturingReadCloser(orig io.ReadCloser) *CapturingReadCloser { 31 res := &CapturingReadCloser{ 32 orig: orig, 33 } 34 res.tee = io.TeeReader(orig, &res.capturedData) 35 return res 36 }