mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
swarm/network: fix TestHiveStatePersistance (#1320)
This commit is contained in:
parent
d8f4011d50
commit
80afc94a22
1 changed files with 41 additions and 39 deletions
|
|
@ -24,6 +24,7 @@ import (
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
|
"github.com/ethereum/go-ethereum/p2p"
|
||||||
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
|
||||||
"github.com/ethereum/go-ethereum/swarm/state"
|
"github.com/ethereum/go-ethereum/swarm/state"
|
||||||
)
|
)
|
||||||
|
|
@ -109,67 +110,68 @@ func TestRegisterAndConnect(t *testing.T) {
|
||||||
// Actual connectivity is not in scope for this test, as the peers loaded from state are not known to
|
// Actual connectivity is not in scope for this test, as the peers loaded from state are not known to
|
||||||
// the simulation; the test only verifies that the peers are known to the node
|
// the simulation; the test only verifies that the peers are known to the node
|
||||||
func TestHiveStatePersistance(t *testing.T) {
|
func TestHiveStatePersistance(t *testing.T) {
|
||||||
|
|
||||||
dir, err := ioutil.TempDir("", "hive_test_store")
|
dir, err := ioutil.TempDir("", "hive_test_store")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
store, err := state.NewDBStore(dir) //start the hive with an empty dbstore
|
const peersCount = 5
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
startHive := func(t *testing.T, dir string) (h *Hive) {
|
||||||
|
store, err := state.NewDBStore(dir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
params := NewHiveParams()
|
||||||
|
params.Discovery = false
|
||||||
|
|
||||||
|
prvkey, err := crypto.GenerateKey()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
h = NewHive(params, NewKademlia(PrivateKeyToBzzKey(prvkey), NewKadParams()), store)
|
||||||
|
s := p2ptest.NewProtocolTester(prvkey, 0, func(p *p2p.Peer, rw p2p.MsgReadWriter) error { return nil })
|
||||||
|
|
||||||
|
if err := h.Start(s.Server); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return h
|
||||||
}
|
}
|
||||||
|
|
||||||
params := NewHiveParams()
|
h1 := startHive(t, dir)
|
||||||
params.Discovery = false
|
|
||||||
|
|
||||||
s, pp, err := newHiveTester(t, params, 5, store)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
peers := make(map[string]bool)
|
peers := make(map[string]bool)
|
||||||
for _, node := range s.Nodes {
|
for i := 0; i < peersCount; i++ {
|
||||||
raddr := NewAddr(node)
|
raddr := RandomAddr()
|
||||||
pp.Register(raddr)
|
h1.Register(raddr)
|
||||||
log.Warn("add", "addr", raddr.String())
|
log.Trace("add", "addr", raddr.String())
|
||||||
peers[raddr.String()] = true
|
peers[raddr.String()] = true
|
||||||
}
|
}
|
||||||
|
if err = h1.Stop(); err != nil {
|
||||||
// start and stop the hive
|
|
||||||
// the known peers should be saved upon stopping
|
|
||||||
err = pp.Start(s.Server)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
pp.Stop()
|
|
||||||
store.Close()
|
|
||||||
|
|
||||||
// start the hive with an empty dbstore
|
|
||||||
persistedStore, err := state.NewDBStore(dir)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
s1, pp, err := newHiveTester(t, params, 0, persistedStore)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the hive and check that we know of all expected peers
|
// start the hive and check that we know of all expected peers
|
||||||
pp.Start(s1.Server)
|
h2 := startHive(t, dir)
|
||||||
|
defer func() {
|
||||||
|
if err = h2.Stop(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
pp.Kademlia.EachAddr(nil, 256, func(addr *BzzAddr, po int) bool {
|
h2.Kademlia.EachAddr(nil, 256, func(addr *BzzAddr, po int) bool {
|
||||||
log.Warn("check", "addr", addr.String())
|
log.Trace("check", "addr", addr.String())
|
||||||
delete(peers, addr.String())
|
delete(peers, addr.String())
|
||||||
i++
|
i++
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
if i != 5 {
|
if i != peersCount {
|
||||||
t.Fatalf("invalid number of entries: got %v, want %v", i, 5)
|
t.Fatalf("invalid number of entries: got %v, want %v", i, peersCount)
|
||||||
}
|
}
|
||||||
if len(peers) != 0 {
|
if len(peers) != 0 {
|
||||||
t.Fatalf("%d peers left over: %v", len(peers), peers)
|
t.Fatalf("%d peers left over: %v", len(peers), peers)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue