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  }