Skip to content

Commit 8875a8f

Browse files
committed
Add tests for secretsmanager client
1 parent ba268e3 commit 8875a8f

File tree

2 files changed

+97
-3
lines changed

2 files changed

+97
-3
lines changed

ecs-cli/modules/clients/aws/secretsmanager/client.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,21 @@ type SMClient interface {
2828

2929
type secretsManagerClient struct {
3030
client secretsmanageriface.SecretsManagerAPI
31+
config *config.CommandConfig
3132
}
3233

3334
// NewSecretsManagerClient creates an instance of an secretsManagerClient
3435
func NewSecretsManagerClient(config *config.CommandConfig) SMClient {
3536
client := secretsmanager.New(config.Session)
3637
client.Handlers.Build.PushBackNamed(clients.CustomUserAgentHandler())
3738

38-
return newClient(client)
39+
return newClient(config, client)
3940
}
4041

41-
func newClient(client secretsmanageriface.SecretsManagerAPI) SMClient {
42+
func newClient(config *config.CommandConfig, client secretsmanageriface.SecretsManagerAPI) SMClient {
4243
return &secretsManagerClient{
4344
client: client,
45+
config: config,
4446
}
4547
}
4648

ecs-cli/modules/clients/aws/secretsmanager/client_test.go

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,96 @@
1111
// express or implied. See the License for the specific language governing
1212
// permissions and limitations under the License.
1313

14-
package secretsmanager
14+
package secretsmanager
15+
16+
import (
17+
"errors"
18+
"testing"
19+
20+
"github.com/aws/amazon-ecs-cli/ecs-cli/modules/clients/aws/secretsmanager/mock/sdk"
21+
"github.com/aws/amazon-ecs-cli/ecs-cli/modules/config"
22+
"github.com/aws/aws-sdk-go/aws"
23+
"github.com/aws/aws-sdk-go/aws/session"
24+
"github.com/aws/aws-sdk-go/service/secretsmanager"
25+
"github.com/golang/mock/gomock"
26+
"github.com/stretchr/testify/assert"
27+
)
28+
29+
func TestCreateSecret(t *testing.T) {
30+
mockSM, client := setupTestController(t)
31+
32+
expectedInput := secretsmanager.CreateSecretInput{
33+
Name: aws.String("some-secret"),
34+
SecretString: aws.String("{\"username\":\"bob\"},{\"password\":\"abc123xyz456\"}"),
35+
}
36+
expectedOutput := secretsmanager.CreateSecretOutput{
37+
ARN: aws.String("arn:aws:secretsmanager:some-secret-123"),
38+
Name: aws.String("some-secret"),
39+
}
40+
mockSM.EXPECT().CreateSecret(&expectedInput).Return(&expectedOutput, nil)
41+
42+
output, err := client.CreateSecret(expectedInput)
43+
assert.NoError(t, err, "Expected no error when Creating Secret")
44+
assert.Equal(t, &expectedOutput, output, "Expected CreateSecret output to match")
45+
}
46+
47+
func TestCreateSecretErrorCase(t *testing.T) {
48+
mockSM, client := setupTestController(t)
49+
50+
mockSM.EXPECT().CreateSecret(gomock.Any()).Return(nil, errors.New("something went wrong"))
51+
52+
_, err := client.CreateSecret(secretsmanager.CreateSecretInput{})
53+
assert.Error(t, err, "Expected error when Creating Secret")
54+
}
55+
56+
func TestListSecrets(t *testing.T) {
57+
mockSM, client := setupTestController(t)
58+
59+
secretList := []*secretsmanager.SecretListEntry{&secretsmanager.SecretListEntry{Name: aws.String("my-secret")}}
60+
mockListResponse := &secretsmanager.ListSecretsOutput{
61+
SecretList: secretList,
62+
}
63+
mockSM.EXPECT().ListSecrets(gomock.Any()).Return(mockListResponse, nil)
64+
65+
output, err := client.ListSecrets(nil)
66+
assert.NoError(t, err, "Expected no error when listing secrets")
67+
assert.NotEmpty(t, output, "Expected ListSecrets output to be non-empty")
68+
}
69+
70+
func TestListSecretsWithNextToken(t *testing.T) {
71+
mockSM, client := setupTestController(t)
72+
tokenString := "someNextToken"
73+
nextToken := &tokenString
74+
75+
secretList := []*secretsmanager.SecretListEntry{&secretsmanager.SecretListEntry{Name: aws.String("my-secret")}}
76+
mockListResponse := &secretsmanager.ListSecretsOutput{
77+
SecretList: secretList,
78+
}
79+
expectedInput := secretsmanager.ListSecretsInput{NextToken: nextToken}
80+
81+
mockSM.EXPECT().ListSecrets(&expectedInput).Return(mockListResponse, nil)
82+
83+
output, err := client.ListSecrets(nextToken)
84+
assert.NoError(t, err, "Expected no error when listing secrets")
85+
assert.NotEmpty(t, output, "Expected ListSecrets output to be non-empty")
86+
}
87+
88+
func TestListSecretsErrorCase(t *testing.T) {
89+
mockSM, client := setupTestController(t)
90+
91+
mockSM.EXPECT().ListSecrets(gomock.Any()).Return(nil, errors.New("something went wrong"))
92+
_, err := client.ListSecrets(nil)
93+
94+
assert.Error(t, err, "Expected error when Listing Secrets")
95+
}
96+
97+
func setupTestController(t *testing.T) (*mock_secretsmanageriface.MockSecretsManagerAPI, SMClient) {
98+
ctrl := gomock.NewController(t)
99+
mockSM := mock_secretsmanageriface.NewMockSecretsManagerAPI(ctrl)
100+
mockSession, err := session.NewSession()
101+
assert.NoError(t, err, "Unexpected error in creating session")
102+
103+
client := newClient(&config.CommandConfig{Session: mockSession}, mockSM)
104+
105+
return mockSM, client
106+
}

0 commit comments

Comments
 (0)