diff options
author | Andrey Petrov <andrey.petrov@shazow.net> | 2018-06-08 00:49:07 +0800 |
---|---|---|
committer | Andrey Petrov <andrey.petrov@shazow.net> | 2018-06-22 00:22:47 +0800 |
commit | 193a402cc08e69f8c6b92106e8e81104d260d26c (patch) | |
tree | 86e4c9ef1809653c8c19cb6411ca07a128deff94 | |
parent | dcca66bce8ec79bcf0e06c32f57d0011f8d9fa93 (diff) | |
download | go-tangerine-193a402cc08e69f8c6b92106e8e81104d260d26c.tar.gz go-tangerine-193a402cc08e69f8c6b92106e8e81104d260d26c.tar.zst go-tangerine-193a402cc08e69f8c6b92106e8e81104d260d26c.zip |
p2p: Test for peer.rw.flags race conditions
-rw-r--r-- | p2p/server_test.go | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/p2p/server_test.go b/p2p/server_test.go index 7eca46938..65897e018 100644 --- a/p2p/server_test.go +++ b/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") } |