You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2019/05/28 07:39:29 UTC
[james-project] 04/06: refactor MemoryTaskManagerTest to avoid too
many Thread.sleep
This is an automated email from the ASF dual-hosted git repository.
rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit bcdbaa7f3e96c470a496c94a7f0e677b471c176e
Author: RĂ©mi Kowalski <rk...@linagora.com>
AuthorDate: Mon May 20 15:42:50 2019 +0200
refactor MemoryTaskManagerTest to avoid too many Thread.sleep
---
.../apache/james/task/MemoryTaskManagerTest.java | 102 +++++++++------------
1 file changed, 45 insertions(+), 57 deletions(-)
diff --git a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
index c80f295..c857ec1 100644
--- a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
+++ b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
@@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS;
-import static org.awaitility.Duration.ONE_MINUTE;
import static org.awaitility.Duration.ONE_SECOND;
import java.util.List;
@@ -40,12 +39,8 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import com.github.fge.lambdas.Throwing;
-import com.github.fge.lambdas.consumers.ConsumerChainer;
-
public class MemoryTaskManagerTest {
- public static final int TIME_TO_ENQUEUE = 200;
private MemoryTaskManager memoryTaskManager;
@Rule
@@ -61,15 +56,14 @@ public class MemoryTaskManagerTest {
memoryTaskManager.stop();
}
- Duration slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS;
- ConditionFactory calmlyAwait = Awaitility.with()
+ private final Duration slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS;
+ private final ConditionFactory calmlyAwait = Awaitility.with()
.pollInterval(slowPacedPollInterval)
.and()
.with()
.pollDelay(slowPacedPollInterval)
.await();
- ConditionFactory awaitAtMostOneMinute = calmlyAwait.atMost(ONE_MINUTE);
- ConditionFactory awaitAtMostOneSecond = calmlyAwait.atMost(ONE_SECOND);
+ private final ConditionFactory awaitAtMostOneSecond = calmlyAwait.atMost(ONE_SECOND);
@Test
public void getStatusShouldReturnUnknownWhenUnknownId() {
@@ -95,16 +89,18 @@ public class MemoryTaskManagerTest {
@Test
public void taskCodeAfterCancelIsNotRun() {
+ CountDownLatch waitForTaskToBeLaunched = new CountDownLatch(1);
CountDownLatch task1Latch = new CountDownLatch(1);
AtomicInteger count = new AtomicInteger(0);
TaskId id = memoryTaskManager.submit(() -> {
+ waitForTaskToBeLaunched.countDown();
await(task1Latch);
count.incrementAndGet();
return Task.Result.COMPLETED;
});
- sleep(TIME_TO_ENQUEUE);
+ await(waitForTaskToBeLaunched);
memoryTaskManager.cancel(id);
task1Latch.countDown();
@@ -112,21 +108,19 @@ public class MemoryTaskManagerTest {
}
@Test
- public void getStatusShouldBeCancelledWhenCancelled() throws Exception {
-
+ public void getStatusShouldBeCancelledWhenCancelled() {
TaskId id = memoryTaskManager.submit(() -> {
sleep(500);
return Task.Result.COMPLETED;
});
- sleep(TIME_TO_ENQUEUE);
+ awaitUntilTaskHasStatus(id, TaskManager.Status.IN_PROGRESS);
memoryTaskManager.cancel(id);
assertThat(memoryTaskManager.getExecutionDetails(id).getStatus())
.isEqualTo(TaskManager.Status.CANCELLED);
}
-
@Test
public void cancelShouldBeIdempotent() {
CountDownLatch task1Latch = new CountDownLatch(1);
@@ -135,26 +129,24 @@ public class MemoryTaskManagerTest {
await(task1Latch);
return Task.Result.COMPLETED;
});
- sleep(TIME_TO_ENQUEUE);
+ awaitUntilTaskHasStatus(id, TaskManager.Status.IN_PROGRESS);
memoryTaskManager.cancel(id);
assertThatCode(() -> memoryTaskManager.cancel(id))
.doesNotThrowAnyException();
}
@Test
- public void getStatusShouldReturnInProgressWhenProcessingIsInProgress() throws Exception {
+ public void getStatusShouldReturnInProgressWhenProcessingIsInProgress() {
CountDownLatch latch1 = new CountDownLatch(1);
- CountDownLatch latch2 = new CountDownLatch(1);
TaskId taskId = memoryTaskManager.submit(() -> {
- latch2.countDown();
await(latch1);
return Task.Result.COMPLETED;
});
- latch2.await();
-
+ awaitUntilTaskHasStatus(taskId, TaskManager.Status.IN_PROGRESS);
assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus())
.isEqualTo(TaskManager.Status.IN_PROGRESS);
+ latch1.countDown();
}
@Test
@@ -163,8 +155,7 @@ public class MemoryTaskManagerTest {
TaskId taskId = memoryTaskManager.submit(
() -> Task.Result.COMPLETED);
- sleep(500);
-
+ awaitUntilTaskHasStatus(taskId, TaskManager.Status.COMPLETED);
assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus())
.isEqualTo(TaskManager.Status.COMPLETED);
}
@@ -175,21 +166,16 @@ public class MemoryTaskManagerTest {
TaskId taskId = memoryTaskManager.submit(
() -> Task.Result.PARTIAL);
- sleep(TIME_TO_ENQUEUE);
+ awaitUntilTaskHasStatus(taskId, TaskManager.Status.FAILED);
assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus())
.isEqualTo(TaskManager.Status.FAILED);
}
- private ConsumerChainer<TaskId> countDownCallback(CountDownLatch latch) {
- return Throwing.consumer(id -> latch.countDown());
- }
-
@Test
- public void listShouldReturnTaskSatus() throws Exception {
+ public void listShouldReturnTaskStatus() throws Exception {
CountDownLatch latch1 = new CountDownLatch(1);
CountDownLatch latch2 = new CountDownLatch(1);
- CountDownLatch latch3 = new CountDownLatch(1);
TaskId failedId = memoryTaskManager.submit(
() -> Task.Result.PARTIAL);
@@ -197,20 +183,14 @@ public class MemoryTaskManagerTest {
() -> Task.Result.COMPLETED);
TaskId inProgressId = memoryTaskManager.submit(
() -> {
- await(latch1);
- latch2.countDown();
- await(latch3);
+ latch1.countDown();
+ await(latch2);
return Task.Result.COMPLETED;
});
TaskId waitingId = memoryTaskManager.submit(
- () -> {
- await(latch3);
- latch2.countDown();
- return Task.Result.COMPLETED;
- });
+ () -> Task.Result.COMPLETED);
- latch1.countDown();
- latch2.await();
+ latch1.await();
List<TaskExecutionDetails> list = memoryTaskManager.list();
softly.assertThat(list).hasSize(4);
@@ -222,7 +202,7 @@ public class MemoryTaskManagerTest {
.isEqualTo(TaskManager.Status.COMPLETED);
softly.assertThat(entryWithId(list, inProgressId))
.isEqualTo(TaskManager.Status.IN_PROGRESS);
- latch3.countDown();
+ latch2.countDown();
}
private TaskManager.Status entryWithId(List<TaskExecutionDetails> list, TaskId taskId) {
@@ -262,6 +242,7 @@ public class MemoryTaskManagerTest {
assertThat(memoryTaskManager.list(TaskManager.Status.WAITING))
.extracting(TaskExecutionDetails::getTaskId)
.containsOnly(waitingId);
+ latch3.countDown();
}
@Test
@@ -294,6 +275,7 @@ public class MemoryTaskManagerTest {
assertThat(memoryTaskManager.list(TaskManager.Status.COMPLETED))
.extracting(TaskExecutionDetails::getTaskId)
.containsOnly(successfulId);
+ latch3.countDown();
}
@Test
@@ -326,6 +308,7 @@ public class MemoryTaskManagerTest {
assertThat(memoryTaskManager.list(TaskManager.Status.FAILED))
.extracting(TaskExecutionDetails::getTaskId)
.containsOnly(failedId);
+ latch3.countDown();
}
@Test
@@ -358,6 +341,7 @@ public class MemoryTaskManagerTest {
assertThat(memoryTaskManager.list(TaskManager.Status.IN_PROGRESS))
.extracting(TaskExecutionDetails::getTaskId)
.containsOnly(inProgressId);
+ latch3.countDown();
}
@Test
@@ -397,26 +381,29 @@ public class MemoryTaskManagerTest {
public void submittedTaskShouldExecuteSequentially() {
ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();
- TaskId id1 = memoryTaskManager.submit(() -> {
+ memoryTaskManager.submit(() -> {
queue.add(1);
- sleep(200);
+ sleep(50);
queue.add(2);
return Task.Result.COMPLETED;
});
- TaskId id2 = memoryTaskManager.submit(() -> {
+ memoryTaskManager.submit(() -> {
queue.add(3);
- sleep(200);
+ sleep(50);
queue.add(4);
return Task.Result.COMPLETED;
});
- sleep(TIME_TO_ENQUEUE);
- memoryTaskManager.await(id1);
- memoryTaskManager.await(id2);
+ memoryTaskManager.submit(() -> {
+ queue.add(5);
+ sleep(50);
+ queue.add(6);
+ return Task.Result.COMPLETED;
+ });
- awaitAtMostOneSecond.until(() -> queue.contains(4));
+ awaitAtMostOneSecond.until(() -> queue.contains(6));
assertThat(queue)
- .containsExactly(1, 2, 3, 4);
+ .containsExactly(1, 2, 3, 4, 5, 6);
}
@Test
@@ -424,9 +411,8 @@ public class MemoryTaskManagerTest {
TaskId taskId = memoryTaskManager.submit(() -> {
throw new RuntimeException();
});
- sleep(TIME_TO_ENQUEUE);
- TaskExecutionDetails executionDetails = memoryTaskManager.await(taskId);
- assertThat(executionDetails.getStatus())
+ awaitUntilTaskHasStatus(taskId, TaskManager.Status.FAILED);
+ assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus())
.isEqualTo(TaskManager.Status.FAILED);
}
@@ -435,14 +421,12 @@ public class MemoryTaskManagerTest {
TaskId taskId = memoryTaskManager.submit(() -> {
throw new RuntimeException();
});
- sleep(TIME_TO_ENQUEUE);
- memoryTaskManager.await(taskId);
-
+ awaitUntilTaskHasStatus(taskId, TaskManager.Status.FAILED);
assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus())
.isEqualTo(TaskManager.Status.FAILED);
}
- public void sleep(int durationInMs) {
+ private void sleep(int durationInMs) {
try {
Thread.sleep(durationInMs);
} catch (InterruptedException e) {
@@ -450,11 +434,15 @@ public class MemoryTaskManagerTest {
}
}
- public void await(CountDownLatch countDownLatch) {
+ private void await(CountDownLatch countDownLatch) {
try {
countDownLatch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
+
+ private void awaitUntilTaskHasStatus(TaskId id, TaskManager.Status status) {
+ awaitAtMostOneSecond.until(() -> memoryTaskManager.getExecutionDetails(id).getStatus().equals(status));
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org