#!/usr/bin/env bash . ./test.common test_start "reference clocks" check_config_h 'FEAT_REFCLOCK 1' || test_skip check_config_h 'FEAT_PHC 1' || test_skip check_config_h 'FEAT_CMDMON 1' || test_skip export CLKNETSIM_PHC_DELAY=1e-6 export CLKNETSIM_PHC_JITTER=1e-7 servers=0 limit=1000 refclock_jitter=$jitter min_sync_time=45 max_sync_time=70 chronyc_start=70 chronyc_conf="tracking" for refclock in "SHM 0" "PHC /dev/ptp0" "PHC /dev/ptp0:nocrossts"; do client_conf="refclock $refclock stratum 3 delay 1e-3 refid GPS logdir tmp log refclocks" run_test || test_fail check_chronyd_exit || test_fail check_source_selection || test_fail check_sync || test_fail check_chronyc_output "^Reference ID.*47505300 \(GPS\) Stratum.*: 4 .* Root delay : 0.001000000 seconds .* Update interval : 16\.. seconds .*$" || test_fail if echo "$refclock" | grep -q 'PHC.*nocrossts'; then check_file_messages "20.* GPS.*[0-9] N " 620 750 refclocks.log || test_fail else check_file_messages "20.* GPS.*[0-9] N " 997 1001 refclocks.log || test_fail fi check_file_messages "20.* GPS.*- N " 61 63 refclocks.log || test_fail rm -f tmp/refclocks.log done if check_config_h 'FEAT_PPS 1'; then refclock_offset=0.35 refclock_jitter=0.05 client_conf=" refclock SHM 0 refid NMEA noselect refclock PPS /dev/pps0 lock NMEA logdir tmp log refclocks" run_test || test_fail check_chronyd_exit || test_fail check_source_selection || test_fail check_sync || test_fail check_chronyc_output "^Reference ID.*50505331 \(PPS1\) Stratum.*: 1 .* Root delay : 0\.000000001 seconds .*$" || test_fail check_file_messages "20.* PPS1.*[0-9] N " 610 740 refclocks.log || test_fail check_file_messages "20.* PPS1.*- N " 60 63 refclocks.log || test_fail rm -f tmp/refclocks.log client_conf=" refclock SHM 0 noselect refclock PPS /dev/pps0 local logdir tmp log refclocks" run_test || test_fail check_chronyd_exit || test_fail check_source_selection || test_fail check_sync || test_fail check_chronyc_output "^Reference ID.*50505331 \(PPS1\) Stratum.*: 10 .* Root delay : 0\.000000001 seconds .*$" || test_fail check_file_messages "20.* PPS1.*[0-9] N " 997 1001 refclocks.log || test_fail check_file_messages "20.* PPS1.*- N " 60 63 refclocks.log || test_fail rm -f tmp/refclocks.log min_sync_time=80 max_sync_time=180 chronyc_start=220 client_conf=" refclock SHM 0 refid NMEA offset 0.35 delay 0.1 refclock PPS /dev/pps0 logdir tmp log refclocks maxupdateskew 10000" run_test || test_fail check_chronyd_exit || test_fail check_source_selection || test_fail check_sync || test_fail check_chronyc_output "^Reference ID.*50505331 \(PPS1\) Stratum.*: 1 .* Root delay : 0\.000000001 seconds .*$" || test_fail check_file_messages "20.* PPS1.*[0-9] N " 800 960 refclocks.log || test_fail check_file_messages "20.* PPS1.*- N " 50 63 refclocks.log || test_fail rm -f tmp/refclocks.log fi refclock_offset="(+ 0.399 (sum 1e-3))" refclock_jitter=1e-6 servers=1 freq_offset="(* 1e-4 (sine 1000))" base_delay="(* -1.0 (equal 0.1 (min time 5000) 5000))" client_server_options="minpoll 4 maxpoll 4 filter 5 minsamples 64" client_conf=" refclock PHC /dev/ptp0 local poll 2 logdir tmp log refclocks tracking" chronyc_conf="" limit=10000 max_sync_time=5000 time_max_limit=1e-3 time_rms_limit=5e-4 freq_max_limit=2e-5 freq_rms_limit=5e-6 run_test || test_fail check_chronyd_exit || test_fail check_sync || test_fail check_file_messages "20.* PHC0 .* [0-9] ? " 9999 10001 refclocks.log || test_fail check_file_messages "20.* PHC0 .* - ? " 2499 2501 refclocks.log || test_fail check_file_messages "20.* PHC0 " 0 0 tracking.log || test_fail rm -f tmp/refclocks.log tmp/tracking.log test_pass