Files
gotenberg/pkg/modules/webhook/async_context_test.go

57 lines
1.5 KiB
Go

package webhook
import (
"context"
"testing"
"time"
"github.com/gotenberg/gotenberg/v8/pkg/modules/api"
)
func TestDetachAsyncContext_PreservesDeadline(t *testing.T) {
deadline := time.Now().Add(2 * time.Hour)
reqCtx, reqCancel := context.WithDeadline(context.Background(), deadline)
defer reqCancel()
ctx := &api.Context{Context: reqCtx}
cancel := detachAsyncContext(ctx, func() {})
defer cancel()
got, ok := ctx.Deadline()
if !ok {
t.Fatal("expected the detached context to keep a deadline")
}
if !got.Equal(deadline) {
t.Errorf("expected deadline %v, got %v", deadline, got)
}
}
func TestDetachAsyncContext_SurvivesRequestCancellation(t *testing.T) {
reqCtx, reqCancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Hour))
ctx := &api.Context{Context: reqCtx}
cancel := detachAsyncContext(ctx, func() {})
defer cancel()
// Cancelling the inbound request must not abort the detached context.
reqCancel()
if err := ctx.Err(); err != nil {
t.Errorf("expected the detached context to survive request cancellation, got %v", err)
}
}
func TestDetachAsyncContext_CancelInvokesOriginal(t *testing.T) {
reqCtx, reqCancel := context.WithDeadline(context.Background(), time.Now().Add(time.Hour))
defer reqCancel()
called := 0
ctx := &api.Context{Context: reqCtx}
cancel := detachAsyncContext(ctx, func() { called++ })
cancel()
if called != 1 {
t.Errorf("expected the original cancel to be invoked once, got %d", called)
}
}