@@ -22,7 +22,9 @@ package les
22
22
import (
23
23
"context"
24
24
"crypto/rand"
25
+ "fmt"
25
26
"math/big"
27
+ "sync/atomic"
26
28
"testing"
27
29
"time"
28
30
@@ -347,7 +349,7 @@ func (p *testPeer) close() {
347
349
p .app .Close ()
348
350
}
349
351
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 ) {
351
353
// Create a message pipe to communicate through
352
354
app , net := p2p .MsgPipe ()
353
355
@@ -371,11 +373,25 @@ func newTestPeerPair(name string, version int, server *serverHandler, client *cl
371
373
go func () {
372
374
select {
373
375
case <- client .closeCh :
374
- errc1 <- p2p .DiscQuitting
375
- case errc1 <- client .handle (peer2 ):
376
+ errc2 <- p2p .DiscQuitting
377
+ case errc2 <- client .handle (peer2 ):
376
378
}
377
379
}()
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
379
395
}
380
396
381
397
// 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
514
530
callback (scIndexer , sbIndexer , sbtIndexer )
515
531
}
516
532
var (
533
+ err error
517
534
speer , cpeer * testPeer
518
- err1 , err2 <- chan error
519
535
)
520
536
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
+ }
522
543
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" )
528
547
}
529
548
}
530
549
s := & testServer {
0 commit comments