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