162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ciALL_TESTS=" 562306a36Sopenharmony_ci settime 662306a36Sopenharmony_ci adjtime 762306a36Sopenharmony_ci adjfreq 862306a36Sopenharmony_ci" 962306a36Sopenharmony_ciDEV=$1 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci############################################################################## 1262306a36Sopenharmony_ci# Sanity checks 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciif [[ "$(id -u)" -ne 0 ]]; then 1562306a36Sopenharmony_ci echo "SKIP: need root privileges" 1662306a36Sopenharmony_ci exit 0 1762306a36Sopenharmony_cifi 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciif [[ "$DEV" == "" ]]; then 2062306a36Sopenharmony_ci echo "SKIP: PTP device not provided" 2162306a36Sopenharmony_ci exit 0 2262306a36Sopenharmony_cifi 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cirequire_command() 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci local cmd=$1; shift 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci if [[ ! -x "$(command -v "$cmd")" ]]; then 2962306a36Sopenharmony_ci echo "SKIP: $cmd not installed" 3062306a36Sopenharmony_ci exit 1 3162306a36Sopenharmony_ci fi 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciphc_sanity() 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci phc_ctl $DEV get &> /dev/null 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci if [ $? != 0 ]; then 3962306a36Sopenharmony_ci echo "SKIP: unknown clock $DEV: No such device" 4062306a36Sopenharmony_ci exit 1 4162306a36Sopenharmony_ci fi 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cirequire_command phc_ctl 4562306a36Sopenharmony_ciphc_sanity 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci############################################################################## 4862306a36Sopenharmony_ci# Helpers 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci# Exit status to return at the end. Set in case one of the tests fails. 5162306a36Sopenharmony_ciEXIT_STATUS=0 5262306a36Sopenharmony_ci# Per-test return value. Clear at the beginning of each test. 5362306a36Sopenharmony_ciRET=0 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cicheck_err() 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci local err=$1 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci if [[ $RET -eq 0 && $err -ne 0 ]]; then 6062306a36Sopenharmony_ci RET=$err 6162306a36Sopenharmony_ci fi 6262306a36Sopenharmony_ci} 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cilog_test() 6562306a36Sopenharmony_ci{ 6662306a36Sopenharmony_ci local test_name=$1 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci if [[ $RET -ne 0 ]]; then 6962306a36Sopenharmony_ci EXIT_STATUS=1 7062306a36Sopenharmony_ci printf "TEST: %-60s [FAIL]\n" "$test_name" 7162306a36Sopenharmony_ci return 1 7262306a36Sopenharmony_ci fi 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci printf "TEST: %-60s [ OK ]\n" "$test_name" 7562306a36Sopenharmony_ci return 0 7662306a36Sopenharmony_ci} 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_citests_run() 7962306a36Sopenharmony_ci{ 8062306a36Sopenharmony_ci local current_test 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci for current_test in ${TESTS:-$ALL_TESTS}; do 8362306a36Sopenharmony_ci $current_test 8462306a36Sopenharmony_ci done 8562306a36Sopenharmony_ci} 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci############################################################################## 8862306a36Sopenharmony_ci# Tests 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cisettime_do() 9162306a36Sopenharmony_ci{ 9262306a36Sopenharmony_ci local res 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \ 9562306a36Sopenharmony_ci | awk '/clock time is/{print $5}' \ 9662306a36Sopenharmony_ci | awk -F. '{print $1}') 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci (( res == 120 )) 9962306a36Sopenharmony_ci} 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ciadjtime_do() 10262306a36Sopenharmony_ci{ 10362306a36Sopenharmony_ci local res 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \ 10662306a36Sopenharmony_ci | awk '/clock time is/{print $5}' \ 10762306a36Sopenharmony_ci | awk -F. '{print $1}') 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci (( res == 10 )) 11062306a36Sopenharmony_ci} 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ciadjfreq_do() 11362306a36Sopenharmony_ci{ 11462306a36Sopenharmony_ci local res 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci # Set the clock to be 1% faster 11762306a36Sopenharmony_ci res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \ 11862306a36Sopenharmony_ci | awk '/clock time is/{print $5}' \ 11962306a36Sopenharmony_ci | awk -F. '{print $1}') 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci (( res == 101 )) 12262306a36Sopenharmony_ci} 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci############################################################################## 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cicleanup() 12762306a36Sopenharmony_ci{ 12862306a36Sopenharmony_ci phc_ctl $DEV freq 0.0 &> /dev/null 12962306a36Sopenharmony_ci phc_ctl $DEV set &> /dev/null 13062306a36Sopenharmony_ci} 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_cisettime() 13362306a36Sopenharmony_ci{ 13462306a36Sopenharmony_ci RET=0 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci settime_do 13762306a36Sopenharmony_ci check_err $? 13862306a36Sopenharmony_ci log_test "settime" 13962306a36Sopenharmony_ci cleanup 14062306a36Sopenharmony_ci} 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciadjtime() 14362306a36Sopenharmony_ci{ 14462306a36Sopenharmony_ci RET=0 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci adjtime_do 14762306a36Sopenharmony_ci check_err $? 14862306a36Sopenharmony_ci log_test "adjtime" 14962306a36Sopenharmony_ci cleanup 15062306a36Sopenharmony_ci} 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ciadjfreq() 15362306a36Sopenharmony_ci{ 15462306a36Sopenharmony_ci RET=0 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci adjfreq_do 15762306a36Sopenharmony_ci check_err $? 15862306a36Sopenharmony_ci log_test "adjfreq" 15962306a36Sopenharmony_ci cleanup 16062306a36Sopenharmony_ci} 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_citrap cleanup EXIT 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_citests_run 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ciexit $EXIT_STATUS 167