phc.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. ALL_TESTS="
  4. settime
  5. adjtime
  6. adjfreq
  7. "
  8. DEV=$1
  9. ##############################################################################
  10. # Sanity checks
  11. if [[ "$(id -u)" -ne 0 ]]; then
  12. echo "SKIP: need root privileges"
  13. exit 0
  14. fi
  15. if [[ "$DEV" == "" ]]; then
  16. echo "SKIP: PTP device not provided"
  17. exit 0
  18. fi
  19. require_command()
  20. {
  21. local cmd=$1; shift
  22. if [[ ! -x "$(command -v "$cmd")" ]]; then
  23. echo "SKIP: $cmd not installed"
  24. exit 1
  25. fi
  26. }
  27. phc_sanity()
  28. {
  29. phc_ctl $DEV get &> /dev/null
  30. if [ $? != 0 ]; then
  31. echo "SKIP: unknown clock $DEV: No such device"
  32. exit 1
  33. fi
  34. }
  35. require_command phc_ctl
  36. phc_sanity
  37. ##############################################################################
  38. # Helpers
  39. # Exit status to return at the end. Set in case one of the tests fails.
  40. EXIT_STATUS=0
  41. # Per-test return value. Clear at the beginning of each test.
  42. RET=0
  43. check_err()
  44. {
  45. local err=$1
  46. if [[ $RET -eq 0 && $err -ne 0 ]]; then
  47. RET=$err
  48. fi
  49. }
  50. log_test()
  51. {
  52. local test_name=$1
  53. if [[ $RET -ne 0 ]]; then
  54. EXIT_STATUS=1
  55. printf "TEST: %-60s [FAIL]\n" "$test_name"
  56. return 1
  57. fi
  58. printf "TEST: %-60s [ OK ]\n" "$test_name"
  59. return 0
  60. }
  61. tests_run()
  62. {
  63. local current_test
  64. for current_test in ${TESTS:-$ALL_TESTS}; do
  65. $current_test
  66. done
  67. }
  68. ##############################################################################
  69. # Tests
  70. settime_do()
  71. {
  72. local res
  73. res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \
  74. | awk '/clock time is/{print $5}' \
  75. | awk -F. '{print $1}')
  76. (( res == 120 ))
  77. }
  78. adjtime_do()
  79. {
  80. local res
  81. res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \
  82. | awk '/clock time is/{print $5}' \
  83. | awk -F. '{print $1}')
  84. (( res == 10 ))
  85. }
  86. adjfreq_do()
  87. {
  88. local res
  89. # Set the clock to be 1% faster
  90. res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \
  91. | awk '/clock time is/{print $5}' \
  92. | awk -F. '{print $1}')
  93. (( res == 101 ))
  94. }
  95. ##############################################################################
  96. cleanup()
  97. {
  98. phc_ctl $DEV freq 0.0 &> /dev/null
  99. phc_ctl $DEV set &> /dev/null
  100. }
  101. settime()
  102. {
  103. RET=0
  104. settime_do
  105. check_err $?
  106. log_test "settime"
  107. cleanup
  108. }
  109. adjtime()
  110. {
  111. RET=0
  112. adjtime_do
  113. check_err $?
  114. log_test "adjtime"
  115. cleanup
  116. }
  117. adjfreq()
  118. {
  119. RET=0
  120. adjfreq_do
  121. check_err $?
  122. log_test "adjfreq"
  123. cleanup
  124. }
  125. trap cleanup EXIT
  126. tests_run
  127. exit $EXIT_STATUS