From dbd7f1c1eff759886c46fa5bd158179ea7e22554 Mon Sep 17 00:00:00 2001 From: Pavel Zbitskiy Date: Wed, 7 May 2025 11:11:45 -0400 Subject: [PATCH 1/2] tests: fix TestP2PRelay data race --- network/p2pNetwork_test.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/network/p2pNetwork_test.go b/network/p2pNetwork_test.go index a7b15fad4f..713379f21f 100644 --- a/network/p2pNetwork_test.go +++ b/network/p2pNetwork_test.go @@ -894,7 +894,11 @@ func TestP2PRelay(t *testing.T) { return netA.hasPeers() && netB.hasPeers() }, 2*time.Second, 50*time.Millisecond) - makeCounterHandler := func(numExpected int, counter *atomic.Uint32, msgs *[][]byte) ([]TaggedMessageValidatorHandler, chan struct{}) { + type logMessages struct { + msgs [][]byte + mu sync.Mutex + } + makeCounterHandler := func(numExpected int, counter *atomic.Uint32, msgSink *logMessages) ([]TaggedMessageValidatorHandler, chan struct{}) { counterDone := make(chan struct{}) counterHandler := []TaggedMessageValidatorHandler{ { @@ -903,8 +907,10 @@ func TestP2PRelay(t *testing.T) { ValidateHandleFunc }{ ValidateHandleFunc(func(msg IncomingMessage) OutgoingMessage { - if msgs != nil { - *msgs = append(*msgs, msg.Data) + if msgSink != nil { + msgSink.mu.Lock() + msgSink.msgs = append(msgSink.msgs, msg.Data) + msgSink.mu.Unlock() } if count := counter.Add(1); int(count) >= numExpected { close(counterDone) @@ -970,8 +976,8 @@ func TestP2PRelay(t *testing.T) { const expectedMsgs = 10 counter.Store(0) - var loggedMsgs [][]byte - counterHandler, counterDone = makeCounterHandler(expectedMsgs, &counter, &loggedMsgs) + var msgsSink logMessages + counterHandler, counterDone = makeCounterHandler(expectedMsgs, &counter, &msgsSink) netA.ClearValidatorHandlers() netA.RegisterValidatorHandlers(counterHandler) @@ -991,10 +997,10 @@ func TestP2PRelay(t *testing.T) { case <-counterDone: case <-time.After(3 * time.Second): if c := counter.Load(); c < expectedMsgs { - t.Logf("Logged messages: %v", loggedMsgs) + t.Logf("Logged messages: %v", msgsSink.msgs) require.Failf(t, "One or more messages failed to reach destination network", "%d > %d", expectedMsgs, c) } else if c > expectedMsgs { - t.Logf("Logged messages: %v", loggedMsgs) + t.Logf("Logged messages: %v", msgsSink.msgs) require.Failf(t, "One or more messages that were expected to be dropped, reached destination network", "%d < %d", expectedMsgs, c) } } From 871611ecac6140f5cf0bfaf2278efe9c0c34b3f6 Mon Sep 17 00:00:00 2001 From: Pavel Zbitskiy Date: Wed, 7 May 2025 12:32:39 -0400 Subject: [PATCH 2/2] linter: sync.Mutex -> deadlock.mutex --- network/p2pNetwork_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/network/p2pNetwork_test.go b/network/p2pNetwork_test.go index 713379f21f..d78b9a7573 100644 --- a/network/p2pNetwork_test.go +++ b/network/p2pNetwork_test.go @@ -40,6 +40,7 @@ import ( "github.com/algorand/go-algorand/network/phonebook" "github.com/algorand/go-algorand/protocol" "github.com/algorand/go-algorand/test/partitiontest" + "github.com/algorand/go-deadlock" pubsub "github.com/libp2p/go-libp2p-pubsub" pb "github.com/libp2p/go-libp2p-pubsub/pb" @@ -896,7 +897,7 @@ func TestP2PRelay(t *testing.T) { type logMessages struct { msgs [][]byte - mu sync.Mutex + mu deadlock.Mutex } makeCounterHandler := func(numExpected int, counter *atomic.Uint32, msgSink *logMessages) ([]TaggedMessageValidatorHandler, chan struct{}) { counterDone := make(chan struct{})