github.com/nektos/act@v0.2.83/pkg/common/context_test.go (about) 1 package common 2 3 import ( 4 "context" 5 "os" 6 "syscall" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestGracefulJobCancellationViaSigint(t *testing.T) { 14 ctx, cancel, channel := createGracefulJobCancellationContext() 15 defer cancel() 16 assert.NotNil(t, ctx) 17 assert.NotNil(t, cancel) 18 assert.NotNil(t, channel) 19 cancelCtx := JobCancelContext(ctx) 20 assert.NotNil(t, cancelCtx) 21 assert.NoError(t, ctx.Err()) 22 assert.NoError(t, cancelCtx.Err()) 23 channel <- os.Interrupt 24 select { 25 case <-time.After(1 * time.Second): 26 t.Fatal("context not canceled") 27 case <-cancelCtx.Done(): 28 case <-ctx.Done(): 29 } 30 if assert.Error(t, cancelCtx.Err(), "context canceled") { 31 assert.Equal(t, context.Canceled, cancelCtx.Err()) 32 } 33 assert.NoError(t, ctx.Err()) 34 channel <- os.Interrupt 35 select { 36 case <-time.After(1 * time.Second): 37 t.Fatal("context not canceled") 38 case <-ctx.Done(): 39 } 40 if assert.Error(t, ctx.Err(), "context canceled") { 41 assert.Equal(t, context.Canceled, ctx.Err()) 42 } 43 } 44 45 func TestForceCancellationViaSigterm(t *testing.T) { 46 ctx, cancel, channel := createGracefulJobCancellationContext() 47 defer cancel() 48 assert.NotNil(t, ctx) 49 assert.NotNil(t, cancel) 50 assert.NotNil(t, channel) 51 cancelCtx := JobCancelContext(ctx) 52 assert.NotNil(t, cancelCtx) 53 assert.NoError(t, ctx.Err()) 54 assert.NoError(t, cancelCtx.Err()) 55 channel <- syscall.SIGTERM 56 select { 57 case <-time.After(1 * time.Second): 58 t.Fatal("context not canceled") 59 case <-cancelCtx.Done(): 60 } 61 select { 62 case <-time.After(1 * time.Second): 63 t.Fatal("context not canceled") 64 case <-ctx.Done(): 65 } 66 if assert.Error(t, ctx.Err(), "context canceled") { 67 assert.Equal(t, context.Canceled, ctx.Err()) 68 } 69 if assert.Error(t, cancelCtx.Err(), "context canceled") { 70 assert.Equal(t, context.Canceled, cancelCtx.Err()) 71 } 72 } 73 74 func TestCreateGracefulJobCancellationContext(t *testing.T) { 75 ctx, cancel := CreateGracefulJobCancellationContext() 76 defer cancel() 77 assert.NotNil(t, ctx) 78 assert.NotNil(t, cancel) 79 cancelCtx := JobCancelContext(ctx) 80 assert.NotNil(t, cancelCtx) 81 assert.NoError(t, cancelCtx.Err()) 82 } 83 84 func TestCreateGracefulJobCancellationContextCancelFunc(t *testing.T) { 85 ctx, cancel := CreateGracefulJobCancellationContext() 86 assert.NotNil(t, ctx) 87 assert.NotNil(t, cancel) 88 cancelCtx := JobCancelContext(ctx) 89 assert.NotNil(t, cancelCtx) 90 assert.NoError(t, cancelCtx.Err()) 91 cancel() 92 if assert.Error(t, ctx.Err(), "context canceled") { 93 assert.Equal(t, context.Canceled, ctx.Err()) 94 } 95 if assert.Error(t, cancelCtx.Err(), "context canceled") { 96 assert.Equal(t, context.Canceled, cancelCtx.Err()) 97 } 98 }