1*9366211fSShalom Toledo#!/bin/bash 2*9366211fSShalom Toledo# SPDX-License-Identifier: GPL-2.0 3*9366211fSShalom Toledo 4*9366211fSShalom ToledoALL_TESTS=" 5*9366211fSShalom Toledo settime 6*9366211fSShalom Toledo adjtime 7*9366211fSShalom Toledo adjfreq 8*9366211fSShalom Toledo" 9*9366211fSShalom ToledoDEV=$1 10*9366211fSShalom Toledo 11*9366211fSShalom Toledo############################################################################## 12*9366211fSShalom Toledo# Sanity checks 13*9366211fSShalom Toledo 14*9366211fSShalom Toledoif [[ "$(id -u)" -ne 0 ]]; then 15*9366211fSShalom Toledo echo "SKIP: need root privileges" 16*9366211fSShalom Toledo exit 0 17*9366211fSShalom Toledofi 18*9366211fSShalom Toledo 19*9366211fSShalom Toledoif [[ "$DEV" == "" ]]; then 20*9366211fSShalom Toledo echo "SKIP: PTP device not provided" 21*9366211fSShalom Toledo exit 0 22*9366211fSShalom Toledofi 23*9366211fSShalom Toledo 24*9366211fSShalom Toledorequire_command() 25*9366211fSShalom Toledo{ 26*9366211fSShalom Toledo local cmd=$1; shift 27*9366211fSShalom Toledo 28*9366211fSShalom Toledo if [[ ! -x "$(command -v "$cmd")" ]]; then 29*9366211fSShalom Toledo echo "SKIP: $cmd not installed" 30*9366211fSShalom Toledo exit 1 31*9366211fSShalom Toledo fi 32*9366211fSShalom Toledo} 33*9366211fSShalom Toledo 34*9366211fSShalom Toledophc_sanity() 35*9366211fSShalom Toledo{ 36*9366211fSShalom Toledo phc_ctl $DEV get &> /dev/null 37*9366211fSShalom Toledo 38*9366211fSShalom Toledo if [ $? != 0 ]; then 39*9366211fSShalom Toledo echo "SKIP: unknown clock $DEV: No such device" 40*9366211fSShalom Toledo exit 1 41*9366211fSShalom Toledo fi 42*9366211fSShalom Toledo} 43*9366211fSShalom Toledo 44*9366211fSShalom Toledorequire_command phc_ctl 45*9366211fSShalom Toledophc_sanity 46*9366211fSShalom Toledo 47*9366211fSShalom Toledo############################################################################## 48*9366211fSShalom Toledo# Helpers 49*9366211fSShalom Toledo 50*9366211fSShalom Toledo# Exit status to return at the end. Set in case one of the tests fails. 51*9366211fSShalom ToledoEXIT_STATUS=0 52*9366211fSShalom Toledo# Per-test return value. Clear at the beginning of each test. 53*9366211fSShalom ToledoRET=0 54*9366211fSShalom Toledo 55*9366211fSShalom Toledocheck_err() 56*9366211fSShalom Toledo{ 57*9366211fSShalom Toledo local err=$1 58*9366211fSShalom Toledo 59*9366211fSShalom Toledo if [[ $RET -eq 0 && $err -ne 0 ]]; then 60*9366211fSShalom Toledo RET=$err 61*9366211fSShalom Toledo fi 62*9366211fSShalom Toledo} 63*9366211fSShalom Toledo 64*9366211fSShalom Toledolog_test() 65*9366211fSShalom Toledo{ 66*9366211fSShalom Toledo local test_name=$1 67*9366211fSShalom Toledo 68*9366211fSShalom Toledo if [[ $RET -ne 0 ]]; then 69*9366211fSShalom Toledo EXIT_STATUS=1 70*9366211fSShalom Toledo printf "TEST: %-60s [FAIL]\n" "$test_name" 71*9366211fSShalom Toledo return 1 72*9366211fSShalom Toledo fi 73*9366211fSShalom Toledo 74*9366211fSShalom Toledo printf "TEST: %-60s [ OK ]\n" "$test_name" 75*9366211fSShalom Toledo return 0 76*9366211fSShalom Toledo} 77*9366211fSShalom Toledo 78*9366211fSShalom Toledotests_run() 79*9366211fSShalom Toledo{ 80*9366211fSShalom Toledo local current_test 81*9366211fSShalom Toledo 82*9366211fSShalom Toledo for current_test in ${TESTS:-$ALL_TESTS}; do 83*9366211fSShalom Toledo $current_test 84*9366211fSShalom Toledo done 85*9366211fSShalom Toledo} 86*9366211fSShalom Toledo 87*9366211fSShalom Toledo############################################################################## 88*9366211fSShalom Toledo# Tests 89*9366211fSShalom Toledo 90*9366211fSShalom Toledosettime_do() 91*9366211fSShalom Toledo{ 92*9366211fSShalom Toledo local res 93*9366211fSShalom Toledo 94*9366211fSShalom Toledo res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \ 95*9366211fSShalom Toledo | awk '/clock time is/{print $5}' \ 96*9366211fSShalom Toledo | awk -F. '{print $1}') 97*9366211fSShalom Toledo 98*9366211fSShalom Toledo (( res == 120 )) 99*9366211fSShalom Toledo} 100*9366211fSShalom Toledo 101*9366211fSShalom Toledoadjtime_do() 102*9366211fSShalom Toledo{ 103*9366211fSShalom Toledo local res 104*9366211fSShalom Toledo 105*9366211fSShalom Toledo res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \ 106*9366211fSShalom Toledo | awk '/clock time is/{print $5}' \ 107*9366211fSShalom Toledo | awk -F. '{print $1}') 108*9366211fSShalom Toledo 109*9366211fSShalom Toledo (( res == 10 )) 110*9366211fSShalom Toledo} 111*9366211fSShalom Toledo 112*9366211fSShalom Toledoadjfreq_do() 113*9366211fSShalom Toledo{ 114*9366211fSShalom Toledo local res 115*9366211fSShalom Toledo 116*9366211fSShalom Toledo # Set the clock to be 1% faster 117*9366211fSShalom Toledo res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \ 118*9366211fSShalom Toledo | awk '/clock time is/{print $5}' \ 119*9366211fSShalom Toledo | awk -F. '{print $1}') 120*9366211fSShalom Toledo 121*9366211fSShalom Toledo (( res == 101 )) 122*9366211fSShalom Toledo} 123*9366211fSShalom Toledo 124*9366211fSShalom Toledo############################################################################## 125*9366211fSShalom Toledo 126*9366211fSShalom Toledocleanup() 127*9366211fSShalom Toledo{ 128*9366211fSShalom Toledo phc_ctl $DEV freq 0.0 &> /dev/null 129*9366211fSShalom Toledo phc_ctl $DEV set &> /dev/null 130*9366211fSShalom Toledo} 131*9366211fSShalom Toledo 132*9366211fSShalom Toledosettime() 133*9366211fSShalom Toledo{ 134*9366211fSShalom Toledo RET=0 135*9366211fSShalom Toledo 136*9366211fSShalom Toledo settime_do 137*9366211fSShalom Toledo check_err $? 138*9366211fSShalom Toledo log_test "settime" 139*9366211fSShalom Toledo cleanup 140*9366211fSShalom Toledo} 141*9366211fSShalom Toledo 142*9366211fSShalom Toledoadjtime() 143*9366211fSShalom Toledo{ 144*9366211fSShalom Toledo RET=0 145*9366211fSShalom Toledo 146*9366211fSShalom Toledo adjtime_do 147*9366211fSShalom Toledo check_err $? 148*9366211fSShalom Toledo log_test "adjtime" 149*9366211fSShalom Toledo cleanup 150*9366211fSShalom Toledo} 151*9366211fSShalom Toledo 152*9366211fSShalom Toledoadjfreq() 153*9366211fSShalom Toledo{ 154*9366211fSShalom Toledo RET=0 155*9366211fSShalom Toledo 156*9366211fSShalom Toledo adjfreq_do 157*9366211fSShalom Toledo check_err $? 158*9366211fSShalom Toledo log_test "adjfreq" 159*9366211fSShalom Toledo cleanup 160*9366211fSShalom Toledo} 161*9366211fSShalom Toledo 162*9366211fSShalom Toledotrap cleanup EXIT 163*9366211fSShalom Toledo 164*9366211fSShalom Toledotests_run 165*9366211fSShalom Toledo 166*9366211fSShalom Toledoexit $EXIT_STATUS 167