Skip to content

Commit 2476710

Browse files
committed
CI: Add RTC test coverage
This change adds CI tests to verify RTC functionality, covering the following cases: 1. Verify that /dev/rtc0 is present and logged in dmesg. 2. Ensure /dev/rtc0 is interactable: - Use rtc_settime to set the year to both before(1980) and after(2030) the current year, then verify that the RTC retains the changes. - Use rtc_alarm to confirm that the alarm_IRQ status transitions correctly: no -> yes -> no. 3. Validate alignment of the UTC year between host and guest using the date command.
1 parent 4e7ed84 commit 2476710

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

.ci/boot-linux.sh

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ function ASSERT
2222

2323
cleanup
2424

25+
# To test RTC clock
26+
HOST_UTC_YEAR=$(LC_ALL=C date -u +%Y)
27+
2528
ENABLE_VBLK=1
2629
VBLK_IMG=build/disk.img
2730
[ -f "${VBLK_IMG}" ] || ENABLE_VBLK=0
@@ -33,10 +36,93 @@ OPTS_BASE+=" -i build/linux-image/rootfs.cpio"
3336
TEST_OPTIONS=("base (${OPTS_BASE})")
3437
EXPECT_CMDS=('
3538
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
39+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
40+
expect "rtc0" { } timeout { exit 3 }
41+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
42+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
3643
expect "# " { send "uname -a\n" } timeout { exit 2 }
3744
expect "riscv32 GNU/Linux" { send "\x01"; send "x" } timeout { exit 3 }
3845
')
3946

47+
# RTC alarm and settime tests
48+
TEST_OPTIONS+=("rtc_alarm ${OPTS_BASE}")
49+
EXPECT_CMDS+=('
50+
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
51+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
52+
expect "rtc0" { } timeout { exit 3 }
53+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
54+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
55+
expect "# " { send "uname -a\n" } timeout { exit 2 }
56+
expect "riscv32 GNU/Linux" { } timeout { exit 3 }
57+
expect "# " { send "rtc_alarm\n" } timeout { exit 3 }
58+
expect "alarm_IRQ : no" { } timeout { exit 3 }
59+
expect "alarm_IRQ : yes" { } timeout { exit 3 }
60+
expect "alarm_IRQ : no" { } timeout { exit 3 }
61+
expect "# " { send "\x01"; send "x" } timeout { exit 3 }
62+
')
63+
year1=1980
64+
year2=2030
65+
TEST_OPTIONS+=("rtc_settime ${year1} ${OPTS_BASE}")
66+
EXPECT_CMDS+=('
67+
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
68+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
69+
expect "rtc0" { } timeout { exit 3 }
70+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
71+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
72+
expect "# " { send "uname -a\n" } timeout { exit 2 }
73+
expect "riscv32 GNU/Linux" { } timeout { exit 3 }
74+
expect "# " { send "rtc_settime ${year1}\n" } timeout { exit 3 }
75+
expect "rtc_date : ${year1}-01-01" { } timeout { exit 3 }
76+
expect "# " { send "\x01"; send "x" } timeout { exit 3 }
77+
')
78+
TEST_OPTIONS+=("rtc_settime ${year2} ${OPTS_BASE}")
79+
EXPECT_CMDS+=('
80+
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
81+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
82+
expect "rtc0" { } timeout { exit 3 }
83+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
84+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
85+
expect "# " { send "uname -a\n" } timeout { exit 2 }
86+
expect "riscv32 GNU/Linux" { } timeout { exit 3 }
87+
expect "# " { send "rtc_settime ${year2}\n" } timeout { exit 3 }
88+
expect "rtc_date : ${year2}-01-01" { } timeout { exit 3 }
89+
expect "# " { send "\x01"; send "x" } timeout { exit 3 }
90+
')
91+
TEST_OPTIONS+=("rtc_settime + rtc_alarm ${year1} ${OPTS_BASE}")
92+
EXPECT_CMDS+=('
93+
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
94+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
95+
expect "rtc0" { } timeout { exit 3 }
96+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
97+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
98+
expect "# " { send "uname -a\n" } timeout { exit 2 }
99+
expect "riscv32 GNU/Linux" { } timeout { exit 3 }
100+
expect "# " { send "rtc_settime ${year1}\n" } timeout { exit 3 }
101+
expect "rtc_date : ${year1}-01-01" { } timeout { exit 3 }
102+
expect "# " { send "rtc_alarm\n" } timeout { exit 3 }
103+
expect "alarm_IRQ : no" { } timeout { exit 3 }
104+
expect "alarm_IRQ : yes" { } timeout { exit 3 }
105+
expect "alarm_IRQ : no" { } timeout { exit 3 }
106+
expect "# " { send "\x01"; send "x" } timeout { exit 3 }
107+
')
108+
TEST_OPTIONS+=("rtc_settime + rtc_alarm ${year2} ${OPTS_BASE}")
109+
EXPECT_CMDS+=('
110+
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
111+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
112+
expect "rtc0" { } timeout { exit 3 }
113+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
114+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
115+
expect "# " { send "uname -a\n" } timeout { exit 2 }
116+
expect "riscv32 GNU/Linux" { } timeout { exit 3 }
117+
expect "# " { send "rtc_settime ${year2}\n" } timeout { exit 3 }
118+
expect "rtc_date : ${year2}-01-01" { } timeout { exit 3 }
119+
expect "# " { send "rtc_alarm\n" } timeout { exit 3 }
120+
expect "alarm_IRQ : no" { } timeout { exit 3 }
121+
expect "alarm_IRQ : yes" { } timeout { exit 3 }
122+
expect "alarm_IRQ : no" { } timeout { exit 3 }
123+
expect "# " { send "\x01"; send "x" } timeout { exit 3 }
124+
')
125+
40126
COLOR_G='\e[32;01m' # Green
41127
COLOR_R='\e[31;01m' # Red
42128
COLOR_Y='\e[33;01m' # Yellow
@@ -54,6 +140,10 @@ if [ "${ENABLE_VBLK}" -eq "1" ]; then
54140
TEST_OPTIONS+=("${OPTS_BASE} -x vblk:${VBLK_IMG},readonly")
55141
EXPECT_CMDS+=('
56142
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
143+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
144+
expect "rtc0" { } timeout { exit 3 }
145+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
146+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
57147
expect "# " { send "uname -a\n" } timeout { exit 2 }
58148
expect "riscv32 GNU/Linux" { send "mkdir mnt && mount /dev/vda mnt\n" } timeout { exit 3 }
59149
expect "# " { send "echo rv32emu > mnt/emu.txt\n" } timeout { exit 3 }
@@ -65,6 +155,10 @@ if [ "${ENABLE_VBLK}" -eq "1" ]; then
65155
TEST_OPTIONS+=("${OPTS_BASE} -x vblk:${VBLK_IMG},readonly -x vblk:${BLK_DEV},readonly")
66156
EXPECT_CMDS+=('
67157
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
158+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
159+
expect "rtc0" { } timeout { exit 3 }
160+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
161+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
68162
expect "# " { send "uname -a\n" } timeout { exit 2 }
69163
expect "riscv32 GNU/Linux" { send "mkdir mnt && mount /dev/vda mnt\n" } timeout { exit 3 }
70164
expect "# " { send "echo rv32emu > mnt/emu.txt\n" } timeout { exit 3 }
@@ -79,6 +173,10 @@ if [ "${ENABLE_VBLK}" -eq "1" ]; then
79173
TEST_OPTIONS+=("${OPTS_BASE} -x vblk:${VBLK_IMG}")
80174
VBLK_EXPECT_CMDS='
81175
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
176+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
177+
expect "rtc0" { } timeout { exit 3 }
178+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
179+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
82180
expect "# " { send "uname -a\n" } timeout { exit 2 }
83181
expect "riscv32 GNU/Linux" { send "mkdir mnt && mount /dev/vda mnt\n" } timeout { exit 3 }
84182
expect "# " { send "echo rv32emu > mnt/emu.txt\n" } timeout { exit 3 }
@@ -96,6 +194,10 @@ if [ "${ENABLE_VBLK}" -eq "1" ]; then
96194
TEST_OPTIONS+=("${OPTS_BASE} -x vblk:${VBLK_IMG} -x vblk:${BLK_DEV}")
97195
VBLK_EXPECT_CMDS='
98196
expect "buildroot login:" { send "root\n" } timeout { exit 1 }
197+
expect "# " { send "dmesg | grep rtc\n" } timeout { exit 2 }
198+
expect "rtc0" { } timeout { exit 3 }
199+
expect "# " { send "date -u +%Y\n" } timeout { exit 2 }
200+
expect "${HOST_UTC_YEAR}" { } timeout { exit 3 }
99201
expect "# " { send "uname -a\n" } timeout { exit 2 }
100202
expect "riscv32 GNU/Linux" { send "mkdir mnt && mount /dev/vda mnt\n" } timeout { exit 3 }
101203
expect "# " { send "echo rv32emu > mnt/emu.txt\n" } timeout { exit 3 }
@@ -121,6 +223,9 @@ for i in "${!TEST_OPTIONS[@]}"; do
121223
RUN_LINUX="build/rv32emu ${OPTS}"
122224

123225
ASSERT expect <<- DONE
226+
set HOST_UTC_YEAR ${HOST_UTC_YEAR}
227+
set year1 ${year1}
228+
set year2 ${year2}
124229
set timeout ${TIMEOUT}
125230
spawn ${RUN_LINUX}
126231
${EXPECT_CMDS[$i]}

0 commit comments

Comments
 (0)