#!/usr/bin/env bash

. ./test.common
test_start "SHM refclock"

check_config_h 'FEAT_REFCLOCK 1' || test_skip
check_config_h 'FEAT_PHC 1' || test_skip
check_config_h 'FEAT_CMDMON 1' || test_skip

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"; 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

	check_file_messages "20.* GPS.*[0-9] N " 997 1001 refclocks.log || test_fail
	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 " 620 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=100
	max_sync_time=220
	chronyc_start=220
	client_conf="
refclock SHM 0 refid NMEA offset 0.35 delay 0.1
refclock PPS /dev/pps0
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 " 800 940  refclocks.log || test_fail
	check_file_messages "20.* PPS1.*- N " 50 63 refclocks.log || test_fail
	rm -f tmp/refclocks.log
fi

test_pass
