@@ -22,7 +22,9 @@ package les
2222import (
2323 "context"
2424 "crypto/rand"
25+ "fmt"
2526 "math/big"
27+ "sync/atomic"
2628 "testing"
2729 "time"
2830
@@ -347,7 +349,7 @@ func (p *testPeer) close() {
347349 p .app .Close ()
348350}
349351
350- func newTestPeerPair (name string , version int , server * serverHandler , client * clientHandler ) (* testPeer , <- chan error , * testPeer , <- chan error ) {
352+ func newTestPeerPair (name string , version int , server * serverHandler , client * clientHandler ) (* testPeer , * testPeer , error ) {
351353 // Create a message pipe to communicate through
352354 app , net := p2p .MsgPipe ()
353355
@@ -371,11 +373,25 @@ func newTestPeerPair(name string, version int, server *serverHandler, client *cl
371373 go func () {
372374 select {
373375 case <- client .closeCh :
374- errc1 <- p2p .DiscQuitting
375- case errc1 <- client .handle (peer2 ):
376+ errc2 <- p2p .DiscQuitting
377+ case errc2 <- client .handle (peer2 ):
376378 }
377379 }()
378- return & testPeer {cpeer : peer1 , net : net , app : app }, errc1 , & testPeer {speer : peer2 , net : app , app : net }, errc2
380+ // Ensure the connection is established or exits when any error occurs
381+ for {
382+ select {
383+ case err := <- errc1 :
384+ return nil , nil , fmt .Errorf ("Failed to establish protocol connection %v" , err )
385+ case err := <- errc2 :
386+ return nil , nil , fmt .Errorf ("Failed to establish protocol connection %v" , err )
387+ default :
388+ }
389+ if atomic .LoadUint32 (& peer1 .serving ) == 1 && atomic .LoadUint32 (& peer2 .serving ) == 1 {
390+ break
391+ }
392+ time .Sleep (50 * time .Millisecond )
393+ }
394+ return & testPeer {cpeer : peer1 , net : net , app : app }, & testPeer {speer : peer2 , net : app , app : net }, nil
379395}
380396
381397// handshake simulates a trivial handshake that expects the same state from the
@@ -514,17 +530,20 @@ func newClientServerEnv(t *testing.T, blocks int, protocol int, callback indexer
514530 callback (scIndexer , sbIndexer , sbtIndexer )
515531 }
516532 var (
533+ err error
517534 speer , cpeer * testPeer
518- err1 , err2 <- chan error
519535 )
520536 if connect {
521- cpeer , err1 , speer , err2 = newTestPeerPair ("peer" , protocol , server , client )
537+ done := make (chan struct {})
538+ client .syncDone = func () { close (done ) }
539+ cpeer , speer , err = newTestPeerPair ("peer" , protocol , server , client )
540+ if err != nil {
541+ t .Fatalf ("Failed to connect testing peers %v" , err )
542+ }
522543 select {
523- case <- time .After (time .Millisecond * 300 ):
524- case err := <- err1 :
525- t .Fatalf ("peer 1 handshake error: %v" , err )
526- case err := <- err2 :
527- t .Fatalf ("peer 2 handshake error: %v" , err )
544+ case <- done :
545+ case <- time .After (3 * time .Second ):
546+ t .Fatal ("test peer did not connect and sync within 3s" )
528547 }
529548 }
530549 s := & testServer {
0 commit comments