diff --git a/test/framework/src/test/java/org/elasticsearch/cluster/coordination/DeterministicTaskQueueTests.java b/test/framework/src/test/java/org/elasticsearch/cluster/coordination/DeterministicTaskQueueTests.java index 129ef89e88c9b..b7fbde22f5048 100644 --- a/test/framework/src/test/java/org/elasticsearch/cluster/coordination/DeterministicTaskQueueTests.java +++ b/test/framework/src/test/java/org/elasticsearch/cluster/coordination/DeterministicTaskQueueTests.java @@ -376,20 +376,19 @@ public void testDelayVariabilityAppliesToImmediateTasks() { public void testDelayVariabilityAppliesToFutureTasks() { final DeterministicTaskQueue deterministicTaskQueue = newTaskQueue(); advanceToRandomTime(deterministicTaskQueue); - final long delayMillis = randomLongBetween(30000, 60000); - final long variabilityMillis = randomLongBetween(100, 500); + final long nominalExecutionTime = randomLongBetween(0, 60000); + final long variabilityMillis = randomLongBetween(1, 500); + final long startTime = deterministicTaskQueue.getCurrentTimeMillis(); deterministicTaskQueue.setExecutionDelayVariabilityMillis(variabilityMillis); for (int i = 0; i < 100; i++) { - deterministicTaskQueue.scheduleAt(delayMillis, () -> {}); + deterministicTaskQueue.scheduleAt(nominalExecutionTime, () -> {}); } final long expectedEndTime = deterministicTaskQueue.getLatestDeferredExecutionTime(); + assertThat(expectedEndTime, greaterThan(nominalExecutionTime)); // fails if every task has zero variability -- vanishingly unlikely + assertThat(expectedEndTime, lessThanOrEqualTo(Math.max(startTime, nominalExecutionTime + variabilityMillis))); - final long startTime = deterministicTaskQueue.getCurrentTimeMillis(); deterministicTaskQueue.runAllTasks(); - final long elapsedTime = deterministicTaskQueue.getCurrentTimeMillis() - startTime; assertThat(deterministicTaskQueue.getCurrentTimeMillis(), is(expectedEndTime)); - assertThat(elapsedTime, greaterThan(delayMillis)); // fails with negligible probability - assertThat(elapsedTime, lessThanOrEqualTo(delayMillis + variabilityMillis)); } public void testThreadPoolSchedulesPeriodicFutureTasks() {