forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
2.3 KiB
166 lines
2.3 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0 |
|
|
|
ALL_TESTS=" |
|
settime |
|
adjtime |
|
adjfreq |
|
" |
|
DEV=$1 |
|
|
|
############################################################################## |
|
# Sanity checks |
|
|
|
if [[ "$(id -u)" -ne 0 ]]; then |
|
echo "SKIP: need root privileges" |
|
exit 0 |
|
fi |
|
|
|
if [[ "$DEV" == "" ]]; then |
|
echo "SKIP: PTP device not provided" |
|
exit 0 |
|
fi |
|
|
|
require_command() |
|
{ |
|
local cmd=$1; shift |
|
|
|
if [[ ! -x "$(command -v "$cmd")" ]]; then |
|
echo "SKIP: $cmd not installed" |
|
exit 1 |
|
fi |
|
} |
|
|
|
phc_sanity() |
|
{ |
|
phc_ctl $DEV get &> /dev/null |
|
|
|
if [ $? != 0 ]; then |
|
echo "SKIP: unknown clock $DEV: No such device" |
|
exit 1 |
|
fi |
|
} |
|
|
|
require_command phc_ctl |
|
phc_sanity |
|
|
|
############################################################################## |
|
# Helpers |
|
|
|
# Exit status to return at the end. Set in case one of the tests fails. |
|
EXIT_STATUS=0 |
|
# Per-test return value. Clear at the beginning of each test. |
|
RET=0 |
|
|
|
check_err() |
|
{ |
|
local err=$1 |
|
|
|
if [[ $RET -eq 0 && $err -ne 0 ]]; then |
|
RET=$err |
|
fi |
|
} |
|
|
|
log_test() |
|
{ |
|
local test_name=$1 |
|
|
|
if [[ $RET -ne 0 ]]; then |
|
EXIT_STATUS=1 |
|
printf "TEST: %-60s [FAIL]\n" "$test_name" |
|
return 1 |
|
fi |
|
|
|
printf "TEST: %-60s [ OK ]\n" "$test_name" |
|
return 0 |
|
} |
|
|
|
tests_run() |
|
{ |
|
local current_test |
|
|
|
for current_test in ${TESTS:-$ALL_TESTS}; do |
|
$current_test |
|
done |
|
} |
|
|
|
############################################################################## |
|
# Tests |
|
|
|
settime_do() |
|
{ |
|
local res |
|
|
|
res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \ |
|
| awk '/clock time is/{print $5}' \ |
|
| awk -F. '{print $1}') |
|
|
|
(( res == 120 )) |
|
} |
|
|
|
adjtime_do() |
|
{ |
|
local res |
|
|
|
res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \ |
|
| awk '/clock time is/{print $5}' \ |
|
| awk -F. '{print $1}') |
|
|
|
(( res == 10 )) |
|
} |
|
|
|
adjfreq_do() |
|
{ |
|
local res |
|
|
|
# Set the clock to be 1% faster |
|
res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \ |
|
| awk '/clock time is/{print $5}' \ |
|
| awk -F. '{print $1}') |
|
|
|
(( res == 101 )) |
|
} |
|
|
|
############################################################################## |
|
|
|
cleanup() |
|
{ |
|
phc_ctl $DEV freq 0.0 &> /dev/null |
|
phc_ctl $DEV set &> /dev/null |
|
} |
|
|
|
settime() |
|
{ |
|
RET=0 |
|
|
|
settime_do |
|
check_err $? |
|
log_test "settime" |
|
cleanup |
|
} |
|
|
|
adjtime() |
|
{ |
|
RET=0 |
|
|
|
adjtime_do |
|
check_err $? |
|
log_test "adjtime" |
|
cleanup |
|
} |
|
|
|
adjfreq() |
|
{ |
|
RET=0 |
|
|
|
adjfreq_do |
|
check_err $? |
|
log_test "adjfreq" |
|
cleanup |
|
} |
|
|
|
trap cleanup EXIT |
|
|
|
tests_run |
|
|
|
exit $EXIT_STATUS
|
|
|