@@ -86,7 +86,7 @@ func TestServiceCreate(t *testing.T) {
8686 if ! strings .HasPrefix (actualPrefix , expectedPrefix ) {
8787 t .Fatalf ("Prefix is not as expected: %v" , actualPrefix )
8888 }
89- if (err != nil ) != isErrorRetryable ( err , retryableErrors ) {
89+ if (err != nil ) != IsErrorExpected {
9090 t .Fatalf ("Unexpected error value, error = %v, expectedError %v" , err , IsErrorExpected )
9191 }
9292 }
@@ -171,12 +171,13 @@ func TestServiceCreate(t *testing.T) {
171171 },
172172 },
173173 {
174- name : "Should not retry if non- retryable error occurred while storing data in SSM" ,
174+ name : "Should retry if retryable error occurred while storing data in SSM" ,
175175 bytesCount : 10 ,
176176 secretPrefix : "/prefix" ,
177177 expectedPrefix : "/prefix" ,
178- wantErr : true ,
178+ wantErr : false ,
179179 expect : func (m * mock_ssmiface.MockSSMAPIMockRecorder ) {
180+ // First call fails with retryable error
180181 m .PutParameter (context .TODO (), gomock .AssignableToTypeOf (& ssm.PutParameterInput {})).Return (nil , & mockAPIError {
181182 "ParameterAlreadyExists" ,
182183 "parameter already exists" }).Do (
@@ -202,17 +203,42 @@ func TestServiceCreate(t *testing.T) {
202203 }
203204 },
204205 )
206+ // Second call succeeds
207+ m .PutParameter (context .TODO (), gomock .AssignableToTypeOf (& ssm.PutParameterInput {})).Return (& ssm.PutParameterOutput {}, nil )
205208 },
206209 },
207210 {
208- name : "Should retry if retryable error occurred while storing data in SSM" ,
211+ name : "Should not retry if non- retryable error occurred while storing data in SSM" ,
209212 bytesCount : 10 ,
210- secretPrefix : "" ,
211- expectedPrefix : "/cluster.x-k8s.io" ,
213+ secretPrefix : "/prefix" ,
214+ expectedPrefix : "/prefix" ,
215+ wantErr : true ,
212216 expect : func (m * mock_ssmiface.MockSSMAPIMockRecorder ) {
213217 m .PutParameter (context .TODO (), gomock .AssignableToTypeOf (& ssm.PutParameterInput {})).Return (nil , & mockAPIError {
214- "ParameterLimitExceeded" ,
215- "parameter limit exceeded" })
218+ "InvalidParameterValue" ,
219+ "invalid parameter value" }).Do (
220+ func (ctx context.Context , putParameterInput * ssm.PutParameterInput , optFns ... func (* ssm.Options )) {
221+ if ! strings .HasPrefix (* (putParameterInput .Name ), "/prefix/" ) {
222+ t .Fatalf ("Prefix is not as expected: %v" , putParameterInput .Name )
223+ }
224+ sortTagsByKey (putParameterInput .Tags )
225+ sortTagsByKey (expectedTagsAsValues )
226+ if diff := cmp .Diff (expectedTagsAsValues , putParameterInput .Tags ,
227+ // This Comparer is the key. It tells cmp how to properly compare two Tag structs.
228+ cmp .Comparer (func (x , y types.Tag ) bool {
229+ // Safely compare the string content of the Key field.
230+ keyMatch := (x .Key == nil && y .Key == nil ) || (x .Key != nil && y .Key != nil && * x .Key == * y .Key )
231+ // Safely compare the string content of the Value field.
232+ valueMatch := (x .Value == nil && y .Value == nil ) || (x .Value != nil && y .Value != nil && * x .Value == * y .Value )
233+
234+ // The tags are equal only if both their key and value content match.
235+ return keyMatch && valueMatch
236+ }),
237+ ); diff != "" {
238+ t .Fatalf ("Tags mismatch (-expected +actual):\n %s" , diff )
239+ }
240+ },
241+ )
216242 },
217243 },
218244 }
0 commit comments