grafana/pkg/util/contextutil_test.go

47 lines
1.2 KiB
Go

package util
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/require"
)
func TestWithCancelWithReason(t *testing.T) {
t.Run("should add custom reason to the standard error", func(t *testing.T) {
expected := errors.New("test-err")
ctx, fn := WithCancelCause(context.Background())
fn(expected)
select {
case <-ctx.Done():
default:
require.Fail(t, "the context was not cancelled")
}
require.ErrorIs(t, ctx.Err(), expected)
require.ErrorIs(t, ctx.Err(), context.Canceled)
})
t.Run("should return only the first reason if called multiple times", func(t *testing.T) {
expected := errors.New("test-err")
ctx, fn := WithCancelCause(context.Background())
fn(expected)
fn(errors.New("other error"))
require.ErrorIs(t, ctx.Err(), expected)
})
t.Run("should return only the first reason if called multiple times", func(t *testing.T) {
expected := errors.New("test-err")
ctx, fn := WithCancelCause(context.Background())
fn(expected)
fn(errors.New("other error"))
require.ErrorIs(t, ctx.Err(), expected)
})
t.Run("should return context.Canceled if no reason provided", func(t *testing.T) {
ctx, fn := WithCancelCause(context.Background())
fn(nil)
require.Equal(t, ctx.Err(), context.Canceled)
})
}