18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ciALL_TESTS=" 58c2ecf20Sopenharmony_ci settime 68c2ecf20Sopenharmony_ci adjtime 78c2ecf20Sopenharmony_ci adjfreq 88c2ecf20Sopenharmony_ci" 98c2ecf20Sopenharmony_ciDEV=$1 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci############################################################################## 128c2ecf20Sopenharmony_ci# Sanity checks 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ciif [[ "$(id -u)" -ne 0 ]]; then 158c2ecf20Sopenharmony_ci echo "SKIP: need root privileges" 168c2ecf20Sopenharmony_ci exit 0 178c2ecf20Sopenharmony_cifi 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ciif [[ "$DEV" == "" ]]; then 208c2ecf20Sopenharmony_ci echo "SKIP: PTP device not provided" 218c2ecf20Sopenharmony_ci exit 0 228c2ecf20Sopenharmony_cifi 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cirequire_command() 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci local cmd=$1; shift 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci if [[ ! -x "$(command -v "$cmd")" ]]; then 298c2ecf20Sopenharmony_ci echo "SKIP: $cmd not installed" 308c2ecf20Sopenharmony_ci exit 1 318c2ecf20Sopenharmony_ci fi 328c2ecf20Sopenharmony_ci} 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ciphc_sanity() 358c2ecf20Sopenharmony_ci{ 368c2ecf20Sopenharmony_ci phc_ctl $DEV get &> /dev/null 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci if [ $? != 0 ]; then 398c2ecf20Sopenharmony_ci echo "SKIP: unknown clock $DEV: No such device" 408c2ecf20Sopenharmony_ci exit 1 418c2ecf20Sopenharmony_ci fi 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cirequire_command phc_ctl 458c2ecf20Sopenharmony_ciphc_sanity 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci############################################################################## 488c2ecf20Sopenharmony_ci# Helpers 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci# Exit status to return at the end. Set in case one of the tests fails. 518c2ecf20Sopenharmony_ciEXIT_STATUS=0 528c2ecf20Sopenharmony_ci# Per-test return value. Clear at the beginning of each test. 538c2ecf20Sopenharmony_ciRET=0 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cicheck_err() 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci local err=$1 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci if [[ $RET -eq 0 && $err -ne 0 ]]; then 608c2ecf20Sopenharmony_ci RET=$err 618c2ecf20Sopenharmony_ci fi 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cilog_test() 658c2ecf20Sopenharmony_ci{ 668c2ecf20Sopenharmony_ci local test_name=$1 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci if [[ $RET -ne 0 ]]; then 698c2ecf20Sopenharmony_ci EXIT_STATUS=1 708c2ecf20Sopenharmony_ci printf "TEST: %-60s [FAIL]\n" "$test_name" 718c2ecf20Sopenharmony_ci return 1 728c2ecf20Sopenharmony_ci fi 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci printf "TEST: %-60s [ OK ]\n" "$test_name" 758c2ecf20Sopenharmony_ci return 0 768c2ecf20Sopenharmony_ci} 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_citests_run() 798c2ecf20Sopenharmony_ci{ 808c2ecf20Sopenharmony_ci local current_test 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci for current_test in ${TESTS:-$ALL_TESTS}; do 838c2ecf20Sopenharmony_ci $current_test 848c2ecf20Sopenharmony_ci done 858c2ecf20Sopenharmony_ci} 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci############################################################################## 888c2ecf20Sopenharmony_ci# Tests 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_cisettime_do() 918c2ecf20Sopenharmony_ci{ 928c2ecf20Sopenharmony_ci local res 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \ 958c2ecf20Sopenharmony_ci | awk '/clock time is/{print $5}' \ 968c2ecf20Sopenharmony_ci | awk -F. '{print $1}') 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci (( res == 120 )) 998c2ecf20Sopenharmony_ci} 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ciadjtime_do() 1028c2ecf20Sopenharmony_ci{ 1038c2ecf20Sopenharmony_ci local res 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \ 1068c2ecf20Sopenharmony_ci | awk '/clock time is/{print $5}' \ 1078c2ecf20Sopenharmony_ci | awk -F. '{print $1}') 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci (( res == 10 )) 1108c2ecf20Sopenharmony_ci} 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ciadjfreq_do() 1138c2ecf20Sopenharmony_ci{ 1148c2ecf20Sopenharmony_ci local res 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci # Set the clock to be 1% faster 1178c2ecf20Sopenharmony_ci res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \ 1188c2ecf20Sopenharmony_ci | awk '/clock time is/{print $5}' \ 1198c2ecf20Sopenharmony_ci | awk -F. '{print $1}') 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci (( res == 101 )) 1228c2ecf20Sopenharmony_ci} 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci############################################################################## 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_cicleanup() 1278c2ecf20Sopenharmony_ci{ 1288c2ecf20Sopenharmony_ci phc_ctl $DEV freq 0.0 &> /dev/null 1298c2ecf20Sopenharmony_ci phc_ctl $DEV set &> /dev/null 1308c2ecf20Sopenharmony_ci} 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_cisettime() 1338c2ecf20Sopenharmony_ci{ 1348c2ecf20Sopenharmony_ci RET=0 1358c2ecf20Sopenharmony_ci 1368c2ecf20Sopenharmony_ci settime_do 1378c2ecf20Sopenharmony_ci check_err $? 1388c2ecf20Sopenharmony_ci log_test "settime" 1398c2ecf20Sopenharmony_ci cleanup 1408c2ecf20Sopenharmony_ci} 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ciadjtime() 1438c2ecf20Sopenharmony_ci{ 1448c2ecf20Sopenharmony_ci RET=0 1458c2ecf20Sopenharmony_ci 1468c2ecf20Sopenharmony_ci adjtime_do 1478c2ecf20Sopenharmony_ci check_err $? 1488c2ecf20Sopenharmony_ci log_test "adjtime" 1498c2ecf20Sopenharmony_ci cleanup 1508c2ecf20Sopenharmony_ci} 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ciadjfreq() 1538c2ecf20Sopenharmony_ci{ 1548c2ecf20Sopenharmony_ci RET=0 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci adjfreq_do 1578c2ecf20Sopenharmony_ci check_err $? 1588c2ecf20Sopenharmony_ci log_test "adjfreq" 1598c2ecf20Sopenharmony_ci cleanup 1608c2ecf20Sopenharmony_ci} 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_citrap cleanup EXIT 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_citests_run 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ciexit $EXIT_STATUS 167