mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			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) | ||
|  | 	}) | ||
|  | } |