github.1485827954.workers.dev/nektos/act@v0.2.63/pkg/runner/step_docker_test.go (about)

     1  package runner
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"io"
     7  	"testing"
     8  
     9  	"github.com/nektos/act/pkg/container"
    10  	"github.com/nektos/act/pkg/model"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/mock"
    13  )
    14  
    15  func TestStepDockerMain(t *testing.T) {
    16  	cm := &containerMock{}
    17  
    18  	var input *container.NewContainerInput
    19  
    20  	// mock the new container call
    21  	origContainerNewContainer := ContainerNewContainer
    22  	ContainerNewContainer = func(containerInput *container.NewContainerInput) container.ExecutionsEnvironment {
    23  		input = containerInput
    24  		return cm
    25  	}
    26  	defer (func() {
    27  		ContainerNewContainer = origContainerNewContainer
    28  	})()
    29  
    30  	ctx := context.Background()
    31  
    32  	sd := &stepDocker{
    33  		RunContext: &RunContext{
    34  			StepResults: map[string]*model.StepResult{},
    35  			Config:      &Config{},
    36  			Run: &model.Run{
    37  				JobID: "1",
    38  				Workflow: &model.Workflow{
    39  					Jobs: map[string]*model.Job{
    40  						"1": {
    41  							Defaults: model.Defaults{
    42  								Run: model.RunDefaults{
    43  									Shell: "bash",
    44  								},
    45  							},
    46  						},
    47  					},
    48  				},
    49  			},
    50  			JobContainer: cm,
    51  		},
    52  		Step: &model.Step{
    53  			ID:               "1",
    54  			Uses:             "docker://node:14",
    55  			WorkingDirectory: "workdir",
    56  		},
    57  	}
    58  	sd.RunContext.ExprEval = sd.RunContext.NewExpressionEvaluator(ctx)
    59  
    60  	cm.On("Pull", false).Return(func(ctx context.Context) error {
    61  		return nil
    62  	})
    63  
    64  	cm.On("Remove").Return(func(ctx context.Context) error {
    65  		return nil
    66  	})
    67  
    68  	cm.On("Create", []string(nil), []string(nil)).Return(func(ctx context.Context) error {
    69  		return nil
    70  	})
    71  
    72  	cm.On("Start", true).Return(func(ctx context.Context) error {
    73  		return nil
    74  	})
    75  
    76  	cm.On("Close").Return(func(ctx context.Context) error {
    77  		return nil
    78  	})
    79  
    80  	cm.On("Copy", "/var/run/act", mock.AnythingOfType("[]*container.FileEntry")).Return(func(ctx context.Context) error {
    81  		return nil
    82  	})
    83  
    84  	cm.On("UpdateFromEnv", "/var/run/act/workflow/envs.txt", mock.AnythingOfType("*map[string]string")).Return(func(ctx context.Context) error {
    85  		return nil
    86  	})
    87  
    88  	cm.On("UpdateFromEnv", "/var/run/act/workflow/statecmd.txt", mock.AnythingOfType("*map[string]string")).Return(func(ctx context.Context) error {
    89  		return nil
    90  	})
    91  
    92  	cm.On("UpdateFromEnv", "/var/run/act/workflow/outputcmd.txt", mock.AnythingOfType("*map[string]string")).Return(func(ctx context.Context) error {
    93  		return nil
    94  	})
    95  
    96  	cm.On("GetContainerArchive", ctx, "/var/run/act/workflow/pathcmd.txt").Return(io.NopCloser(&bytes.Buffer{}), nil)
    97  
    98  	err := sd.main()(ctx)
    99  	assert.Nil(t, err)
   100  
   101  	assert.Equal(t, "node:14", input.Image)
   102  
   103  	cm.AssertExpectations(t)
   104  }
   105  
   106  func TestStepDockerPrePost(t *testing.T) {
   107  	ctx := context.Background()
   108  	sd := &stepDocker{}
   109  
   110  	err := sd.pre()(ctx)
   111  	assert.Nil(t, err)
   112  
   113  	err = sd.post()(ctx)
   114  	assert.Nil(t, err)
   115  }