diff --git a/swarm/network/stream/common_test.go b/swarm/network/stream/common_test.go index 2eeed9bbdd..77a5a33bd2 100644 --- a/swarm/network/stream/common_test.go +++ b/swarm/network/stream/common_test.go @@ -320,3 +320,30 @@ func createTestLocalStorageForID(id enode.ID, addr *network.BzzAddr) (storage.Ch } return store, datadir, nil } + +// watchDisconnections receives simulation peer events in a new goroutine and sets atomic value +// disconnected to true in case of a disconnect event. +func watchDisconnections(ctx context.Context, sim *simulation.Simulation) (disconnected atomic.Value) { + log.Debug("Watching for disconnections") + disconnections := sim.PeerEvents( + context.Background(), + sim.NodeIDs(), + simulation.NewPeerEventsFilter().Drop(), + ) + go func() { + for { + select { + case <-ctx.Done(): + return + case d := <-disconnections: + if d.Error != nil { + log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", d.Error) + } else { + log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) + } + disconnected.Store(true) + } + } + }() + return disconnected +} diff --git a/swarm/network/stream/delivery_test.go b/swarm/network/stream/delivery_test.go index 13c82206b6..ce118e3254 100644 --- a/swarm/network/stream/delivery_test.go +++ b/swarm/network/stream/delivery_test.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "sync" - "sync/atomic" "testing" "time" @@ -549,29 +548,7 @@ func testDeliveryFromNodes(t *testing.T, nodes, chunkCount int, skipCheck bool) retErrC <- err }() - log.Debug("Watching for disconnections") - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - - var disconnected atomic.Value - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", err) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.Store(true) - } - } - }() + disconnected := watchDisconnections(ctx, sim) defer func() { if err != nil { if yes, ok := disconnected.Load().(bool); ok && yes { @@ -688,28 +665,7 @@ func benchmarkDeliveryFromNodes(b *testing.B, nodes, chunkCount int, skipCheck b return err } - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - - var disconnected atomic.Value - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", err) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.Store(true) - } - } - }() + disconnected := watchDisconnections(ctx, sim) defer func() { if err != nil { if yes, ok := disconnected.Load().(bool); ok && yes { diff --git a/swarm/network/stream/intervals_test.go b/swarm/network/stream/intervals_test.go index cf77ebb0a1..682cb9ddb5 100644 --- a/swarm/network/stream/intervals_test.go +++ b/swarm/network/stream/intervals_test.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "sync" - "sync/atomic" "testing" "time" @@ -134,34 +133,12 @@ func testIntervals(t *testing.T, live bool, history *Range, skipCheck bool) { liveErrC := make(chan error) historyErrC := make(chan error) - log.Debug("Watching for disconnections") - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - err = registry.Subscribe(storer, NewStream(externalStreamName, "", live), history, Top) if err != nil { return err } - var disconnected atomic.Value - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", err) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.Store(true) - } - } - }() + disconnected := watchDisconnections(ctx, sim) defer func() { if err != nil { if yes, ok := disconnected.Load().(bool); ok && yes { diff --git a/swarm/network/stream/snapshot_sync_test.go b/swarm/network/stream/snapshot_sync_test.go index 02b8e78858..ff73073c50 100644 --- a/swarm/network/stream/snapshot_sync_test.go +++ b/swarm/network/stream/snapshot_sync_test.go @@ -22,7 +22,6 @@ import ( "os" "runtime" "sync" - "sync/atomic" "testing" "time" @@ -182,28 +181,7 @@ func testSyncingViaGlobalSync(t *testing.T, chunkCount int, nodeCount int) { t.Fatal(err) } - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - - var disconnected atomic.Value - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", err) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.Store(true) - } - } - }() + disconnected := watchDisconnections(ctx, sim) result := runSim(conf, ctx, sim, chunkCount) diff --git a/swarm/network/stream/syncer_test.go b/swarm/network/stream/syncer_test.go index 95dfcb5a64..5d2d27120c 100644 --- a/swarm/network/stream/syncer_test.go +++ b/swarm/network/stream/syncer_test.go @@ -24,7 +24,6 @@ import ( "math" "os" "sync" - "sync/atomic" "testing" "time" @@ -47,7 +46,7 @@ func TestSyncerSimulation(t *testing.T) { testSyncBetweenNodes(t, 2, dataChunkCount, true, 1) // This test uses much more memory when running with // race detector. Allow it to finish successfully by - // reducing it s scope, and still check for data races + // reducing its scope, and still check for data races // with the smallest number of nodes. if !raceTest { testSyncBetweenNodes(t, 4, dataChunkCount, true, 1) @@ -140,28 +139,7 @@ func testSyncBetweenNodes(t *testing.T, nodes, chunkCount int, skipCheck bool, p nodeIndex[id] = i } - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - - var disconnected atomic.Value - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", err) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.Store(true) - } - } - }() + disconnected := watchDisconnections(ctx, sim) defer func() { if err != nil { if yes, ok := disconnected.Load().(bool); ok && yes {