|
20 | 20 | import org.opensearch.dataprepper.plugins.source.microsoft_office365.models.AuditLogsResponse; |
21 | 21 | import org.opensearch.dataprepper.plugins.source.source_crawler.exception.SaaSCrawlerException; |
22 | 22 | import org.opensearch.dataprepper.plugins.source.source_crawler.metrics.VendorAPIMetricsRecorder; |
| 23 | +import org.opensearch.dataprepper.plugins.source.source_crawler.utils.retry.DefaultRetryStrategy; |
| 24 | +import org.opensearch.dataprepper.plugins.source.source_crawler.utils.retry.DefaultStatusCodeHandler; |
| 25 | +import org.opensearch.dataprepper.plugins.source.source_crawler.utils.retry.RetryHandler; |
23 | 26 | import org.opensearch.dataprepper.test.helper.ReflectivelySetField; |
24 | 27 | import org.springframework.core.ParameterizedTypeReference; |
25 | 28 | import org.springframework.http.HttpEntity; |
@@ -73,6 +76,8 @@ class Office365RestClientTest { |
73 | 76 |
|
74 | 77 | private Office365RestClient office365RestClient; |
75 | 78 |
|
| 79 | + private static final int CUSTOM_MAX_RETRIES = 1; |
| 80 | + |
76 | 81 | @BeforeEach |
77 | 82 | void setUp() throws NoSuchFieldException, IllegalAccessException { |
78 | 83 | // Setup VendorAPIMetricsRecorder method mocks - use lenient to avoid unnecessary stubbing errors |
@@ -110,6 +115,12 @@ void setUp() throws NoSuchFieldException, IllegalAccessException { |
110 | 115 |
|
111 | 116 | office365RestClient = new Office365RestClient(authConfig, metricsRecorder); |
112 | 117 | ReflectivelySetField.setField(Office365RestClient.class, office365RestClient, "restTemplate", restTemplate); |
| 118 | + |
| 119 | + // Optionally replace RetryHandler with custom one (1 retry) for faster test execution |
| 120 | + RetryHandler customRetryHandler = new RetryHandler( |
| 121 | + new DefaultRetryStrategy(CUSTOM_MAX_RETRIES), |
| 122 | + new DefaultStatusCodeHandler()); |
| 123 | + ReflectivelySetField.setField(Office365RestClient.class, office365RestClient, "retryHandler", customRetryHandler); |
113 | 124 | } |
114 | 125 |
|
115 | 126 | /** |
@@ -363,11 +374,18 @@ void testGetAuditLogFailure() { |
363 | 374 | * Verifies that failed authentication triggers credential renewal and retry succeeds. |
364 | 375 | */ |
365 | 376 | @Test |
366 | | - void testTokenRenewal() { |
| 377 | + void testTokenRenewal() throws NoSuchFieldException, IllegalAccessException { |
367 | 378 | // Setup |
368 | 379 | Instant startTime = Instant.now().minus(1, ChronoUnit.HOURS); |
369 | 380 | Instant endTime = Instant.now(); |
370 | 381 |
|
| 382 | + // Override retry handler to allow at least 2 attempts for token renewal test |
| 383 | + RetryHandler tokenRenewalRetryHandler = new RetryHandler( |
| 384 | + new DefaultRetryStrategy(2), // Need at least 2 attempts for token renewal scenario |
| 385 | + new DefaultStatusCodeHandler()); |
| 386 | + ReflectivelySetField.setField(Office365RestClient.class, office365RestClient, "retryHandler", |
| 387 | + tokenRenewalRetryHandler); |
| 388 | + |
371 | 389 | List<String> tokensUsed = new ArrayList<>(); |
372 | 390 | List<String> requestTokens = new ArrayList<>(); |
373 | 391 |
|
|
0 commit comments