001
014
015 package com.liferay.portal.kernel.test;
016
017 import java.util.concurrent.Callable;
018 import java.util.concurrent.TimeUnit;
019
020
023 public class IdempotentRetryAssert {
024
025 public static <T> T retryAssert(
026 long timeout, TimeUnit timeoutTimeUnit, Callable<T> callable)
027 throws Exception {
028
029 return retryAssert(
030 timeout, timeoutTimeUnit, 0, TimeUnit.SECONDS, callable);
031 }
032
033 public static <T> T retryAssert(
034 long timeout, TimeUnit timeoutTimeUnit, long pause,
035 TimeUnit pauseTimeUnit, Callable<T> callable)
036 throws Exception {
037
038 long deadline =
039 System.currentTimeMillis() + timeoutTimeUnit.toMillis(timeout);
040
041 while (true) {
042 try {
043 return callable.call();
044 }
045 catch (AssertionError ae) {
046 if (System.currentTimeMillis() > deadline) {
047 throw ae;
048 }
049 }
050
051 Thread.sleep(pauseTimeUnit.toMillis(pause));
052 }
053 }
054
055 }