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