github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/network/simulation/events_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 //</624450114299105280> 11 12 13 package simulation 14 15 import ( 16 "context" 17 "sync" 18 "testing" 19 "time" 20 ) 21 22 //testpeerEvents创建模拟,添加两个节点, 23 //注册对等事件,连接链中的节点 24 //并等待连接事件的数量 25 //被接受。 26 func TestPeerEvents(t *testing.T) { 27 sim := New(noopServiceFuncMap) 28 defer sim.Close() 29 30 _, err := sim.AddNodes(2) 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) 36 defer cancel() 37 events := sim.PeerEvents(ctx, sim.NodeIDs()) 38 39 //两个节点->两个连接事件 40 expectedEventCount := 2 41 42 var wg sync.WaitGroup 43 wg.Add(expectedEventCount) 44 45 go func() { 46 for e := range events { 47 if e.Error != nil { 48 if e.Error == context.Canceled { 49 return 50 } 51 t.Error(e.Error) 52 continue 53 } 54 wg.Done() 55 } 56 }() 57 58 err = sim.Net.ConnectNodesChain(sim.NodeIDs()) 59 if err != nil { 60 t.Fatal(err) 61 } 62 63 wg.Wait() 64 } 65 66 func TestPeerEventsTimeout(t *testing.T) { 67 sim := New(noopServiceFuncMap) 68 defer sim.Close() 69 70 _, err := sim.AddNodes(2) 71 if err != nil { 72 t.Fatal(err) 73 } 74 75 ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) 76 defer cancel() 77 events := sim.PeerEvents(ctx, sim.NodeIDs()) 78 79 done := make(chan struct{}) 80 errC := make(chan error) 81 go func() { 82 for e := range events { 83 if e.Error == context.Canceled { 84 return 85 } 86 if e.Error == context.DeadlineExceeded { 87 close(done) 88 return 89 } else { 90 errC <- e.Error 91 } 92 } 93 }() 94 95 select { 96 case <-time.After(time.Second): 97 t.Fatal("no context deadline received") 98 case err := <-errC: 99 t.Fatal(err) 100 case <-done: 101 //一切正常,检测到上下文截止时间 102 } 103 } 104