From 8f457c9c93795f6b874e2517af632d69ff6cdfaa Mon Sep 17 00:00:00 2001 From: "Sorawis Nilparuk (Bo)" Date: Fri, 19 Apr 2024 09:23:40 -0700 Subject: [PATCH] make newSendCtx also handle context.DeadlineExceeded (#4603) * make newSendCtx also handle context.DeadlineExceeded * add assertion to check that context is valid --- internal/event/context.go | 2 +- internal/event/context_unexported_test.go | 24 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/internal/event/context.go b/internal/event/context.go index fa20e8c53..bef6c3668 100644 --- a/internal/event/context.go +++ b/internal/event/context.go @@ -368,7 +368,7 @@ func newSendCtx(ctx context.Context) (context.Context, context.CancelFunc) { switch { case ctx == nil: return context.Background(), nil - case ctx.Err() == context.Canceled: + case ctx.Err() == context.Canceled || ctx.Err() == context.DeadlineExceeded: sendCtx, sendCancel = context.WithTimeout(context.Background(), cancelledSendTimeout) info, ok := RequestInfoFromContext(ctx) if ok { diff --git a/internal/event/context_unexported_test.go b/internal/event/context_unexported_test.go index 48ccdd77d..fcaf193bf 100644 --- a/internal/event/context_unexported_test.go +++ b/internal/event/context_unexported_test.go @@ -6,6 +6,7 @@ package event import ( "context" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -44,6 +45,28 @@ func Test_newSendCtx(t *testing.T) { }(), wantCancel: true, }, + { + name: "deadline-exceeded-with-info", + ctx: func() context.Context { + var err error + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-1*time.Millisecond)) + defer cancel() + ctx, err = NewRequestInfoContext(ctx, testInfo) + require.NoError(t, err) + return ctx + }(), + wantCancel: true, + wantInfo: true, + }, + { + name: "deadline-exceeded-no-info", + ctx: func() context.Context { + ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-1*time.Millisecond)) + defer cancel() + return ctx + }(), + wantCancel: true, + }, { name: "no-info", ctx: context.Background(), @@ -65,6 +88,7 @@ func Test_newSendCtx(t *testing.T) { ctx, cancel := newSendCtx(tt.ctx) require.NotNil(ctx) assert.True(ctx.Err() != context.Canceled) + assert.True(ctx.Err() != context.DeadlineExceeded) if tt.wantCancel { require.NotNil(cancel) } else {