#!/bin/bash

#
# Copyright (C) 2007 Karel Zak <kzak@redhat.com>
#
# This file is part of util-linux-ng.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#

TS_TOPDIR="$(dirname $0)/../.."
TS_DESC="system to hw"
NTP_SERVER="0.fedora.pool.ntp.org"

. $TS_TOPDIR/functions.sh
ts_init "$*"
ts_skip_nonroot

[ -x "/usr/sbin/ntpdate" ] || ts_skip "cannot found ntpdate command"

set -o pipefail

# sync with server
(ntpdate $NTP_SERVER | sed "s/^.*offset \([0-9.]*\) sec/\1/g") &> /dev/null
[ "$?" == "1" ] && ts_skip "cannot sync with $NTP_SERVER"

# sync again and check difference
OFFSET=$( ntpdate $NTP_SERVER 2> /dev/null | sed "s/^.*offset [\-]*\([0-9.]*\) sec/\1/g" )
[ "$?" == "1" ] && ts_skip "cannot sync with $NTP_SERVER (2nd attempt)"

DIFF=$( echo "$OFFSET > 1" | bc )
[ "$DIFF" == "1" ] && ts_skip "diff between systime and NTP is greated than 1 second"

# call hwclock
for i in `seq 0 10`; do
	#echo "sync #$i"
	$TS_CMD_HWCLOCK --systohc
	$TS_CMD_HWCLOCK --hctosys
done

# sync with NTP and check new difference
OFFSET=$( ntpdate $NTP_SERVER 2> /dev/null | sed "s/^.*offset [\-]*\([0-9.]*\) sec/\1/g" )
[ "$?" == "1" ] && ts_skip "cannot sync with $NTP_SERVER (3rd attempt)"

DIFF=$( echo "$OFFSET > 1" | bc )
[ "$DIFF" == "1" ] && ts_failed "offset is $OFFSET"

ts_ok "offset is $OFFSET"

