Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions actions/docker/docker_compose_ls_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func NewDockerComposeLsAction(logger *slog.Logger) *DockerComposeLsActionBuilder
}

// WithParameters sets the parameters for working directory and configuration
func (b *DockerComposeLsActionBuilder) WithParameters(workingDirParam task_engine.ActionParameter, config DockerComposeLsConfig) *task_engine.Action[*DockerComposeLsAction] {
func (b *DockerComposeLsActionBuilder) WithParameters(workingDirParam task_engine.ActionParameter, config DockerComposeLsConfig) (*task_engine.Action[*DockerComposeLsAction], error) {
// Determine whether to treat the provided parameter as active
// - Non-empty static string: active (resolve at runtime)
// - Non-string static parameter: active (so Execute will error as tests expect)
Expand Down Expand Up @@ -79,7 +79,7 @@ func (b *DockerComposeLsActionBuilder) WithParameters(workingDirParam task_engin
ID: id,
Name: "Docker Compose LS",
Wrapped: action,
}
}, nil
}

// DockerComposeLsOption is a function type for configuring DockerComposeLsAction
Expand Down
123 changes: 74 additions & 49 deletions actions/docker/docker_compose_ls_action_test.go

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions actions/docker/docker_load_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func NewDockerLoadAction(logger *slog.Logger) *DockerLoadActionBuilder {
}

