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