#!/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