/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
* *************************************************************************************
*/
package com.espertech.esper.timer;
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Ensure that TimeSourceMills and TimeSourceMills
* agree on wall clock time.
* @author Jerry Shea
*/
public class TestTimeSource extends TestCase
{
public void tearDown()
{
TimeSourceServiceImpl.IS_SYSTEM_CURRENT_TIME = true;
}
public void testWallClock() throws InterruptedException
{
// allow a tolerance as TimeSourceMillis resolution may be around 16ms
final long TOLERANCE_MILLISECS = 50, DELAY_MILLISECS = 100;
// This is a smoke test
TimeSourceService nanos = new TimeSourceServiceImpl();
TimeSourceService millis = new TimeSourceServiceImpl();
assertTimeWithinTolerance(TOLERANCE_MILLISECS, nanos, millis);
Thread.sleep(DELAY_MILLISECS);
assertTimeWithinTolerance(TOLERANCE_MILLISECS, nanos, millis);
Thread.sleep(DELAY_MILLISECS);
assertTimeWithinTolerance(TOLERANCE_MILLISECS, nanos, millis);
Thread.sleep(DELAY_MILLISECS);
assertTimeWithinTolerance(TOLERANCE_MILLISECS, nanos, millis);
}
private void assertTimeWithinTolerance(final long TOLERANCE_MILLISECS,
TimeSourceService nanos, TimeSourceService millis) {
TimeSourceServiceImpl.IS_SYSTEM_CURRENT_TIME = true;
long nanosWallClockTime = nanos.getTimeMillis();
TimeSourceServiceImpl.IS_SYSTEM_CURRENT_TIME = false;
long millisWallClockTime = millis.getTimeMillis();
long diff = nanosWallClockTime - millisWallClockTime;
log.info("diff="+diff+" between "+nanos+" and "+millis);
assertTrue("Diff "+diff+" >= "+TOLERANCE_MILLISECS, Math.abs(diff) < TOLERANCE_MILLISECS);
}
private static final Log log = LogFactory.getLog(TestTimeSource.class);
}