forked from TrueCloudLab/neoneo-go
abb4da9cbd
[peermgr] - Add request cache with tests - Add requestCache to peermgr - refactored peer manager tests - Added blockInfo struct, to allow sorting on the blockIndex - added helper methods for cache, pickItem, pickFirstItem, removeHash, findHash and refactored tests - renamed requestcache to blockcache - refactored peer manager to use block cache for block requests *only* - added blockCallPeer function to handle block requests only - refactored onDisconnect to add back any pending peer requests that the disconnected peer did not complete into the peer manager queue [peermgr/server] - Modify onBlock handler in server, to send peermgr a BlockInfo struct [peermgr/syncmgr/server] - Modified blockIndex in BlockInfo to be uint32 and not uint64 - RequestBlocks in syncmgr now takes an index along with the hash - modified syncmgr code to pass index along with hash in all methods
80 lines
1.4 KiB
Go
80 lines
1.4 KiB
Go
package peermgr
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
|
|
"github.com/CityOfZion/neo-go/pkg/wire/util"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestAddBlock(t *testing.T) {
|
|
|
|
bc := &blockCache{
|
|
cacheLimit: 20,
|
|
}
|
|
bi := randomBlockInfo(t)
|
|
|
|
err := bc.addBlockInfo(bi)
|
|
assert.Equal(t, nil, err)
|
|
|
|
assert.Equal(t, 1, bc.cacheLen())
|
|
|
|
err = bc.addBlockInfo(bi)
|
|
assert.Equal(t, ErrDuplicateItem, err)
|
|
|
|
assert.Equal(t, 1, bc.cacheLen())
|
|
}
|
|
|
|
func TestCacheLimit(t *testing.T) {
|
|
|
|
bc := &blockCache{
|
|
cacheLimit: 20,
|
|
}
|
|
|
|
for i := 0; i < bc.cacheLimit; i++ {
|
|
err := bc.addBlockInfo(randomBlockInfo(t))
|
|
assert.Equal(t, nil, err)
|
|
}
|
|
|
|
err := bc.addBlockInfo(randomBlockInfo(t))
|
|
assert.Equal(t, ErrCacheLimit, err)
|
|
|
|
assert.Equal(t, bc.cacheLimit, bc.cacheLen())
|
|
}
|
|
func TestPickItem(t *testing.T) {
|
|
|
|
bc := &blockCache{
|
|
cacheLimit: 20,
|
|
}
|
|
|
|
for i := 0; i < bc.cacheLimit; i++ {
|
|
err := bc.addBlockInfo(randomBlockInfo(t))
|
|
assert.Equal(t, nil, err)
|
|
}
|
|
|
|
for i := 0; i < bc.cacheLimit; i++ {
|
|
_, err := bc.pickFirstItem()
|
|
assert.Equal(t, nil, err)
|
|
}
|
|
|
|
assert.Equal(t, 0, bc.cacheLen())
|
|
}
|
|
|
|
func randomUint256(t *testing.T) util.Uint256 {
|
|
rand32 := make([]byte, 32)
|
|
rand.Read(rand32)
|
|
|
|
u, err := util.Uint256DecodeBytes(rand32)
|
|
assert.Equal(t, nil, err)
|
|
|
|
return u
|
|
}
|
|
|
|
func randomBlockInfo(t *testing.T) BlockInfo {
|
|
|
|
return BlockInfo{
|
|
randomUint256(t),
|
|
rand.Uint32(),
|
|
}
|
|
}
|