Browse Source

p2p: Test for peer.rw.flags race conditions

Andrey Petrov 7 years ago
parent
commit
193a402cc0
1 changed files with 18 additions and 11 deletions
  1. 18 11
      p2p/server_test.go

+ 18 - 11
p2p/server_test.go

@@ -177,18 +177,25 @@ func TestServerDial(t *testing.T) {
 			if peer := srv.Peers()[0]; peer.Info().Network.Trusted {
 				t.Errorf("peer is trusted prematurely: %v", peer)
 			}
-			srv.AddTrustedPeer(node)
-			if peer := srv.Peers()[0]; !peer.Info().Network.Trusted {
-				t.Errorf("peer is not trusted after AddTrustedPeer: %v", peer)
-			}
-			if peer := srv.Peers()[0]; peer.Inbound() {
-				t.Errorf("peer is marked inbound")
-			}
-			srv.RemoveTrustedPeer(node)
-			if peer := srv.Peers()[0]; peer.Info().Network.Trusted {
-				t.Errorf("peer is trusted after RemoveTrustedPeer: %v", peer)
-			}
+			done := make(chan bool)
+			go func() {
+				srv.AddTrustedPeer(node)
+				if peer := srv.Peers()[0]; !peer.Info().Network.Trusted {
+					t.Errorf("peer is not trusted after AddTrustedPeer: %v", peer)
+				}
+				srv.RemoveTrustedPeer(node)
+				if peer := srv.Peers()[0]; peer.Info().Network.Trusted {
+					t.Errorf("peer is trusted after RemoveTrustedPeer: %v", peer)
+				}
+				done <- true
+			}()
+
+			// Trigger potential race conditions
+			peer = srv.Peers()[0]
+			_ = peer.Inbound()
+			_ = peer.Info()
 
+			<-done
 		case <-time.After(1 * time.Second):
 			t.Error("server did not launch peer within one second")
 		}