Merge pull request #225 from fkautz/pr_out_donut_now_tests_amount_written_should_match_expected_amount_to_write

This commit is contained in:
Frederick F. Kautz IV 2015-02-28 16:10:09 -08:00
commit a067fdb59d
2 changed files with 11 additions and 1 deletions

View File

@ -19,6 +19,7 @@ package v1
import ( import (
"bytes" "bytes"
"encoding/binary" "encoding/binary"
"errors"
"io" "io"
"github.com/minio-io/minio/pkg/utils/checksum/crc32c" "github.com/minio-io/minio/pkg/utils/checksum/crc32c"
@ -101,10 +102,13 @@ func Write(target io.Writer, reader io.Reader, length uint64) error {
checksumChannel := make(chan checksumValue) checksumChannel := make(chan checksumValue)
go generateChecksum(sumReader, checksumChannel) go generateChecksum(sumReader, checksumChannel)
teeReader := io.TeeReader(reader, sumWriter) teeReader := io.TeeReader(reader, sumWriter)
_, err = io.Copy(target, teeReader) dataLength, err := io.Copy(target, teeReader)
if err != nil { if err != nil {
return err return err
} }
if uint64(dataLength) != length {
return errors.New("Specified data length and amount written mismatched")
}
sumWriter.Close() sumWriter.Close()
dataChecksum := <-checksumChannel dataChecksum := <-checksumChannel
if dataChecksum.err != nil { if dataChecksum.err != nil {

View File

@ -124,3 +124,9 @@ func (s *MySuite) TestSingleWrite(c *C) {
// ensure no extra data is in the file // ensure no extra data is in the file
c.Assert(testBuffer.Len(), Equals, 0) c.Assert(testBuffer.Len(), Equals, 0)
} }
func (s *MySuite) TestLengthMismatchInWrite(c *C) {
var testData bytes.Buffer
err := Write(&testData, bytes.NewBufferString("hello, world"), 5)
c.Assert(err, Not(IsNil))
}