@@ -18,12 +18,14 @@ package aws
1818import (
1919 "context"
2020 "encoding/json"
21+ "errors"
2122 "reflect"
2223 "testing"
2324
2425 "github.com/aws/aws-sdk-go-v2/aws"
2526 "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
2627 "github.com/aws/aws-sdk-go-v2/service/sso/types"
28+ "github.com/aws/smithy-go"
2729 "github.com/chainloop-dev/chainloop/internal/credentials"
2830 mclient "github.com/chainloop-dev/chainloop/internal/credentials/aws/mocks"
2931 "github.com/stretchr/testify/assert"
@@ -67,6 +69,72 @@ const defaultRegion = "default-region"
6769const defaultAccessKey = "access-key-not-a-real-key"
6870const defaultSecretKey = "secret-key-not-a-real-key"
6971
72+ func (s * testSuite ) TestReadCredentialsErrorHandling () {
73+ fakeSecretID := "fakeSecretID"
74+ genericErr := errors .New ("generic error" )
75+ genericAPIErr := & smithy.GenericAPIError {Code : "AnotherAPIError" , Message : "Some message" }
76+
77+ testCases := []struct {
78+ name string
79+ wantedError error
80+ expectedError error
81+ }{
82+ {
83+ "GetSecretValue returns no error" ,
84+ nil ,
85+ nil ,
86+ }, {
87+ "GetSecretValue returns a smithy.APIError error of type 'resource not found'" ,
88+ & smithy.GenericAPIError {Code : "ResourceNotFoundException" , Message : "Some message" },
89+ credentials .ErrNotFound ,
90+ }, {
91+ "GetSecretValue returns a smithy.APIError error of type 'other type'" ,
92+ genericAPIErr ,
93+ genericAPIErr ,
94+ }, {
95+ "GetSecretValue returns an error that is not smithy.APIError" ,
96+ genericErr ,
97+ genericErr ,
98+ },
99+ }
100+
101+ for _ , tc := range testCases {
102+ s .Run (tc .name , func () {
103+ // re-set the manager mocked expectations
104+ initMockedManager (s )
105+ m := s .mockedManager
106+ mc , _ := m .client .(* mclient.SecretsManagerIface )
107+ ctx := context .Background ()
108+
109+ // mock response for method GetSecretValue(..)
110+ var getSecretValueResp secretsmanager.GetSecretValueOutput
111+ if tc .wantedError == nil {
112+ validAPICreds := & credentials.APICreds {Host : "h" , Key : "k" }
113+ mockedResp , _ := json .Marshal (validAPICreds )
114+ getSecretValueResp = secretsmanager.GetSecretValueOutput {
115+ SecretString : aws .String (string (mockedResp )),
116+ }
117+ }
118+
119+ // mock call to GetSecretValue to return the wanted error
120+ mc .On ("GetSecretValue" , ctx , & secretsmanager.GetSecretValueInput {
121+ SecretId : aws .String (fakeSecretID ),
122+ }).Return (& getSecretValueResp , tc .wantedError )
123+
124+ // call
125+ creds := & credentials.APICreds {}
126+ err := m .ReadCredentials (ctx , fakeSecretID , creds )
127+
128+ // test
129+ if tc .expectedError == nil {
130+ require .NoError (s .T (), err )
131+ } else {
132+ require .ErrorIs (s .T (), err , tc .expectedError )
133+ }
134+ })
135+ }
136+ }
137+
70138func (s * testSuite ) TestReadWriteCredentials () {
71139 assert := assert .New (s .T ())
72140 validOCICreds := & credentials.OCIKeypair {Repo : "test-repo" , Username : "username" , Password : "password" }
0 commit comments