Donut now tests amount written should match expected amount to write

master
Frederick F. Kautz IV 10 years ago
parent d3d1205eb1
commit ddc7cf835e
  1. 6
      pkg/storage/donut/v1/donut.go
  2. 6
      pkg/storage/donut/v1/donut_test.go

@ -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 {

@ -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))
}

Loading…
Cancel
Save