summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java b/vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java
new file mode 100644
index 00000000000..530be935bc1
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/yolean/concurrent/Sleeper.java
@@ -0,0 +1,29 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.yolean.concurrent;
+
+import com.yahoo.yolean.UncheckedInterruptedException;
+
+import java.time.Duration;
+
+import static com.yahoo.yolean.Exceptions.uncheckInterrupted;
+
+/**
+ * An abstraction used for mocking {@link Thread#sleep(long)} in unit tests.
+ *
+ * @author bjorncs
+ */
+public interface Sleeper {
+ default void sleep(Duration duration) throws UncheckedInterruptedException {
+ uncheckInterrupted(() -> sleepChecked(duration.toMillis()));
+ }
+
+ default void sleepChecked(Duration duration) throws InterruptedException { sleepChecked(duration.toMillis()); }
+
+ default void sleep(long millis) throws UncheckedInterruptedException { uncheckInterrupted(() -> sleepChecked(millis)); }
+
+ void sleepChecked(long millis) throws InterruptedException;
+
+ Sleeper DEFAULT = Thread::sleep;
+ Sleeper NOOP = millis -> {};
+
+}