Skip to content

Commit

Permalink
feat: allow starting ec2 instances
Browse files Browse the repository at this point in the history
  • Loading branch information
ReuDa committed Nov 28, 2024
1 parent 271c619 commit 0e32c61
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
10 changes: 10 additions & 0 deletions extec2/instance_attack_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ type ec2InstanceStateChangeApi interface {
StopInstances(ctx context.Context, params *ec2.StopInstancesInput, optFns ...func(*ec2.Options)) (*ec2.StopInstancesOutput, error)
TerminateInstances(ctx context.Context, params *ec2.TerminateInstancesInput, optFns ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error)
RebootInstances(ctx context.Context, params *ec2.RebootInstancesInput, optFns ...func(*ec2.Options)) (*ec2.RebootInstancesOutput, error)
StartInstances(ctx context.Context, params *ec2.StartInstancesInput, optFns ...func(*ec2.Options)) (*ec2.StartInstancesOutput, error)
}

func NewEc2InstanceStateAction() action_kit_sdk.Action[InstanceStateChangeState] {
Expand Down Expand Up @@ -93,6 +94,10 @@ func (e *ec2InstanceStateAction) Describe() action_kit_api.ActionDescription {
Label: "Terminate",
Value: "terminate",
},
action_kit_api.ExplicitParameterOption{
Label: "Start",
Value: "start",
},
}),
},
},
Expand Down Expand Up @@ -142,6 +147,11 @@ func (e *ec2InstanceStateAction) Start(ctx context.Context, state *InstanceState
InstanceIds: instanceIds,
}
_, err = client.TerminateInstances(ctx, &in)
} else if state.Action == "start" {
in := ec2.StartInstancesInput{
InstanceIds: instanceIds,
}
_, err = client.StartInstances(ctx, &in)
}

if err != nil {
Expand Down
33 changes: 32 additions & 1 deletion extec2/instance_attack_state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,12 @@ func (m *ec2ClientApiMock) RebootInstances(ctx context.Context, params *ec2.Rebo
return nil, args.Error(1)
}

func TestEc2InstanceStateAction_Start(t *testing.T) {
func (m *ec2ClientApiMock) StartInstances(ctx context.Context, params *ec2.StartInstancesInput, optFns ...func(*ec2.Options)) (*ec2.StartInstancesOutput, error) {
args := m.Called(ctx, params)
return nil, args.Error(1)
}

func TestEc2InstanceStateAction_Stop(t *testing.T) {
// Given
api := new(ec2ClientApiMock)
api.On("StopInstances", mock.Anything, mock.MatchedBy(func(params *ec2.StopInstancesInput) bool {
Expand Down Expand Up @@ -212,6 +217,32 @@ func TestEc2InstanceStateAction_Reboot(t *testing.T) {
api.AssertExpectations(t)
}

func TestEc2InstanceStateAction_Start(t *testing.T) {
// Given
api := new(ec2ClientApiMock)
api.On("StartInstances", mock.Anything, mock.MatchedBy(func(params *ec2.StartInstancesInput) bool {
require.Equal(t, "dev-worker-1", params.InstanceIds[0])
return true
})).Return(nil, nil)
action := ec2InstanceStateAction{clientProvider: func(account string, region string) (ec2InstanceStateChangeApi, error) {
return api, nil
}}

// When
result, err := action.Start(context.Background(), &InstanceStateChangeState{
Account: "42",
Region: "us-west-1",
InstanceId: "dev-worker-1",
Action: "start",
})

// Then
assert.NoError(t, err)
assert.Nil(t, result)

api.AssertExpectations(t)
}

func TestStartInstanceStateChangeForwardsError(t *testing.T) {
// Given
api := new(ec2ClientApiMock)
Expand Down

0 comments on commit 0e32c61

Please sign in to comment.