NAME = 'monotonic_time'
AUTHOR = 'Michael Davidson <md@google.com>'
TIME = 'MEDIUM'
TEST_CLASS = 'Kernel'
TEST_CATEGORY = 'Functional'
TEST_TYPE = 'client'
DOC = """
monotonic_time checks various time interfaces:
  gettimeofday()
  clock_gettime(CLOCK_MONTONIC)
  TSC
for monotonicity.

Based on time-warp-test.c by Ingo Molnar.
"""

#
# Test gettimeofday(), TSC, and clock_gettime(CLOCK_MONOTONIC)
#
# Tests run for 'duration' seconds and check that the selected
# time interface does not go backwards by more than 'threshold'.
#
# Note that the threshold value has the same resolution as the
# clock source:
#   gettimeofday()                 - microseconds
#   clock_gettime(CLOCK_MONOTONIC) - nanoseconds
#   TSC                            - CPU clock cycles
#
#
job.run_test('monotonic_time', tag='gtod',  test_type='gtod',
             duration=300, threshold=0)

job.run_test('monotonic_time', tag='clock', test_type='clock',
             duration=300, threshold=0)

job.run_test('monotonic_time', tag='tsc',   test_type='tsc',
             duration=300, threshold=0)