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  }