github.com/altipla-consulting/ravendb-go-client@v0.1.3/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  }