package org.infinispan.util; import static org.infinispan.test.AbstractInfinispanTest.TIME_SERVICE; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.concurrent.TimeUnit; import org.testng.annotations.Test; /** * @author Pedro Ruivo * @since 5.3 */ @Test(groups = "functional", testName = "util.DefaultTimeServiceTest") public class DefaultTimeServiceTest { public void testMonotonicIncrement() { TimeService timeService = TIME_SERVICE; //less or equals in all the cases because the system may not have enough precision and the methods may return // the same value. assertTrue(timeService.time() <= timeService.time()); assertTrue(timeService.wallClockTime() <= timeService.wallClockTime()); } public void testDuration() { TimeService timeService = new DefaultTimeService() { @Override public long time() { return 10; } @Override public long wallClockTime() { return 10; } }; assertEquals(timeService.timeDuration(0, TimeUnit.NANOSECONDS), 10); assertEquals(timeService.timeDuration(-1, TimeUnit.NANOSECONDS), 11); assertEquals(timeService.timeDuration(10, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(11, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(9, TimeUnit.NANOSECONDS), 1); assertEquals(timeService.timeDuration(9, TimeUnit.MICROSECONDS), 0); assertEquals(timeService.timeDuration(9, TimeUnit.MILLISECONDS), 0); assertEquals(timeService.timeDuration(0, 1, TimeUnit.NANOSECONDS), 1); assertEquals(timeService.timeDuration(0, -1, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(1, 0, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(1, -1, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(-1, -1, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(0, 0, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.timeDuration(0, 1000, TimeUnit.MICROSECONDS), 1); assertEquals(timeService.timeDuration(0, 1000000, TimeUnit.MILLISECONDS), 1); } public void testExpired() { TimeService timeService = new DefaultTimeService() { @Override public long time() { return 10; } }; assertTrue(timeService.isTimeExpired(-1)); assertTrue(timeService.isTimeExpired(0)); assertTrue(timeService.isTimeExpired(9)); assertTrue(timeService.isTimeExpired(10)); assertFalse(timeService.isTimeExpired(11)); } public void testRemainingTime() { TimeService timeService = new DefaultTimeService() { @Override public long time() { return 10; } }; assertEquals(timeService.remainingTime(-1, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.remainingTime(0, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.remainingTime(9, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.remainingTime(10, TimeUnit.NANOSECONDS), 0); assertEquals(timeService.remainingTime(11, TimeUnit.NANOSECONDS), 1); assertEquals(timeService.remainingTime(11, TimeUnit.MICROSECONDS), 0); assertEquals(timeService.remainingTime(11, TimeUnit.MILLISECONDS), 0); } public void testExpectedTime() { TimeService timeService = new DefaultTimeService() { @Override public long time() { return 10; } @Override public long wallClockTime() { return 10; } }; assertEquals(timeService.expectedEndTime(-1, TimeUnit.NANOSECONDS), 10); assertEquals(timeService.expectedEndTime(0, TimeUnit.NANOSECONDS), 10); assertEquals(timeService.expectedEndTime(1, TimeUnit.NANOSECONDS), 11); assertEquals(timeService.expectedEndTime(9, TimeUnit.NANOSECONDS), 19); assertEquals(timeService.expectedEndTime(10, TimeUnit.NANOSECONDS), 20); assertEquals(timeService.expectedEndTime(11, TimeUnit.NANOSECONDS), 21); assertEquals(timeService.expectedEndTime(11, TimeUnit.MICROSECONDS), 11010); assertEquals(timeService.expectedEndTime(11, TimeUnit.MILLISECONDS), 11000010); } }