Blame test/simulation/test.common

Packit Service 623930
# Copyright (C) 2013-2014  Miroslav Lichvar <mlichvar@redhat.com>
Packit Service 623930
#
Packit Service 623930
# This program is free software; you can redistribute it and/or modify
Packit Service 623930
# it under the terms of the GNU General Public License as published by
Packit Service 623930
# the Free Software Foundation; either version 2 of the License, or
Packit Service 623930
# (at your option) any later version.
Packit Service 623930
#
Packit Service 623930
# This program is distributed in the hope that it will be useful,
Packit Service 623930
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 623930
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 623930
# GNU General Public License for more details.
Packit Service 623930
#
Packit Service 623930
# You should have received a copy of the GNU General Public License
Packit Service 623930
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 623930
Packit Service 623930
export LC_ALL=C
Packit Service 623930
export PATH=../../:$PATH
Packit Service 623930
export CLKNETSIM_PATH=${CLKNETSIM_PATH:-clknetsim}
Packit Service 623930
Packit Service 623930
if [ ! -x $CLKNETSIM_PATH/clknetsim ]; then
Packit Service 623930
	echo "SKIP (clknetsim not found)"
Packit Service 623930
	exit 9
Packit Service 623930
fi
Packit Service 623930
Packit Service 623930
. $CLKNETSIM_PATH/clknetsim.bash
Packit Service 623930
Packit Service 623930
# Default test testings
Packit Service 623930
Packit Service 623930
default_limit=10000
Packit Service 623930
default_time_offset=1e-1
Packit Service 623930
default_freq_offset=1e-4
Packit Service 623930
default_base_delay=1e-4
Packit Service 623930
default_jitter=1e-4
Packit Service 623930
default_jitter_asymmetry=0.0
Packit Service 623930
default_wander=1e-9
Packit Service 623930
default_refclock_jitter=""
Packit Service 623930
default_refclock_offset=0.0
Packit Service 623930
Packit Service 623930
default_update_interval=0
Packit Service 623930
default_shift_pll=2
Packit Service 623930
Packit Service 623930
default_server_strata=1
Packit Service 623930
default_servers=1
Packit Service 623930
default_clients=1
Packit Service 623930
default_peers=0
Packit Service 623930
default_falsetickers=0
Packit Service 623930
default_server_start=0.0
Packit Service 623930
default_client_start=0.0
Packit Service 623930
default_chronyc_start=1000.0
Packit Service 623930
default_server_step=""
Packit Service 623930
default_client_step=""
Packit Service 623930
Packit Service 623930
default_client_server_conf=""
Packit Service 623930
default_server_server_options=""
Packit Service 623930
default_client_server_options=""
Packit Service 623930
default_server_peer_options=""
Packit Service 623930
default_server_lpeer_options=""
Packit Service 623930
default_server_rpeer_options=""
Packit Service 623930
default_client_peer_options=""
Packit Service 623930
default_client_lpeer_options=""
Packit Service 623930
default_client_rpeer_options=""
Packit Service 623930
default_server_conf=""
Packit Service 623930
default_client_conf=""
Packit Service 623930
default_chronyc_conf=""
Packit Service 623930
default_server_chronyd_options=""
Packit Service 623930
default_client_chronyd_options=""
Packit Service 623930
Packit Service 623930
default_time_max_limit=1e-3
Packit Service 623930
default_freq_max_limit=5e-4
Packit Service 623930
default_time_rms_limit=3e-4
Packit Service 623930
default_freq_rms_limit=1e-5
Packit Service 623930
default_min_sync_time=120
Packit Service 623930
default_max_sync_time=210
Packit Service 623930
Packit Service 623930
default_client_min_mean_out_interval=0.0
Packit Service 623930
default_client_max_min_out_interval=inf
Packit Service 623930
Packit Service 623930
# Initialize test settings from their defaults
Packit Service 623930
for defoptname in ${!default_*}; do
Packit Service 623930
	optname=${defoptname#default_}
Packit Service 623930
	[ -z "${!optname}" ] && declare "$optname"="${!defoptname}"
Packit Service 623930
done
Packit Service 623930
Packit Service 623930
test_start() {
Packit Service 623930
	rm -f tmp/*
Packit Service 623930
	echo "Testing $@:"
Packit Service 623930
Packit Service 623930
	check_config_h 'FEAT_NTP 1' || test_skip
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_pass() {
Packit Service 623930
	echo "PASS"
Packit Service 623930
	exit 0
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_fail() {
Packit Service 623930
	echo "FAIL"
Packit Service 623930
	exit 1
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_skip() {
Packit Service 623930
	echo "SKIP"
Packit Service 623930
	exit 9
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_ok() {
Packit Service 623930
	pad_line
Packit Service 623930
	echo -e "\tOK"
Packit Service 623930
	return 0
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_bad() {
Packit Service 623930
	pad_line
Packit Service 623930
	echo -e "\tBAD"
Packit Service 623930
	return 1
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
test_error() {
Packit Service 623930
	pad_line
Packit Service 623930
	echo -e "\tERROR"
Packit Service 623930
	return 1
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
msg_length=0
Packit Service 623930
pad_line() {
Packit Service 623930
	local line_length=56
Packit Service 623930
	[ $msg_length -lt $line_length ] && \
Packit Service 623930
		printf "%$[$line_length - $msg_length]s" ""
Packit Service 623930
	msg_length=0
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Print aligned message
Packit Service 623930
test_message() {
Packit Service 623930
	local level=$1 eol=$2
Packit Service 623930
	shift 2
Packit Service 623930
	local msg="$*"
Packit Service 623930
Packit Service 623930
	while [ $level -gt 0 ]; do
Packit Service 623930
		echo -n "  "
Packit Service 623930
		level=$[$level - 1]
Packit Service 623930
		msg_length=$[$msg_length + 2]
Packit Service 623930
	done
Packit Service 623930
	echo -n "$msg"
Packit Service 623930
Packit Service 623930
	msg_length=$[$msg_length + ${#msg}]
Packit Service 623930
	if [ $eol -ne 0 ]; then
Packit Service 623930
		echo
Packit Service 623930
		msg_length=0
Packit Service 623930
	fi
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
get_wander_expr() {
Packit Service 623930
	local scaled_wander
Packit Service 623930
Packit Service 623930
	scaled_wander=$(awk "BEGIN {print $wander / \
Packit Service 623930
		sqrt($update_interval < 0 ? 2^-($update_interval) : 1)}")
Packit Service 623930
Packit Service 623930
	echo "(+ $freq_offset (sum (* $scaled_wander (normal))))"
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
Packit Service 623930
get_delay_expr() {
Packit Service 623930
	local direction=$1 asym
Packit Service 623930
Packit Service 623930
	if [ $jitter_asymmetry == "0.0" ]; then
Packit Service 623930
		asym=""
Packit Service 623930
	elif [ $direction = "up" ]; then
Packit Service 623930
		asym=$(awk "BEGIN {print 1 - 2 * $jitter_asymmetry}")
Packit Service 623930
	elif [ $direction = "down" ]; then
Packit Service 623930
		asym=$(awk "BEGIN {print 1 + 2 * $jitter_asymmetry}")
Packit Service 623930
	fi
Packit Service 623930
	echo "(+ $base_delay (* $asym $jitter (exponential)))"
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
get_refclock_expr() {
Packit Service 623930
	echo "(+ $refclock_offset (* $refclock_jitter (normal)))"
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
get_chronyd_nodes() {
Packit Service 623930
	echo $[$servers * $server_strata + $clients]
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
get_chronyd_conf() {
Packit Service 623930
	local i stratum=$1 peer=$2
Packit Service 623930
Packit Service 623930
	if [ $stratum -eq 1 ]; then
Packit Service 623930
		echo "local stratum 1"
Packit Service 623930
		echo "$server_conf"
Packit Service 623930
	elif [ $stratum -le $server_strata ]; then
Packit Service 623930
		for i in $(seq 1 $servers); do
Packit Service 623930
			echo "server 192.168.123.$[$servers * ($stratum - 2) + $i] $server_server_options"
Packit Service 623930
		done
Packit Service 623930
		for i in $(seq 1 $peers); do
Packit Service 623930
			[ $i -eq $peer -o $i -gt $servers ] && continue
Packit Service 623930
			echo -n "peer 192.168.123.$[$servers * ($stratum - 1) + $i] $server_peer_options "
Packit Service 623930
			[ $i -lt $peer ] && echo "$server_lpeer_options" || echo "$server_rpeer_options"
Packit Service 623930
		done
Packit Service 623930
		echo "$server_conf"
Packit Service 623930
	else
Packit Service 623930
		if [ -n "$client_server_conf" ]; then
Packit Service 623930
			echo "$client_server_conf"
Packit Service 623930
		else
Packit Service 623930
			for i in $(seq 1 $servers); do
Packit Service 623930
				echo "server 192.168.123.$[$servers * ($stratum - 2) + $i] $client_server_options"
Packit Service 623930
			done
Packit Service 623930
		fi
Packit Service 623930
		for i in $(seq 1 $peers); do
Packit Service 623930
			[ $i -eq $peer -o $i -gt $clients ] && continue
Packit Service 623930
			echo -n "peer 192.168.123.$[$servers * ($stratum - 1) + $i] $client_peer_options "
Packit Service 623930
			[ $i -lt $peer ] && echo "$client_lpeer_options" || echo "$client_rpeer_options"
Packit Service 623930
		done
Packit Service 623930
		echo "$client_conf"
Packit Service 623930
	fi
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check if chrony was built with specified option in config.h
Packit Service 623930
check_config_h() {
Packit Service 623930
	local pattern=$1
Packit Service 623930
	grep -q "^#define $pattern" ../../config.h
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check if the clock was well synchronized
Packit Service 623930
check_sync() {
Packit Service 623930
	local i sync_time max_time_error max_freq_error ret=0
Packit Service 623930
	local rms_time_error rms_freq_error
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking clock sync time, max/rms time/freq error:"
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $(get_chronyd_nodes)); do
Packit Service 623930
		[ $i -gt $[$servers * $server_strata] ] || continue
Packit Service 623930
Packit Service 623930
		sync_time=$(find_sync tmp/log.offset tmp/log.freq $i \
Packit Service 623930
			$time_max_limit $freq_max_limit 1.0)
Packit Service 623930
		max_time_error=$(get_stat 'Maximum absolute offset' $i)
Packit Service 623930
		max_freq_error=$(get_stat 'Maximum absolute frequency' $i)
Packit Service 623930
		rms_time_error=$(get_stat 'RMS offset' $i)
Packit Service 623930
		rms_freq_error=$(get_stat 'RMS frequency' $i)
Packit Service 623930
Packit Service 623930
		test_message 3 0 "node $i: $sync_time $(printf '%.2e %.2e %.2e %.2e' \
Packit Service 623930
			$max_time_error $max_freq_error $rms_time_error $rms_freq_error)"
Packit Service 623930
Packit Service 623930
		check_stat $sync_time $min_sync_time $max_sync_time && \
Packit Service 623930
			check_stat $max_time_error 0.0 $time_max_limit && \
Packit Service 623930
			check_stat $max_freq_error 0.0 $freq_max_limit && \
Packit Service 623930
			check_stat $rms_time_error 0.0 $time_rms_limit && \
Packit Service 623930
			check_stat $rms_freq_error 0.0 $freq_rms_limit && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check if chronyd exited properly
Packit Service 623930
check_chronyd_exit() {
Packit Service 623930
	local i ret=0
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking chronyd exit:"
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $(get_chronyd_nodes)); do
Packit Service 623930
		test_message 3 0 "node $i:"
Packit Service 623930
Packit Service 623930
		grep -q 'chronyd exiting' tmp/log.$i && \
Packit Service 623930
			! grep -q 'Adjustment.*exceeds.*exiting' tmp/log.$i && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check for problems in source selection
Packit Service 623930
check_source_selection() {
Packit Service 623930
	local i ret=0
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking source selection:"
Packit Service 623930
Packit Service 623930
	for i in $(seq $[$servers * $server_strata + 1] $(get_chronyd_nodes)); do
Packit Service 623930
		test_message 3 0 "node $i:"
Packit Service 623930
Packit Service 623930
		! grep -q 'no majority\|no selectable sources' tmp/log.$i && \
Packit Service 623930
			grep -q 'Selected source' tmp/log.$i && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check if incoming and outgoing packet intervals are sane
Packit Service 623930
check_packet_interval() {
Packit Service 623930
	local i ret=0 mean_in_interval mean_out_interval min_in_interval min_out_interval
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking mean/min incoming/outgoing packet interval:"
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $(get_chronyd_nodes)); do
Packit Service 623930
		mean_in_interval=$(get_stat 'Mean incoming packet interval' $i)
Packit Service 623930
		mean_out_interval=$(get_stat 'Mean outgoing packet interval' $i)
Packit Service 623930
		min_in_interval=$(get_stat 'Minimum incoming packet interval' $i)
Packit Service 623930
		min_out_interval=$(get_stat 'Minimum outgoing packet interval' $i)
Packit Service 623930
Packit Service 623930
		test_message 3 0 "node $i: $(printf '%.2e %.2e %.2e %.2e' \
Packit Service 623930
			$mean_in_interval $mean_out_interval $min_in_interval $min_out_interval)"
Packit Service 623930
Packit Service 623930
		# Check that the mean intervals are non-zero and shorter than
Packit Service 623930
		# limit, incoming is not longer than outgoing for stratum 1
Packit Service 623930
		# servers, outgoing is not longer than incoming for clients,
Packit Service 623930
		# and the minimum outgoing interval is not shorter than the NTP
Packit Service 623930
		# sampling separation or iburst interval for clients
Packit Service 623930
		nodes=$[$servers * $server_strata + $clients]
Packit Service 623930
		check_stat $mean_in_interval 0.1 inf && \
Packit Service 623930
			check_stat $mean_out_interval 0.1 inf && \
Packit Service 623930
			([ $i -gt $servers ] || \
Packit Service 623930
				check_stat $mean_in_interval 0.0 $mean_out_interval 10*$jitter) && \
Packit Service 623930
			([ $i -le $[$servers * $server_strata] ] || \
Packit Service 623930
				check_stat $mean_out_interval $client_min_mean_out_interval \
Packit Service 623930
					$mean_in_interval 10*$jitter) && \
Packit Service 623930
			([ $i -le $[$servers * $server_strata] ] || \
Packit Service 623930
				check_stat $min_out_interval \
Packit Service 623930
					$([ $servers -gt 1 ] && echo 0.18 || echo 1.8) \
Packit Service 623930
					$client_max_min_out_interval) && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Compare chronyc output with specified pattern
Packit Service 623930
check_chronyc_output() {
Packit Service 623930
	local i ret=0 pattern=$1
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking chronyc output:"
Packit Service 623930
Packit Service 623930
	for i in $(seq $[$(get_chronyd_nodes) + 1] $[$(get_chronyd_nodes) + $clients]); do
Packit Service 623930
		test_message 3 0 "node $i:"
Packit Service 623930
Packit Service 623930
		[[ "$(cat tmp/log.$i)" =~ $pattern ]] && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check the number of messages matching a pattern in the client logs
Packit Service 623930
check_log_messages() {
Packit Service 623930
	local i count ret=0 pattern=$1 min=$2 max=$3
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking number of messages \"$pattern\":"
Packit Service 623930
Packit Service 623930
	for i in $(seq $[$servers * $server_strata + 1] $(get_chronyd_nodes)); do
Packit Service 623930
		count=$(grep "$pattern" tmp/log.$i | wc -l)
Packit Service 623930
		test_message 3 0 "node $i: $count"
Packit Service 623930
Packit Service 623930
		[ "$min" -le "$count" ] && [ "$count" -le "$max" ] && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check the number of messages matching a pattern in a specified file
Packit Service 623930
check_file_messages() {
Packit Service 623930
	local i count ret=0 pattern=$1 min=$2 max=$3
Packit Service 623930
	shift 3
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking number of messages \"$pattern\":"
Packit Service 623930
Packit Service 623930
	for i; do
Packit Service 623930
		count=$(grep "$pattern" tmp/$i | wc -l)
Packit Service 623930
		test_message 3 0 "$i: $count"
Packit Service 623930
Packit Service 623930
		[ "$min" -le "$count" ] && [ "$count" -le "$max" ] && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Check if only NTP port (123) was used
Packit Service 623930
check_packet_port() {
Packit Service 623930
	local i ret=0 port=123
Packit Service 623930
Packit Service 623930
	test_message 2 1 "checking port numbers in packet log:"
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $(get_chronyd_nodes)); do
Packit Service 623930
		test_message 3 0 "node $i:"
Packit Service 623930
Packit Service 623930
		grep -E -q "	$port	[0-9]+\$" tmp/log.packets && \
Packit Service 623930
			! grep -E "^[0-9e.+-]+	$i	" tmp/log.packets | \
Packit Service 623930
			grep -E -q -v "	$port	[0-9]+\$" && \
Packit Service 623930
			test_ok || test_bad
Packit Service 623930
		[ $? -eq 0 ] || ret=1
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	return $ret
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
# Print test settings which differ from default value
Packit Service 623930
print_nondefaults() {
Packit Service 623930
	local defoptname optname
Packit Service 623930
Packit Service 623930
	test_message 2 1 "non-default settings:"
Packit Service 623930
	for defoptname in ${!default_*}; do
Packit Service 623930
		optname=${defoptname#default_}
Packit Service 623930
		[ "${!defoptname}" = "${!optname}" ] || \
Packit Service 623930
			test_message 3 1 $optname=${!optname}
Packit Service 623930
	done
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
run_simulation() {
Packit Service 623930
	local nodes=$1
Packit Service 623930
Packit Service 623930
	test_message 2 0 "running simulation:"
Packit Service 623930
Packit Service 623930
	start_server $nodes \
Packit Service 623930
		-o tmp/log.offset -f tmp/log.freq -p tmp/log.packets \
Packit Service 623930
		-R $(awk "BEGIN {print $update_interval < 0 ? 2^-($update_interval) : 1}") \
Packit Service 623930
		-r $(awk "BEGIN {print $max_sync_time * 2^$update_interval}") \
Packit Service 623930
		-l $(awk "BEGIN {print $limit * 2^$update_interval}") && test_ok || test_error
Packit Service 623930
}
Packit Service 623930
Packit Service 623930
run_test() {
Packit Service 623930
	local i j n stratum node nodes step start freq offset conf options
Packit Service 623930
Packit Service 623930
	test_message 1 1 "network with $servers*$server_strata servers and $clients clients:"
Packit Service 623930
	print_nondefaults
Packit Service 623930
Packit Service 623930
	nodes=$(get_chronyd_nodes)
Packit Service 623930
	[ -n "$chronyc_conf" ] && nodes=$[$nodes + $clients]
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $nodes); do
Packit Service 623930
		echo "node${i}_shift_pll = $shift_pll"
Packit Service 623930
		for j in $(seq 1 $nodes); do
Packit Service 623930
			[ $i -eq $j ] && continue
Packit Service 623930
			echo "node${i}_delay${j} = $(get_delay_expr up)"
Packit Service 623930
			echo "node${j}_delay${i} = $(get_delay_expr down)"
Packit Service 623930
		done
Packit Service 623930
	done > tmp/conf
Packit Service 623930
Packit Service 623930
	node=1
Packit Service 623930
Packit Service 623930
	for stratum in $(seq 1 $[$server_strata + 1]); do
Packit Service 623930
		[ $stratum -le $server_strata ] && n=$servers || n=$clients
Packit Service 623930
Packit Service 623930
		for i in $(seq 1 $n); do
Packit Service 623930
			test_message 2 0 "starting node $node:"
Packit Service 623930
			if [ $stratum -eq 1 ]; then
Packit Service 623930
				step=$server_step
Packit Service 623930
				start=$server_start
Packit Service 623930
				freq=""
Packit Service 623930
				[ $i -le $falsetickers ] && offset=$i.0 || offset=0.0
Packit Service 623930
				options=$server_chronyd_options
Packit Service 623930
			elif [ $stratum -le $server_strata ]; then
Packit Service 623930
				step=$server_step
Packit Service 623930
				start=$server_start
Packit Service 623930
				freq=$(get_wander_expr)
Packit Service 623930
				offset=0.0
Packit Service 623930
				options=$server_chronyd_options
Packit Service 623930
			else
Packit Service 623930
				step=$client_step
Packit Service 623930
				start=$client_start
Packit Service 623930
				freq=$(get_wander_expr)
Packit Service 623930
				offset=$time_offset
Packit Service 623930
				options=$client_chronyd_options
Packit Service 623930
			fi
Packit Service 623930
Packit Service 623930
			conf=$(get_chronyd_conf $stratum $i $n)
Packit Service 623930
Packit Service 623930
			[ -z "$freq" ] || echo "node${node}_freq = $freq" >> tmp/conf
Packit Service 623930
			[ -z "$step" ] || echo "node${node}_step = $step" >> tmp/conf
Packit Service 623930
			[ -z "$refclock_jitter" ] || \
Packit Service 623930
				echo "node${node}_refclock = $(get_refclock_expr)" >> tmp/conf
Packit Service 623930
			echo "node${node}_offset = $offset" >> tmp/conf
Packit Service 623930
			echo "node${node}_start = $start" >> tmp/conf
Packit Service 623930
			start_client $node chronyd "$conf" "" "$options" && \
Packit Service 623930
				test_ok || test_error
Packit Service 623930
Packit Service 623930
			[ $? -ne 0 ] && return 1
Packit Service 623930
			node=$[$node + 1]
Packit Service 623930
		done
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	for i in $(seq 1 $[$nodes - $node + 1]); do
Packit Service 623930
		test_message 2 0 "starting node $node:"
Packit Service 623930
Packit Service 623930
		echo "node${node}_start = $chronyc_start" >> tmp/conf
Packit Service 623930
		start_client $node chronyc "$chronyc_conf" "" \
Packit Service 623930
			"-n -h 192.168.123.$[$node - $clients]" && \
Packit Service 623930
			test_ok || test_error
Packit Service 623930
Packit Service 623930
		[ $? -ne 0 ] && return 1
Packit Service 623930
		node=$[$node + 1]
Packit Service 623930
	done
Packit Service 623930
Packit Service 623930
	run_simulation $nodes
Packit Service 623930
}