github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/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 12:09:47</date> 10 //</624342673557295104> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package simulation 29 30 import ( 31 "context" 32 "sync" 33 "testing" 34 "time" 35 ) 36 37 // 38 // 39 // 40 // 41 func TestPeerEvents(t *testing.T) { 42 sim := New(noopServiceFuncMap) 43 defer sim.Close() 44 45 _, err := sim.AddNodes(2) 46 if err != nil { 47 t.Fatal(err) 48 } 49 50 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) 51 defer cancel() 52 events := sim.PeerEvents(ctx, sim.NodeIDs()) 53 54 // 55 expectedEventCount := 2 56 57 var wg sync.WaitGroup 58 wg.Add(expectedEventCount) 59 60 go func() { 61 for e := range events { 62 if e.Error != nil { 63 if e.Error == context.Canceled { 64 return 65 } 66 t.Error(e.Error) 67 continue 68 } 69 wg.Done() 70 } 71 }() 72 73 err = sim.ConnectNodesChain(sim.NodeIDs()) 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 wg.Wait() 79 } 80 81 func TestPeerEventsTimeout(t *testing.T) { 82 sim := New(noopServiceFuncMap) 83 defer sim.Close() 84 85 _, err := sim.AddNodes(2) 86 if err != nil { 87 t.Fatal(err) 88 } 89 90 ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) 91 defer cancel() 92 events := sim.PeerEvents(ctx, sim.NodeIDs()) 93 94 done := make(chan struct{}) 95 go func() { 96 for e := range events { 97 if e.Error == context.Canceled { 98 return 99 } 100 if e.Error == context.DeadlineExceeded { 101 close(done) 102 return 103 } else { 104 t.Fatal(e.Error) 105 } 106 } 107 }() 108 109 select { 110 case <-time.After(time.Second): 111 t.Error("no context deadline received") 112 case <-done: 113 // 114 } 115 } 116