1   package com.atlassian.util.concurrent;
2   
3   import static java.util.concurrent.TimeUnit.NANOSECONDS;
4   import static org.junit.Assert.assertFalse;
5   import static org.junit.Assert.assertTrue;
6   
7   import org.junit.Test;
8   
9   import com.google.common.base.Predicate;
10  
11  import java.util.concurrent.TimeUnit;
12  
13  public class TimeToIdleTest {
14      @Test
15      public void timesOut() {
16          final MockTimeSupplier supplier = new MockTimeSupplier(2, TimeUnit.NANOSECONDS);
17          final Predicate<Void> ttl = new Lazy.TimeToIdle(Timeout.timeoutFactory(2, NANOSECONDS, supplier));
18          assertTrue(ttl.apply(null));
19          assertTrue(ttl.apply(null));
20          // advance
21          supplier.currentTime();
22          for (int i = 0; i < 1000; i++) {
23              assertFalse(String.valueOf(i), ttl.apply(null));
24          }
25      }
26  
27      @Test
28      public void resetsAfterSuccess() {
29          final MockTimeSupplier supplier = new MockTimeSupplier(2, TimeUnit.NANOSECONDS);
30          final Predicate<Void> ttl = new Lazy.TimeToIdle(Timeout.timeoutFactory(2, NANOSECONDS, supplier));
31          for (int i = 0; i < 1000; i++) {
32              assertTrue(String.valueOf(i), ttl.apply(null));
33          }
34      }
35  }