From 28651a4ae25e7e99c2e54eebc064f4eed288b850 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 9 Apr 2025 12:40:53 +1000 Subject: [PATCH] Fix races in client tracker status event callback tests --- client-tracker_test.go | 62 ++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/client-tracker_test.go b/client-tracker_test.go index 8f164aef..9e14590b 100644 --- a/client-tracker_test.go +++ b/client-tracker_test.go @@ -127,6 +127,23 @@ func TestClientAnnounceFailure(t *testing.T) { cfg := TestingConfig(t) cfg.DisableTrackers = false + var to *Torrent + + cfg.Callbacks.StatusUpdated = append(cfg.Callbacks.StatusUpdated, func(e StatusUpdatedEvent) { + if e.Event == TrackerConnected { + // ignore + return + } + if e.Event == TrackerAnnounceError { + gotTrackerAnnounceErrorEvt = true + require.Equal(t, trackerUrl, e.Url) + require.Equal(t, to.InfoHash().HexString(), e.InfoHash) + require.Error(t, e.Error) + require.Equal(t, "test error", e.Error.Error()) + } + receivedStatusUpdate <- true + }) + cl, err := NewClient(cfg) require.NoError(t, err) defer cl.Close() @@ -142,24 +159,9 @@ func TestClientAnnounceFailure(t *testing.T) { {trackerUrl}, } - to, err := cl.AddTorrent(mi) + to, err = cl.AddTorrent(mi) require.NoError(t, err) - cfg.Callbacks.StatusUpdated = append(cfg.Callbacks.StatusUpdated, func(e StatusUpdatedEvent) { - if e.Event == TrackerConnected { - // ignore - return - } - if e.Event == TrackerAnnounceError { - gotTrackerAnnounceErrorEvt = true - require.Equal(t, trackerUrl, e.Url) - require.Equal(t, to.InfoHash().HexString(), e.InfoHash) - require.Error(t, e.Error) - require.Equal(t, "test error", e.Error.Error()) - } - receivedStatusUpdate <- true - }) - select { case <-timeout.C: case <-receivedStatusUpdate: @@ -178,19 +180,7 @@ func TestClientAnnounceSuccess(t *testing.T) { cfg := TestingConfig(t) cfg.DisableTrackers = false - cl, err := NewClient(cfg) - require.NoError(t, err) - defer cl.Close() - - dir, mi := testutil.GreetingTestTorrent() - defer os.RemoveAll(dir) - - mi.AnnounceList = [][]string{ - {trackerUrl}, - } - - to, err := cl.AddTorrent(mi) - require.NoError(t, err) + var to *Torrent cfg.Callbacks.StatusUpdated = append(cfg.Callbacks.StatusUpdated, func(e StatusUpdatedEvent) { if e.Event == TrackerConnected { @@ -206,6 +196,20 @@ func TestClientAnnounceSuccess(t *testing.T) { receivedStatusUpdate <- true }) + cl, err := NewClient(cfg) + require.NoError(t, err) + defer cl.Close() + + dir, mi := testutil.GreetingTestTorrent() + defer os.RemoveAll(dir) + + mi.AnnounceList = [][]string{ + {trackerUrl}, + } + + to, err = cl.AddTorrent(mi) + require.NoError(t, err) + select { case <-timeout.C: case <-receivedStatusUpdate: -- 2.48.1