Use leapseclist instead of leapsectz and test also negative leap seconds. Add a test for leapsectz when the date command indicates right/UTC is available on the system and mktime() works as expected. Check TAI offset in the server's log.
93 lines
2.4 KiB
Bash
Executable file
93 lines
2.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
. ./test.common
|
|
|
|
test_start "leap second"
|
|
|
|
check_config_h 'FEAT_REFCLOCK 1' || test_skip
|
|
|
|
export CLKNETSIM_START_DATE=$(TZ=UTC date -d 'Dec 30 2008 0:00:00' +'%s')
|
|
|
|
limit=$[4 * 24 * 3600]
|
|
client_start=$[2 * 3600]
|
|
refclock_jitter=1e-9
|
|
|
|
for dir in "+1" "-1"; do
|
|
leap=$[2 * 24 * 3600 + 1 + $dir]
|
|
server_conf="refclock SHM 0 dpoll 10 poll 10
|
|
leapseclist tmp/leap.list"
|
|
refclock_offset="(* $dir (equal 0.1 (max (sum 1.0) $leap) $leap))"
|
|
|
|
cat > tmp/leap.list <<-EOF
|
|
#$ 3676924800
|
|
#@ 3928521600
|
|
3345062400 33 # 1 Jan 2006
|
|
3439756800 $[33 - $dir] # 1 Jan 2009 $(
|
|
[ "$dir" = "+1" ] && echo -e "\n3471292800 33\n3502828800 34")
|
|
3550089600 35 # 1 Jul 2012
|
|
EOF
|
|
|
|
for leapmode in system step slew; do
|
|
client_conf="leapsecmode $leapmode"
|
|
if [ $leapmode = slew ]; then
|
|
max_sync_time=$[2 * 24 * 3600 + 13]
|
|
else
|
|
max_sync_time=$[2 * 24 * 3600 + 1]
|
|
fi
|
|
min_sync_time=$[$max_sync_time - 2]
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_packet_interval || test_fail
|
|
check_sync || test_fail
|
|
check_file_messages "System clock TAI offset set to" 1 1 log.1 || test_fail
|
|
check_file_messages "System clock TAI offset set to 33" 1 1 log.1 || test_fail
|
|
done
|
|
|
|
client_server_options="trust"
|
|
client_conf="refclock SHM 0 dpoll 10 poll 10 delay 1e-3"
|
|
min_sync_time=$[$leap - 2]
|
|
max_sync_time=$[$leap]
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_packet_interval || test_fail
|
|
check_sync || test_fail
|
|
|
|
client_server_options=""
|
|
client_conf="leapsecmode system"
|
|
min_sync_time=230000
|
|
max_sync_time=240000
|
|
|
|
for smoothmode in "" "leaponly"; do
|
|
server_conf="refclock SHM 0 dpoll 10 poll 10
|
|
leapseclist tmp/leap.list
|
|
leapsecmode slew
|
|
smoothtime 400 0.001 $smoothmode"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_packet_interval || test_fail
|
|
check_sync || test_fail
|
|
done
|
|
done
|
|
|
|
if TZ=right/UTC date -d 'Dec 31 2008 23:59:60' 2> /dev/null | grep :60; then
|
|
server_conf="refclock SHM 0 dpoll 10 poll 10
|
|
leapsectz right/UTC"
|
|
refclock_offset="(* -1 (equal 0.1 (max (sum 1.0) $leap) $leap))"
|
|
client_conf="leapsecmode system"
|
|
min_sync_time=$[$leap - 2]
|
|
max_sync_time=$[$leap]
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_packet_interval || test_fail
|
|
check_sync || test_fail
|
|
fi
|
|
|
|
test_pass
|