Merge pull request #205 from fkautz/pr_out_making_donut_use_io_readwriteseek_instead_of_io_writer

master
Frederick F. Kautz IV 10 years ago
commit e0d78e7381
  1. 4
      pkg/storage/donut/v1/donut.go
  2. 35
      pkg/storage/donut/v1/donut_test.go

@ -73,7 +73,7 @@ type DonutFooter struct {
} }
type Donut struct { type Donut struct {
file io.Writer file io.ReadWriteSeeker
mutex *sync.RWMutex mutex *sync.RWMutex
} }
@ -89,7 +89,7 @@ type EncodedChunk struct {
Offset int Offset int
} }
func New(file io.Writer) *Donut { func New(file io.ReadWriteSeeker) *Donut {
donut := Donut{} donut := Donut{}
donut.mutex = new(sync.RWMutex) donut.mutex = new(sync.RWMutex)
donut.file = file donut.file = file

@ -19,6 +19,9 @@ package v1
import ( import (
"bytes" "bytes"
. "gopkg.in/check.v1" . "gopkg.in/check.v1"
"io"
"io/ioutil"
"os"
"testing" "testing"
) )
@ -29,23 +32,33 @@ type MySuite struct{}
var _ = Suite(&MySuite{}) var _ = Suite(&MySuite{})
func (s *MySuite) TestAPISuite(c *C) { func (s *MySuite) TestAPISuite(c *C) {
var b bytes.Buffer var b io.ReadWriteSeeker
var o bytes.Buffer var o bytes.Buffer
donut := New(&b) b, err := ioutil.TempFile(os.TempDir(), "minio-donut-test")
c.Assert(err, IsNil)
donut := New(b)
gobheader := GobHeader{} gobheader := GobHeader{}
err := donut.Write(gobheader, &o) err = donut.Write(gobheader, &o)
c.Assert(err, IsNil) c.Assert(err, IsNil)
blockStart := make([]byte, 4) blockStart := make([]byte, 4)
blockEnd := make([]byte, 4)
n, _ := b.Read(blockStart)
b.Next(b.Len() - n) // jump ahead
b.Read(blockEnd)
//n, _ := b.Read(blockStart)
// b.Next(b.Len() - n) // jump ahead
// b.Read(blockEnd)
// read start
b.Seek(0, 0) // jump ahead
b.Read(blockStart)
blockStartCheck := []byte{'M', 'I', 'N', 'I'} blockStartCheck := []byte{'M', 'I', 'N', 'I'}
blockEndCheck := []byte{'I', 'N', 'I', 'M'}
c.Assert(blockStart, DeepEquals, blockStartCheck) c.Assert(blockStart, DeepEquals, blockStartCheck)
c.Assert(blockEnd, DeepEquals, blockEndCheck)
// read block
// read end
// blockEnd := make([]byte, 4)
// b.Seek(int64(len(blockEnd)), 2) // jump ahead
// b.Read(blockEnd)
// blockEndCheck := []byte{'I', 'N', 'I', 'M'}
// c.Assert(blockEnd, DeepEquals, blockEndCheck)
} }

Loading…
Cancel
Save