diff --git a/java-spiffe-core/src/main/java/io/spiffe/workloadapi/retry/RetryHandler.java b/java-spiffe-core/src/main/java/io/spiffe/workloadapi/retry/RetryHandler.java index 29e3dff9..7341fb31 100644 --- a/java-spiffe-core/src/main/java/io/spiffe/workloadapi/retry/RetryHandler.java +++ b/java-spiffe-core/src/main/java/io/spiffe/workloadapi/retry/RetryHandler.java @@ -35,7 +35,7 @@ public void scheduleRetry(final Runnable runnable) { if (exponentialBackoffPolicy.reachedMaxRetries(retryCount)) { return; } - executor.schedule(runnable, nextDelay.getSeconds(), TimeUnit.SECONDS); + executor.schedule(runnable, nextDelay.toMillis(), TimeUnit.MILLISECONDS); nextDelay = exponentialBackoffPolicy.nextDelay(nextDelay); retryCount++; } diff --git a/java-spiffe-core/src/test/java/io/spiffe/workloadapi/retry/RetryHandlerTest.java b/java-spiffe-core/src/test/java/io/spiffe/workloadapi/retry/RetryHandlerTest.java index 8d7a300a..cbf73d4f 100644 --- a/java-spiffe-core/src/test/java/io/spiffe/workloadapi/retry/RetryHandlerTest.java +++ b/java-spiffe-core/src/test/java/io/spiffe/workloadapi/retry/RetryHandlerTest.java @@ -32,23 +32,38 @@ void testScheduleRetry_defaultPolicy() { retryHandler.scheduleRetry(runnable); - verify(scheduledExecutorService).schedule(runnable, 1, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 1000, TimeUnit.MILLISECONDS); assertEquals(1, retryHandler.getRetryCount()); // second retry retryHandler.scheduleRetry(runnable); assertEquals(2, retryHandler.getRetryCount()); - verify(scheduledExecutorService).schedule(runnable, 2, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 2000, TimeUnit.MILLISECONDS); // third retry retryHandler.scheduleRetry(runnable); assertEquals(3, retryHandler.getRetryCount()); - verify(scheduledExecutorService).schedule(runnable, 4, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 4000, TimeUnit.MILLISECONDS); // fourth retry retryHandler.scheduleRetry(runnable); assertEquals(4, retryHandler.getRetryCount()); - verify(scheduledExecutorService).schedule(runnable, 8, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 8000, TimeUnit.MILLISECONDS); + } + + @Test + void testScheduleRetry_subSecondDelay_usesMilliseconds() { + Runnable runnable = () -> { }; + ExponentialBackoffPolicy exponentialBackoffPolicy = ExponentialBackoffPolicy.builder() + .initialDelay(Duration.ofMillis(250)) + .build(); + + RetryHandler retryHandler = new RetryHandler(exponentialBackoffPolicy, scheduledExecutorService); + + retryHandler.scheduleRetry(runnable); + + verify(scheduledExecutorService).schedule(runnable, 250, TimeUnit.MILLISECONDS); + assertEquals(1, retryHandler.getRetryCount()); } @Test @@ -60,18 +75,18 @@ void testScheduleRetry_maxRetries() { retryHandler.scheduleRetry(runnable); - verify(scheduledExecutorService).schedule(runnable, 1, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 1000, TimeUnit.MILLISECONDS); assertEquals(1, retryHandler.getRetryCount()); // second retry retryHandler.scheduleRetry(runnable); assertEquals(2, retryHandler.getRetryCount()); - verify(scheduledExecutorService).schedule(runnable, 2, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 2000, TimeUnit.MILLISECONDS); // third retry retryHandler.scheduleRetry(runnable); assertEquals(3, retryHandler.getRetryCount()); - verify(scheduledExecutorService).schedule(runnable, 4, TimeUnit.SECONDS); + verify(scheduledExecutorService).schedule(runnable, 4000, TimeUnit.MILLISECONDS); Mockito.reset(scheduledExecutorService);