github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/network/hive_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:47</date> 10 //</624342672324169728> 11 12 13 package network 14 15 import ( 16 "io/ioutil" 17 "log" 18 "os" 19 "testing" 20 21 p2ptest "github.com/ethereum/go-ethereum/p2p/testing" 22 "github.com/ethereum/go-ethereum/swarm/state" 23 ) 24 25 func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive) { 26 //设置 27 addr := RandomAddr() //测试的对等地址 28 to := NewKademlia(addr.OAddr, NewKadParams()) 29 pp := NewHive(params, to, store) //蜂箱 30 31 return newBzzBaseTester(t, n, addr, DiscoverySpec, pp.Run), pp 32 } 33 34 func TestRegisterAndConnect(t *testing.T) { 35 params := NewHiveParams() 36 s, pp := newHiveTester(t, params, 1, nil) 37 38 id := s.IDs[0] 39 raddr := NewAddrFromNodeID(id) 40 pp.Register([]OverlayAddr{OverlayAddr(raddr)}) 41 42 //启动配置单元并等待连接 43 err := pp.Start(s.Server) 44 if err != nil { 45 t.Fatal(err) 46 } 47 defer pp.Stop() 48 //检索和广播 49 err = s.TestDisconnected(&p2ptest.Disconnect{ 50 Peer: s.IDs[0], 51 Error: nil, 52 }) 53 54 if err == nil || err.Error() != "timed out waiting for peers to disconnect" { 55 t.Fatalf("expected peer to connect") 56 } 57 } 58 59 func TestHiveStatePersistance(t *testing.T) { 60 log.SetOutput(os.Stdout) 61 62 dir, err := ioutil.TempDir("", "hive_test_store") 63 if err != nil { 64 panic(err) 65 } 66 defer os.RemoveAll(dir) 67 68 store, err := state.NewDBStore(dir) //用空的dbstore启动配置单元 69 70 params := NewHiveParams() 71 s, pp := newHiveTester(t, params, 5, store) 72 73 peers := make(map[string]bool) 74 for _, id := range s.IDs { 75 raddr := NewAddrFromNodeID(id) 76 pp.Register([]OverlayAddr{OverlayAddr(raddr)}) 77 peers[raddr.String()] = true 78 } 79 80 //启动配置单元并等待连接 81 err = pp.Start(s.Server) 82 if err != nil { 83 t.Fatal(err) 84 } 85 pp.Stop() 86 store.Close() 87 88 persistedStore, err := state.NewDBStore(dir) //用空的dbstore启动配置单元 89 90 s1, pp := newHiveTester(t, params, 1, persistedStore) 91 92 //启动配置单元并等待连接 93 94 pp.Start(s1.Server) 95 i := 0 96 pp.Overlay.EachAddr(nil, 256, func(addr OverlayAddr, po int, nn bool) bool { 97 delete(peers, addr.(*BzzAddr).String()) 98 i++ 99 return true 100 }) 101 if len(peers) != 0 || i != 5 { 102 t.Fatalf("invalid peers loaded") 103 } 104 } 105