peer suspension to disallow reconnect after disconnect on fatal error for set period (PeerSuspensionInterval)
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/blockpool/test"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/pow"
|
||||
)
|
||||
@@ -45,7 +46,7 @@ func TestVerifyPoW(t *testing.T) {
|
||||
first := false
|
||||
blockPoolTester.blockPool.verifyPoW = func(b pow.Block) bool {
|
||||
bb, _ := b.(*types.Block)
|
||||
indexes := blockPoolTester.hashPool.HashesToIndexes([][]byte{bb.Hash()})
|
||||
indexes := blockPoolTester.hashPool.HashesToIndexes([]common.Hash{bb.Hash()})
|
||||
if indexes[0] == 2 && !first {
|
||||
first = true
|
||||
return false
|
||||
@@ -122,3 +123,33 @@ func TestErrInsufficientChainInfo(t *testing.T) {
|
||||
t.Errorf("expected %v error, got %v", ErrInsufficientChainInfo, peer1.peerErrors)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPeerSuspension(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPool.Config.PeerSuspensionInterval = 100 * time.Millisecond
|
||||
|
||||
blockPool.Start()
|
||||
|
||||
peer1 := blockPoolTester.newPeer("peer1", 1, 3)
|
||||
peer1.AddPeer()
|
||||
blockPool.peers.peerError("peer1", 0, "")
|
||||
bestpeer, _ := blockPool.peers.getPeer("peer1")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed on error")
|
||||
}
|
||||
peer1.AddPeer()
|
||||
bestpeer, _ = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed on reconnect")
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
peer1.AddPeer()
|
||||
bestpeer, _ = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer == nil {
|
||||
t.Errorf("peer1 not connected after PeerSuspensionInterval")
|
||||
}
|
||||
// blockPool.Wait(waitTimeout)
|
||||
blockPool.Stop()
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user