1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.spf4j.test.log;
17
18 import edu.umd.cs.findbugs.annotations.CleanupObligation;
19 import edu.umd.cs.findbugs.annotations.DischargesObligation;
20 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
21 import java.util.concurrent.TimeUnit;
22 import org.spf4j.base.TimeSource;
23
24
25
26
27 @CleanupObligation
28 public interface ObservationAssert {
29
30
31
32
33
34 @DischargesObligation
35 void assertObservation();
36
37
38 @SuppressFBWarnings("MDM_THREAD_YIELD")
39 @DischargesObligation
40 default void assertObservation(final long time, final TimeUnit tu) throws InterruptedException {
41 long deadline = TimeSource.nanoTime() + tu.toNanos(time);
42 AssertionError rae;
43 do {
44 try {
45 assertObservation();
46 rae = null;
47 } catch (AssertionError ae) {
48 rae = ae;
49 }
50 if (rae == null) {
51 return;
52 }
53 Thread.sleep(100);
54 } while (TimeSource.nanoTime() < deadline);
55 throw rae;
56 }
57
58 }