github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/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 19:16:43</date> 10 //</624450113762234368> 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 node := s.Nodes[0] 39 raddr := NewAddr(node) 40 pp.Register(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.Nodes[0].ID(), 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 if err != nil { 70 t.Fatal(err) 71 } 72 73 params := NewHiveParams() 74 s, pp := newHiveTester(t, params, 5, store) 75 76 peers := make(map[string]bool) 77 for _, node := range s.Nodes { 78 raddr := NewAddr(node) 79 pp.Register(raddr) 80 peers[raddr.String()] = true 81 } 82 83 //启动配置单元并等待连接 84 err = pp.Start(s.Server) 85 if err != nil { 86 t.Fatal(err) 87 } 88 pp.Stop() 89 store.Close() 90 91 persistedStore, err := state.NewDBStore(dir) //用空的dbstore启动配置单元 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 s1, pp := newHiveTester(t, params, 1, persistedStore) 97 98 //启动配置单元并等待连接 99 100 pp.Start(s1.Server) 101 i := 0 102 pp.Kademlia.EachAddr(nil, 256, func(addr *BzzAddr, po int) bool { 103 delete(peers, addr.String()) 104 i++ 105 return true 106 }) 107 if i != 5 { 108 t.Errorf("invalid number of entries: got %v, want %v", i, 5) 109 } 110 if len(peers) != 0 { 111 t.Fatalf("%d peers left over: %v", len(peers), peers) 112 } 113 } 114