Files
archy/scripts/tests/test_platform_timing_nts_interval.py

38 lines
1.7 KiB
Python

import importlib.util
from pathlib import Path
import unittest
spec=importlib.util.spec_from_file_location('interval',Path(__file__).parents[1]/'platform_timing_nts_interval.py')
interval=importlib.util.module_from_spec(spec);spec.loader.exec_module(interval)
class IntervalTests(unittest.TestCase):
def endpoint(self, boot, utc, error=3):
return dict(observer_started_wall_ns=utc-100,
observation=dict(boot_id='a'*32,boottime_ns=boot,utc_ns=utc,
sampling_bracket_ns=1,observation_error_ns=error,collected_at_ns=boot+1,
assessment=dict(reference_time=str(utc/10**9))))
def test_conservative_interval_and_ceil_never_profile(self):
result=interval.analyze(self.endpoint(1,10**9),self.endpoint(4,10**9+5))
self.assertEqual(result['elapsed_error_interval_ns'],[-8,4])
self.assertEqual(result['observed_interval_envelope_ppb'],2666666667)
self.assertIsNone(result['max_elapsed_error_ppb'])
self.assertFalse(result['qualified'])
def test_cross_boot_rejected(self):
a,b=self.endpoint(1,10**9),self.endpoint(100,10**9+100)
b['observation']['boot_id']='b'*32
with self.assertRaises(ValueError):interval.analyze(a,b)
def test_stale_reference_rejected(self):
a,b=self.endpoint(1,10**9),self.endpoint(100,10**9+100)
b['observer_started_wall_ns']=2*10**9
with self.assertRaises(ValueError):interval.analyze(a,b)
def test_overlapping_endpoints_rejected(self):
with self.assertRaises(ValueError):interval.analyze(self.endpoint(1,10**9),self.endpoint(2,10**9+1))
if __name__=='__main__':unittest.main()