1414import org .mockito .junit .jupiter .MockitoExtension ;
1515import org .opensearch .dataprepper .metrics .PluginMetrics ;
1616import org .opensearch .dataprepper .model .plugin .PluginConfigPublisher ;
17+ import software .amazon .awssdk .awscore .exception .AwsErrorDetails ;
18+ import software .amazon .awssdk .services .secretsmanager .model .ResourceNotFoundException ;
19+ import software .amazon .awssdk .services .secretsmanager .model .LimitExceededException ;
20+ import software .amazon .awssdk .services .secretsmanager .model .InvalidRequestException ;
1721
1822import static org .mockito .ArgumentMatchers .any ;
1923import static org .mockito .ArgumentMatchers .eq ;
2529import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_REFRESH_DURATION ;
2630import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_REFRESH_FAILURE ;
2731import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_REFRESH_SUCCESS ;
32+ import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_SECRET_NOT_FOUND ;
33+ import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_LIMIT_EXCEEDED ;
34+ import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRETS_ACCESS_DENIED ;
2835import static org .opensearch .dataprepper .plugins .aws .SecretsRefreshJob .SECRET_CONFIG_ID_TAG ;
2936
3037@ ExtendWith (MockitoExtension .class )
@@ -48,6 +55,15 @@ class SecretsRefreshJobTest {
4855 @ Mock
4956 private Timer secretsRefreshTimer ;
5057
58+ @ Mock
59+ private Counter secretsSecretNotFoundCounter ;
60+
61+ @ Mock
62+ private Counter secretsLimitExceededCounter ;
63+
64+ @ Mock
65+ private Counter secretsAccessDeniedCounter ;
66+
5167 private SecretsRefreshJob objectUnderTest ;
5268
5369 @ BeforeEach
@@ -65,6 +81,15 @@ void setUp() {
6581 when (pluginMetrics .timerWithTags (
6682 eq (SECRETS_REFRESH_DURATION ), eq (SECRET_CONFIG_ID_TAG ), eq (TEST_SECRET_CONFIG_ID )))
6783 .thenReturn (secretsRefreshTimer );
84+ when (pluginMetrics .counterWithTags (
85+ eq (SECRETS_SECRET_NOT_FOUND ), eq (SECRET_CONFIG_ID_TAG ), eq (TEST_SECRET_CONFIG_ID )))
86+ .thenReturn (secretsSecretNotFoundCounter );
87+ when (pluginMetrics .counterWithTags (
88+ eq (SECRETS_LIMIT_EXCEEDED ), eq (SECRET_CONFIG_ID_TAG ), eq (TEST_SECRET_CONFIG_ID )))
89+ .thenReturn (secretsLimitExceededCounter );
90+ when (pluginMetrics .counterWithTags (
91+ eq (SECRETS_ACCESS_DENIED ), eq (SECRET_CONFIG_ID_TAG ), eq (TEST_SECRET_CONFIG_ID )))
92+ .thenReturn (secretsAccessDeniedCounter );
6893 objectUnderTest = new SecretsRefreshJob (
6994 TEST_SECRET_CONFIG_ID , secretsSupplier , pluginConfigPublisher , pluginMetrics );
7095 }
@@ -90,5 +115,59 @@ void testRunWithRefreshFailure() {
90115 verifyNoInteractions (pluginConfigPublisher );
91116 verifyNoInteractions (secretsRefreshSuccessCounter );
92117 verify (secretsRefreshFailureCounter ).increment ();
118+ verifyNoInteractions (secretsSecretNotFoundCounter );
119+ verifyNoInteractions (secretsLimitExceededCounter );
120+ verifyNoInteractions (secretsAccessDeniedCounter );
121+ }
122+
123+ @ Test
124+ void testRunWithResourceNotFoundException () {
125+ doThrow (ResourceNotFoundException .class ).when (secretsSupplier ).refresh (eq (TEST_SECRET_CONFIG_ID ));
126+ objectUnderTest .run ();
127+
128+ verify (secretsRefreshTimer ).record (any (Runnable .class ));
129+ verify (secretsSupplier ).refresh (TEST_SECRET_CONFIG_ID );
130+ verifyNoInteractions (pluginConfigPublisher );
131+ verifyNoInteractions (secretsRefreshSuccessCounter );
132+ verify (secretsRefreshFailureCounter ).increment ();
133+ verify (secretsSecretNotFoundCounter ).increment ();
134+ verifyNoInteractions (secretsLimitExceededCounter );
135+ verifyNoInteractions (secretsAccessDeniedCounter );
136+ }
137+
138+ @ Test
139+ void testRunWithLimitExceededException () {
140+ doThrow (LimitExceededException .class ).when (secretsSupplier ).refresh (eq (TEST_SECRET_CONFIG_ID ));
141+ objectUnderTest .run ();
142+
143+ verify (secretsRefreshTimer ).record (any (Runnable .class ));
144+ verify (secretsSupplier ).refresh (TEST_SECRET_CONFIG_ID );
145+ verifyNoInteractions (pluginConfigPublisher );
146+ verifyNoInteractions (secretsRefreshSuccessCounter );
147+ verify (secretsRefreshFailureCounter ).increment ();
148+ verify (secretsLimitExceededCounter ).increment ();
149+ verifyNoInteractions (secretsSecretNotFoundCounter );
150+ verifyNoInteractions (secretsAccessDeniedCounter );
151+ }
152+
153+ @ Test
154+ void testRunWithAccessDeniedException () {
155+ final InvalidRequestException accessDeniedException = InvalidRequestException .builder ()
156+ .awsErrorDetails (AwsErrorDetails .builder ()
157+ .errorCode ("AccessDeniedException" )
158+ .build ())
159+ .build ();
160+ doThrow (accessDeniedException ).when (secretsSupplier ).refresh (eq (TEST_SECRET_CONFIG_ID ));
161+
162+ objectUnderTest .run ();
163+
164+ verify (secretsRefreshTimer ).record (any (Runnable .class ));
165+ verify (secretsSupplier ).refresh (TEST_SECRET_CONFIG_ID );
166+ verifyNoInteractions (pluginConfigPublisher );
167+ verifyNoInteractions (secretsRefreshSuccessCounter );
168+ verify (secretsRefreshFailureCounter ).increment ();
169+ verify (secretsAccessDeniedCounter ).increment ();
170+ verifyNoInteractions (secretsSecretNotFoundCounter );
171+ verifyNoInteractions (secretsLimitExceededCounter );
93172 }
94173}
0 commit comments