// WithParameters sets the parameters for tar file path
func (b *DockerLoadActionBuilder) WithParameters(tarFilePathParam task_engine.ActionParameter) *task_engine.Action[*DockerLoadAction] {
func (b *DockerLoadActionBuilder) WithParameters(tarFilePathParam task_engine.ActionParameter) (*task_engine.Action[*DockerLoadAction], error) {
b.tarFilePathParam = tarFilePathParam

action := &DockerLoadAction{
Expand Down Expand Up @@ -62,7 +62,7 @@ func (b *DockerLoadActionBuilder) WithParameters(tarFilePathParam task_engine.Ac
ID: id,
Name: "Docker Load",
Wrapped: action,
}
}, nil
}

// WithOptions adds options to the builder
Expand Down
52 changes: 32 additions & 20 deletions actions/docker/docker_load_action_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ func (suite *DockerLoadActionTestSuite) TestNewDockerLoadAction() {
logger := slog.Default()
tarFilePath := "/path/to/image.tar"

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)

suite.NotNil(action)
suite.Equal("docker-load--path-to-image.tar-action", action.ID)
Expand All @@ -39,7 +40,8 @@ func (suite *DockerLoadActionTestSuite) TestNewDockerLoadActionWithOptions() {
logger := slog.Default()
tarFilePath := "/path/to/image.tar"

action := NewDockerLoadAction(logger).WithOptions(WithPlatform("linux/amd64"), WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithOptions(WithPlatform("linux/amd64"), WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)

suite.NotNil(action)
suite.NotNil(action.Wrapped.TarFilePathParam)
Expand All @@ -55,10 +57,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_Success() {
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath).Return(expectedOutput, nil)

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(expectedOutput, action.Wrapped.Output)
Expand All @@ -75,10 +78,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_WithPlatfor
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath, "--platform", platform).Return(expectedOutput, nil)

action := NewDockerLoadAction(logger).WithOptions(WithPlatform(platform)).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithOptions(WithPlatform(platform)).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(expectedOutput, action.Wrapped.Output)
Expand All @@ -94,10 +98,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_WithQuiet()
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath, "-q").Return(expectedOutput, nil)

action := NewDockerLoadAction(logger).WithOptions(WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithOptions(WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(expectedOutput, action.Wrapped.Output)
Expand All @@ -114,10 +119,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_WithPlatfor
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath, "--platform", platform, "-q").Return(expectedOutput, nil)

action := NewDockerLoadAction(logger).WithOptions(WithPlatform(platform), WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithOptions(WithPlatform(platform), WithQuiet()).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(expectedOutput, action.Wrapped.Output)
Expand All @@ -133,10 +139,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_CommandErro
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath).Return("", errors.New(expectedError))

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.Error(err)
suite.Contains(err.Error(), expectedError)
Expand All @@ -152,10 +159,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_ContextCanc
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath).Return("", context.Canceled)

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.Error(err)
suite.True(errors.Is(err, context.Canceled))
Expand All @@ -174,10 +182,11 @@ Loaded image: postgres:13`
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath).Return(output, nil)

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(output, action.Wrapped.Output)
Expand All @@ -189,7 +198,8 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_EmptyTarFil
logger := slog.Default()
tarFilePath := ""

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)

suite.NotNil(action)
suite.Equal("docker-load--action", action.ID)
Expand All @@ -200,7 +210,8 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_SpecialChar
logger := slog.Default()
tarFilePath := "/path/with spaces/and-special-chars@#$%.tar"

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)

suite.NotNil(action)
suite.Equal("docker-load--path-with-spaces-and-special-chars.tar-action", action.ID)
Expand All @@ -216,10 +227,11 @@ func (suite *DockerLoadActionTestSuite) TestDockerLoadAction_Execute_OutputWithT
mockRunner := &mocks.MockCommandRunner{}
mockRunner.On("RunCommand", "docker", "load", "-i", tarFilePath).Return(output, nil)

action := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
action, err := NewDockerLoadAction(logger).WithParameters(task_engine.StaticParameter{Value: tarFilePath})
suite.NoError(err)
action.Wrapped.SetCommandRunner(mockRunner)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.Equal(output, action.Wrapped.Output)
Expand Down
4 changes: 2 additions & 2 deletions actions/docker/docker_run_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func NewDockerRunAction(logger *slog.Logger) *DockerRunActionBuilder {
}

// WithParameters sets the parameters for image, output buffer, and run arguments
func (b *DockerRunActionBuilder) WithParameters(imageParam task_engine.ActionParameter, outputBuffer *bytes.Buffer, runArgs ...string) *task_engine.Action[*DockerRunAction] {
func (b *DockerRunActionBuilder) WithParameters(imageParam task_engine.ActionParameter, outputBuffer *bytes.Buffer, runArgs ...string) (*task_engine.Action[*DockerRunAction], error) {
b.imageParam = imageParam
b.outputBuffer = outputBuffer
b.runArgs = runArgs
Expand All @@ -44,7 +44,7 @@ func (b *DockerRunActionBuilder) WithParameters(imageParam task_engine.ActionPar
commandRunner: command.NewDefaultCommandRunner(),
ImageParam: b.imageParam,
},
}
}, nil
}

// NOTE: Command arguments for inside the container should be part of RunArgs
Expand Down
20 changes: 12 additions & 8 deletions actions/docker/docker_run_action_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,14 @@ func (suite *DockerRunTestSuite) TestExecuteSuccess() {
image := "hello-world:latest"
runArgs := []string{"--rm", image}
logger := command_mock.NewDiscardLogger()
action := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
action, err := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
suite.NoError(err)
action.Wrapped.SetCommandRunner(suite.mockProcessor)

expectedOutput := "Hello from Docker! ...some more output..."
suite.mockProcessor.On("RunCommand", "docker", "run", "--rm", image).Return(expectedOutput+"\n ", nil) // Simulate untrimmed output

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.mockProcessor.AssertExpectations(suite.T())
Expand All @@ -43,13 +44,14 @@ func (suite *DockerRunTestSuite) TestExecuteSuccessWithCommand() {
image := "busybox:latest"
runArgs := []string{"--rm", image, "echo", "hello from busybox"}
logger := command_mock.NewDiscardLogger()
action := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
action, err := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
suite.NoError(err)
action.Wrapped.SetCommandRunner(suite.mockProcessor)

expectedOutput := "hello from busybox"
suite.mockProcessor.On("RunCommand", "docker", "run", "--rm", image, "echo", "hello from busybox").Return(expectedOutput+"\n", nil)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.NoError(err)
suite.mockProcessor.AssertExpectations(suite.T())
Expand All @@ -60,13 +62,14 @@ func (suite *DockerRunTestSuite) TestExecuteCommandFailure() {
image := "nonexistent-image:latest"
runArgs := []string{"--rm", image}
logger := command_mock.NewDiscardLogger()
action := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
action, err := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, nil, runArgs...)
suite.NoError(err)
action.Wrapped.SetCommandRunner(suite.mockProcessor)

expectedOutput := "Error: image not found..."
suite.mockProcessor.On("RunCommand", "docker", "run", "--rm", image).Return(expectedOutput+" ", assert.AnError)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())

suite.Error(err)
suite.Contains(err.Error(), "failed to run docker container")
Expand All @@ -80,13 +83,14 @@ func (suite *DockerRunTestSuite) TestExecuteSuccessWithBuffer() {
logger := command_mock.NewDiscardLogger()
var buffer bytes.Buffer // Create buffer

action := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, &buffer, runArgs...)
action, err := docker.NewDockerRunAction(logger).WithParameters(task_engine.StaticParameter{Value: image}, &buffer, runArgs...)
suite.NoError(err)
action.Wrapped.SetCommandRunner(suite.mockProcessor)

expectedOutput := "buffer test"
suite.mockProcessor.On("RunCommand", "docker", "run", "--rm", image, "echo", "-n", "buffer test").Return(expectedOutput, nil)

err := action.Wrapped.Execute(context.Background())
err = action.Wrapped.Execute(context.Background())
suite.NoError(err)
suite.mockProcessor.AssertExpectations(suite.T())
suite.Equal(expectedOutput, action.Wrapped.Output)
Expand Down
4 changes: 2 additions & 2 deletions actions/docker/docker_status_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func NewGetContainerStateAction(logger *slog.Logger) *GetContainerStateActionBui
}

// WithParameters sets the parameters for container name
func (b *GetContainerStateActionBuilder) WithParameters(containerNameParam task_engine.ActionParameter) *task_engine.Action[*GetContainerStateAction] {
func (b *GetContainerStateActionBuilder) WithParameters(containerNameParam task_engine.ActionParameter) (*task_engine.Action[*GetContainerStateAction], error) {
b.containerNameParam = containerNameParam

id := "get-container-state-action"
Expand All @@ -46,7 +46,7 @@ func (b *GetContainerStateActionBuilder) WithParameters(containerNameParam task_
CommandProcessor: command.NewDefaultCommandRunner(),
ContainerNameParam: b.containerNameParam,
},
}
}, nil
}

// GetContainerStateAction retrieves the state of Docker containers
Expand Down
Loading
Loading