github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/network/hive_test.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 // 10 // 11 // 12 // 13 //根据GNU发布的较低通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊图书馆的发行目的是希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU较低的通用公共许可证,了解更多详细信息。 21 // 22 //你应该收到一份GNU较低级别的公共许可证副本 23 //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 package network 26 27 import ( 28 "io/ioutil" 29 "log" 30 "os" 31 "testing" 32 33 p2ptest "github.com/ethereum/go-ethereum/p2p/testing" 34 "github.com/ethereum/go-ethereum/swarm/state" 35 ) 36 37 func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive) { 38 //设置 39 addr := RandomAddr() //测试的对等地址 40 to := NewKademlia(addr.OAddr, NewKadParams()) 41 pp := NewHive(params, to, store) //蜂箱 42 43 return newBzzBaseTester(t, n, addr, DiscoverySpec, pp.Run), pp 44 } 45 46 func TestRegisterAndConnect(t *testing.T) { 47 params := NewHiveParams() 48 s, pp := newHiveTester(t, params, 1, nil) 49 50 id := s.IDs[0] 51 raddr := NewAddrFromNodeID(id) 52 pp.Register([]OverlayAddr{OverlayAddr(raddr)}) 53 54 //启动配置单元并等待连接 55 err := pp.Start(s.Server) 56 if err != nil { 57 t.Fatal(err) 58 } 59 defer pp.Stop() 60 //检索和广播 61 err = s.TestDisconnected(&p2ptest.Disconnect{ 62 Peer: s.IDs[0], 63 Error: nil, 64 }) 65 66 if err == nil || err.Error() != "timed out waiting for peers to disconnect" { 67 t.Fatalf("expected peer to connect") 68 } 69 } 70 71 func TestHiveStatePersistance(t *testing.T) { 72 log.SetOutput(os.Stdout) 73 74 dir, err := ioutil.TempDir("", "hive_test_store") 75 if err != nil { 76 panic(err) 77 } 78 defer os.RemoveAll(dir) 79 80 store, err := state.NewDBStore(dir) //用空的dbstore启动配置单元 81 82 params := NewHiveParams() 83 s, pp := newHiveTester(t, params, 5, store) 84 85 peers := make(map[string]bool) 86 for _, id := range s.IDs { 87 raddr := NewAddrFromNodeID(id) 88 pp.Register([]OverlayAddr{OverlayAddr(raddr)}) 89 peers[raddr.String()] = true 90 } 91 92 //启动配置单元并等待连接 93 err = pp.Start(s.Server) 94 if err != nil { 95 t.Fatal(err) 96 } 97 pp.Stop() 98 store.Close() 99 100 persistedStore, err := state.NewDBStore(dir) //用空的dbstore启动配置单元 101 102 s1, pp := newHiveTester(t, params, 1, persistedStore) 103 104 //启动配置单元并等待连接 105 106 pp.Start(s1.Server) 107 i := 0 108 pp.Overlay.EachAddr(nil, 256, func(addr OverlayAddr, po int, nn bool) bool { 109 delete(peers, addr.(*BzzAddr).String()) 110 i++ 111 return true 112 }) 113 if len(peers) != 0 || i != 5 { 114 t.Fatalf("invalid peers loaded") 115 } 116 }