From 31dce412769cf2f9a2de387bba904e5feb8f949f Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Tue, 7 Feb 2023 15:36:13 +0100 Subject: [PATCH] test: Fix race condition with initialization of messageIDs Need to make sure the messageIDs slice is created properly before it is used async in a different goroutine. --- internal/bridge/user_event_test.go | 14 +++++--------- internal/user/events.go | 4 +--- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/internal/bridge/user_event_test.go b/internal/bridge/user_event_test.go index 4bac18ea..e8d06d31 100644 --- a/internal/bridge/user_event_test.go +++ b/internal/bridge/user_event_test.go @@ -113,12 +113,13 @@ func TestBridge_User_BadMessage_NoBadEvent(t *testing.T) { var messageIDs []string + // Create 10 more messages for the user, generating events. + withClient(ctx, t, s, "user", password, func(ctx context.Context, c *proton.Client) { + messageIDs = createNumMessages(ctx, t, c, addrID, proton.InboxLabel, 10) + }) + // If bridge attempts to sync the new messages, it should get a BadRequest error. s.AddStatusHook(func(req *http.Request) (int, bool) { - if len(messageIDs) < 3 { - return 0, false - } - if strings.Contains(req.URL.Path, "/mail/v4/messages/"+messageIDs[2]) { return http.StatusUnprocessableEntity, true } @@ -126,11 +127,6 @@ func TestBridge_User_BadMessage_NoBadEvent(t *testing.T) { return 0, false }) - // Create 10 more messages for the user, generating events. - withClient(ctx, t, s, "user", password, func(ctx context.Context, c *proton.Client) { - messageIDs = createNumMessages(ctx, t, c, addrID, proton.InboxLabel, 10) - }) - // Remove messages withClient(ctx, t, s, "user", password, func(ctx context.Context, c *proton.Client) { require.NoError(t, c.DeleteMessage(ctx, messageIDs...)) diff --git a/internal/user/events.go b/internal/user/events.go index 03cc0f8e..1c88864e 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -420,9 +420,7 @@ func (user *User) handleMessageEvents(ctx context.Context, messageEvents []proto switch event.Action { case proton.EventCreate: - updates, err := user.handleCreateMessageEvent( - logging.WithLogrusField(ctx, "action", "create message"), - event) + updates, err := user.handleCreateMessageEvent(logging.WithLogrusField(ctx, "action", "create message"), event) if err != nil { if rerr := user.reporter.ReportMessageWithContext("Failed to apply create message event", reporter.Context{ "error": err,