|
12 | 12 | import org.junit.jupiter.api.BeforeEach; |
13 | 13 | import org.junit.jupiter.api.Test; |
14 | 14 | import org.junit.jupiter.api.extension.ExtendWith; |
| 15 | +import io.micrometer.core.instrument.Counter; |
15 | 16 | import org.mockito.ArgumentCaptor; |
16 | 17 | import org.mockito.Mock; |
17 | 18 | import org.mockito.junit.jupiter.MockitoExtension; |
@@ -291,4 +292,59 @@ void testTokenRenewal() { |
291 | 292 | assertEquals("Bearer token-0", requestTokens.get(0), "First request should use token-0"); |
292 | 293 | assertEquals("Bearer token-1", requestTokens.get(1), "Second request should use token-1"); |
293 | 294 | } |
| 295 | + |
| 296 | + @Test |
| 297 | + void testSearchAuditLogsFailureCounterIncrementsOnEachRetry() throws Exception { |
| 298 | + Instant startTime = Instant.now().minus(1, ChronoUnit.HOURS); |
| 299 | + Instant endTime = Instant.now(); |
| 300 | + |
| 301 | + when(authConfig.getTenantId()).thenReturn("test-tenant-id"); |
| 302 | + when(authConfig.getAccessToken()).thenReturn("test-access-token"); |
| 303 | + |
| 304 | + Counter mockCounter = org.mockito.Mockito.mock(Counter.class); |
| 305 | + ReflectivelySetField.setField(Office365RestClient.class, office365RestClient, "searchRequestsFailedCounter", mockCounter); |
| 306 | + |
| 307 | + when(restTemplate.exchange( |
| 308 | + anyString(), |
| 309 | + eq(HttpMethod.GET), |
| 310 | + any(), |
| 311 | + any(ParameterizedTypeReference.class) |
| 312 | + )).thenThrow(new HttpClientErrorException(HttpStatus.TOO_MANY_REQUESTS)); |
| 313 | + |
| 314 | + assertThrows(RuntimeException.class, () -> |
| 315 | + office365RestClient.searchAuditLogs( |
| 316 | + "Audit.AzureActiveDirectory", |
| 317 | + startTime, |
| 318 | + endTime, |
| 319 | + null |
| 320 | + ) |
| 321 | + ); |
| 322 | + |
| 323 | + // Verify counter.increment() was called exactly 6 times (once for each retry attempt) |
| 324 | + verify(mockCounter, times(6)).increment(); |
| 325 | + } |
| 326 | + |
| 327 | + @Test |
| 328 | + void testGetAuditLogFailureCounterIncrementsOnEachRetry() throws Exception { |
| 329 | + String contentUri = "https://manage.office.com/api/v1.0/test-tenant/activity/feed/audit/123"; |
| 330 | + |
| 331 | + when(authConfig.getAccessToken()).thenReturn("test-access-token"); |
| 332 | + |
| 333 | + Counter mockCounter = org.mockito.Mockito.mock(Counter.class); |
| 334 | + ReflectivelySetField.setField(Office365RestClient.class, office365RestClient, "auditLogRequestsFailedCounter", mockCounter); |
| 335 | + |
| 336 | + when(restTemplate.exchange( |
| 337 | + eq(contentUri), |
| 338 | + eq(HttpMethod.GET), |
| 339 | + any(), |
| 340 | + eq(String.class) |
| 341 | + )).thenThrow(new HttpClientErrorException(HttpStatus.TOO_MANY_REQUESTS)); |
| 342 | + |
| 343 | + assertThrows(RuntimeException.class, () -> |
| 344 | + office365RestClient.getAuditLog(contentUri) |
| 345 | + ); |
| 346 | + |
| 347 | + // Verify counter.increment() was called exactly 6 times (once for each retry attempt) |
| 348 | + verify(mockCounter, times(6)).increment(); |
| 349 | + } |
294 | 350 | } |
0 commit comments