Files
dolt/chunks/remote_requests_test.go
2016-02-08 23:15:09 -08:00

77 lines
1.6 KiB
Go

package chunks
import (
"testing"
"github.com/attic-labs/noms/ref"
"github.com/stretchr/testify/assert"
)
func TestGetRequestBatch(t *testing.T) {
assert := assert.New(t)
r0 := ref.Parse("sha1-0000000000000000000000000000000000000000")
c1 := NewChunk([]byte("abc"))
r1 := c1.Ref()
c2 := NewChunk([]byte("123"))
r2 := c2.Ref()
tally := func(b bool, trueCnt, falseCnt *int) {
if b {
*trueCnt++
} else {
*falseCnt++
}
}
req0chan := make(chan bool, 1)
req1chan := make(chan Chunk, 1)
req2chan := make(chan bool, 1)
req3chan := make(chan bool, 1)
req4chan := make(chan Chunk, 1)
batch := readBatch{
r0: []outstandingRequest{outstandingHas(req0chan), outstandingGet(req1chan)},
r1: []outstandingRequest{outstandingHas(req2chan)},
r2: []outstandingRequest{outstandingHas(req3chan), outstandingGet(req4chan)},
}
go func() {
for requestedRef, reqs := range batch {
for _, req := range reqs {
if requestedRef == r1 {
req.Satisfy(c1)
delete(batch, r1)
} else if requestedRef == r2 {
req.Satisfy(c2)
delete(batch, r2)
}
}
}
}()
var r1True, r1False, r2True, r2False int
for b := range req2chan {
tally(b, &r1True, &r1False)
}
for b := range req3chan {
tally(b, &r2True, &r2False)
}
for c := range req4chan {
assert.EqualValues(c2.Ref(), c.Ref())
}
assert.Equal(1, r1True)
assert.Equal(0, r1False)
assert.Equal(1, r2True)
assert.Equal(0, r2False)
go batch.Close()
var r0True, r0False int
for b := range req0chan {
tally(b, &r0True, &r0False)
}
for c := range req1chan {
assert.EqualValues(EmptyChunk.Ref(), c.Ref())
}
assert.Equal(0, r0True)
assert.Equal(1, r0False)
}