swarm/network: fix data races in TestInitialPeersMsg test

This commit is contained in:
Janos Guljas 2019-04-11 11:39:03 +02:00
parent 74acde4b08
commit 517476cbeb
2 changed files with 8 additions and 1 deletions

View file

@ -160,7 +160,10 @@ func testInitialPeersMsg(t *testing.T, peerPO, peerDepth int) {
// block until control peer is found among hive peers // block until control peer is found among hive peers
found := false found := false
for attempts := 0; attempts < 20; attempts++ { for attempts := 0; attempts < 20; attempts++ {
if _, found = hive.peers[peerID]; found { hive.lock.Lock()
_, found = hive.peers[peerID]
hive.lock.Unlock()
if found {
break break
} }
time.Sleep(1 * time.Millisecond) time.Sleep(1 * time.Millisecond)
@ -171,7 +174,9 @@ func testInitialPeersMsg(t *testing.T, peerPO, peerDepth int) {
} }
// pivotDepth is the advertised depth of the pivot node we expect in the outgoing subPeersMsg // pivotDepth is the advertised depth of the pivot node we expect in the outgoing subPeersMsg
hive.Kademlia.lock.RLock() // protect Kademlia.conns that are read in Kademlia.saturation()
pivotDepth := hive.saturation() pivotDepth := hive.saturation()
hive.Kademlia.lock.RUnlock()
// the test exchange is as follows: // the test exchange is as follows:
// 1. pivot sends to the control peer a `subPeersMsg` advertising its depth (ignored) // 1. pivot sends to the control peer a `subPeersMsg` advertising its depth (ignored)
// 2. peer sends to pivot a `subPeersMsg` advertising its own depth (arbitrarily chosen) // 2. peer sends to pivot a `subPeersMsg` advertising its own depth (arbitrarily chosen)

View file

@ -131,9 +131,11 @@ func newBzzBaseTesterWithAddrs(prvkey *ecdsa.PrivateKey, addrs [][]byte, spec *p
ProtocolTester: s, ProtocolTester: s,
cs: cs, cs: cs,
} }
mu.Lock()
for _, n := range pt.Nodes { for _, n := range pt.Nodes {
nodeAddrs = append(nodeAddrs, nodeToAddr[n.ID()]) nodeAddrs = append(nodeAddrs, nodeToAddr[n.ID()])
} }
mu.Unlock()
return pt, nodeAddrs, nil return pt, nodeAddrs, nil
} }