HashingWriter: Track size

This commit is contained in:
Alexander Neumann 2015-02-16 00:24:43 +01:00
parent b816192d1c
commit fb2cd7b485
2 changed files with 14 additions and 3 deletions

View File

@ -43,8 +43,9 @@ func (h *HashAppendWriter) Write(p []byte) (n int, err error) {
}
type HashingWriter struct {
w io.Writer
h hash.Hash
w io.Writer
h hash.Hash
size int
}
func NewHashingWriter(w io.Writer, h hash.Hash) *HashingWriter {
@ -55,9 +56,15 @@ func NewHashingWriter(w io.Writer, h hash.Hash) *HashingWriter {
}
func (h *HashingWriter) Write(p []byte) (int, error) {
return h.w.Write(p)
n, err := h.w.Write(p)
h.size += n
return n, err
}
func (h *HashingWriter) Sum(d []byte) []byte {
return h.h.Sum(d)
}
func (h *HashingWriter) Size() int {
return h.size
}

View File

@ -68,6 +68,10 @@ func TestHashingWriter(t *testing.T) {
"HashAppendWriter: invalid number of bytes written: got %d, expected %d",
n, size)
assert(t, wr.Size() == size,
"HashAppendWriter: invalid number of bytes returned: got %d, expected %d",
wr.Size, size)
resultingHash := wr.Sum(nil)
assert(t, bytes.Equal(expectedHash[:], resultingHash),
"HashAppendWriter: hashes do not match: expected %02x, got %02x",