1 package com.atlassian.util.concurrent;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import java.util.concurrent.TimeUnit;
8
9 import org.junit.Test;
10
11 import com.atlassian.util.concurrent.Timeout.TimeSupplier;
12
13 public class TimeoutTest {
14 @Test
15 public void timeInNanoseconds() {
16 final Timeout timeout = new Timeout(1, TimeUnit.SECONDS, new MockTimeSupplier(1000, TimeUnit.NANOSECONDS));
17 assertEquals(999999999L, timeout.getTime());
18 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
19 assertEquals(999999998L, timeout.getTime());
20 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
21 }
22
23 @Test
24 public void timeInMicroseconds() {
25 final Timeout timeout = new Timeout(1, TimeUnit.SECONDS, new MockTimeSupplier(1000, TimeUnit.MICROSECONDS));
26 assertEquals(999999L, timeout.getTime());
27 assertEquals(TimeUnit.MICROSECONDS, timeout.getUnit());
28 assertEquals(999998L, timeout.getTime());
29 assertEquals(TimeUnit.MICROSECONDS, timeout.getUnit());
30 }
31
32 @Test
33 public void timeInMilliseconds() {
34 final Timeout timeout = new Timeout(1, TimeUnit.SECONDS, new MockTimeSupplier(1000, TimeUnit.MILLISECONDS));
35 assertEquals(999L, timeout.getTime());
36 assertEquals(TimeUnit.MILLISECONDS, timeout.getUnit());
37 assertEquals(998L, timeout.getTime());
38 assertEquals(TimeUnit.MILLISECONDS, timeout.getUnit());
39 }
40
41 @Test
42 public void hourInNanoseconds() {
43 final Timeout timeout = new Timeout(3600, TimeUnit.SECONDS, new MockTimeSupplier(1000, TimeUnit.NANOSECONDS));
44 assertEquals(3599999999999L, timeout.getTime());
45 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
46 assertEquals(3599999999998L, timeout.getTime());
47 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
48 }
49
50 @Test
51 public void hourIsExpired() {
52 final Timeout timeout = new Timeout(3, TimeUnit.NANOSECONDS, new MockTimeSupplier(2, TimeUnit.NANOSECONDS));
53 assertEquals(2, timeout.getTime());
54 assertFalse(timeout.isExpired());
55 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
56 assertEquals(0L, timeout.getTime());
57 assertEquals(TimeUnit.NANOSECONDS, timeout.getUnit());
58 assertTrue(timeout.isExpired());
59 }
60
61 @Test
62 public void millisFactory() {
63 final Timeout timeout = Timeout.getMillisTimeout(2, TimeUnit.MILLISECONDS);
64 assertFalse(timeout.isExpired());
65 assertEquals(TimeUnit.MILLISECONDS, timeout.getUnit());
66 }
67
68 class MockTimeSupplier implements TimeSupplier {
69 private int currentTimeCalled;
70 private final long time;
71 private final TimeUnit unit;
72
73 MockTimeSupplier(final long time, final TimeUnit unit) {
74 this.time = time;
75 this.unit = unit;
76 }
77
78 public long currentTime() {
79 return time + currentTimeCalled++;
80 }
81
82 public TimeUnit precision() {
83 return unit;
84 }
85 }
86 }