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