mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-11 10:33:08 -06:00
77 lines
1.6 KiB
Go
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)
|
|
}
|