Skip to content

Commit f615e2b

Browse files
toyookaShuah Khan
authored andcommitted
selftests/pstore: add pstore test scripts going with reboot
To test pstore in earnest, we have to cause kernel crash and check pstore filesystem after reboot. We add two scripts: - pstore_crash_test This script causes kernel crash and reboot. It is executed by 'make run_pstore_crash' in selftests. It can also be used with kdump. - pstore_post_reboot_tests This script includes test cases which check pstore's behavior after crash and reboot. It is executed together with pstore_tests by 'make run_tests [-C pstore]' in selftests. The test cases in pstore_post_reboot_tests are currently following. - Check pstore backend is registered - Mount pstore filesystem - Check dmesg/console/pmsg files exist in pstore filesystem - Check dmesg/console files contain oops end marker - Check pmsg file properly keeps the content written before crash - Remove all files in pstore filesystem Example usage is following. (before reboot) # cd /path/to/selftests # make run_tests -C pstore === Pstore unit tests (pstore_tests) === UUID=b49b02cf-b0c2-4309-be43-b08c3971e37f ... selftests: pstore_tests [PASS] === Pstore unit tests (pstore_post_reboot_tests) === UUID=953eb1bc-8e03-48d7-b27a-6552b24c5b7e Checking pstore backend is registered ... ok backend=ramoops cmdline=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait mem=768M ramoops.mem_address=0x30000000 ramoops.mem_size=0x10000 pstore_crash_test has not been executed yet. we skip further tests. selftests: pstore_post_reboot_tests [PASS] # make run_pstore_crash === Pstore unit tests (pstore_crash_test) === UUID=93c8972d-1466-430b-8c4a-28d8681e74c6 Checking pstore backend is registered ... ok backend=ramoops cmdline=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait mem=768M ramoops.mem_address=0x30000000 ramoops.mem_size=0x10000 Causing kernel crash ... (kernel crash and reboot) ... (after reboot) # make run_tests -C pstore === Pstore unit tests (pstore_tests) === UUID=8e511e77-2285-499f-8bc0-900d9af1fbcc ... selftests: pstore_tests [PASS] === Pstore unit tests (pstore_post_reboot_tests) === UUID=2dcc2132-4f3c-45aa-a38f-3b54bff8cef1 Checking pstore backend is registered ... ok backend=ramoops cmdline=console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait mem=768M ramoops.mem_address=0x30000000 ramoops.mem_size=0x10000 Mounting pstore filesystem ... ok Checking dmesg files exist in pstore filesystem ... ok dmesg-ramoops-0 dmesg-ramoops-1 Checking console files exist in pstore filesystem ... ok console-ramoops-0 Checking pmsg files exist in pstore filesystem ... ok pmsg-ramoops-0 Checking dmesg files contain oops end marker dmesg-ramoops-0 ... ok dmesg-ramoops-1 ... ok Checking console file contains oops end marker ... ok Checking pmsg file properly keeps the content written before crash ... ok Removing all files in pstore filesystem console-ramoops-0 ... ok dmesg-ramoops-0 ... ok dmesg-ramoops-1 ... ok pmsg-ramoops-0 ... ok selftests: pstore_post_reboot_tests [PASS] Signed-off-by: Hiraku Toyooka <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Tony Luck <[email protected]> Cc: Anton Vorontsov <[email protected]> Cc: Colin Cross <[email protected]> Cc: Kees Cook <[email protected]> Cc: Mark Salyzyn <[email protected]> Cc: Seiji Aguchi <[email protected]> Cc: [email protected] Cc: [email protected] Signed-off-by: Shuah Khan <[email protected]>
1 parent cc04a46 commit f615e2b

File tree

5 files changed

+143
-2
lines changed

5 files changed

+143
-2
lines changed

tools/testing/selftests/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ clean_hotplug:
6666
make -C $$TARGET clean; \
6767
done;
6868

69+
run_pstore_crash:
70+
make -C pstore run_crash
71+
6972
INSTALL_PATH ?= install
7073
INSTALL_PATH := $(abspath $(INSTALL_PATH))
7174
ALL_SCRIPT := $(INSTALL_PATH)/run_kselftest.sh

tools/testing/selftests/pstore/Makefile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
all:
55

6-
TEST_PROGS := pstore_tests
7-
TEST_FILES := common_tests
6+
TEST_PROGS := pstore_tests pstore_post_reboot_tests
7+
TEST_FILES := common_tests pstore_crash_test
88

99
include ../lib.mk
1010

11+
run_crash:
12+
@sh pstore_crash_test || { echo "pstore_crash_test: [FAIL]"; exit 1; }
13+
1114
clean:
1215
rm -rf logs/* *uuid

tools/testing/selftests/pstore/common_tests

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,39 @@ show_result() { # result_value
2626
fi
2727
}
2828

29+
check_files_exist() { # type of pstorefs file
30+
if [ -e ${1}-${backend}-0 ]; then
31+
prlog "ok"
32+
for f in `ls ${1}-${backend}-*`; do
33+
prlog -e "\t${f}"
34+
done
35+
else
36+
prlog "FAIL"
37+
rc=1
38+
fi
39+
}
40+
41+
operate_files() { # tested value, files, operation
42+
if [ $1 -eq 0 ]; then
43+
prlog
44+
for f in $2; do
45+
prlog -ne "\t${f} ... "
46+
# execute operation
47+
$3 $f
48+
show_result $?
49+
done
50+
else
51+
prlog " ... FAIL"
52+
rc=1
53+
fi
54+
}
55+
2956
# Parameters
3057
TEST_STRING_PATTERN="Testing pstore: uuid="
3158
UUID=`cat /proc/sys/kernel/random/uuid`
3259
TOP_DIR=`absdir $0`
3360
LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`_${UUID}/
61+
REBOOT_FLAG=$TOP_DIR/reboot_flag
3462

3563
# Preparing logs
3664
LOG_FILE=$LOG_DIR/`basename $0`.log
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/sh
2+
3+
# pstore_crash_test - Pstore test shell script which causes crash and reboot
4+
#
5+
# Copyright (C) Hitachi Ltd., 2015
6+
# Written by Hiraku Toyooka <[email protected]>
7+
#
8+
# Released under the terms of the GPL v2.
9+
10+
# exit if pstore backend is not registered
11+
. ./common_tests
12+
13+
prlog "Causing kernel crash ..."
14+
15+
# enable all functions triggered by sysrq
16+
echo 1 > /proc/sys/kernel/sysrq
17+
# setting to reboot in 3 seconds after panic
18+
echo 3 > /proc/sys/kernel/panic
19+
20+
# save uuid file by different name because next test execution will replace it.
21+
mv $TOP_DIR/uuid $TOP_DIR/prev_uuid
22+
23+
# create a file as reboot flag
24+
touch $REBOOT_FLAG
25+
sync
26+
27+
# cause crash
28+
# Note: If you use kdump and want to see kmesg-* files after reboot, you should
29+
# specify 'crash_kexec_post_notifiers' in 1st kernel's cmdline.
30+
echo c > /proc/sysrq-trigger
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/bin/sh
2+
3+
# pstore_post_reboot_tests - Check pstore's behavior after crash/reboot
4+
#
5+
# Copyright (C) Hitachi Ltd., 2015
6+
# Written by Hiraku Toyooka <[email protected]>
7+
#
8+
# Released under the terms of the GPL v2.
9+
10+
. ./common_tests
11+
12+
if [ -e $REBOOT_FLAG ]; then
13+
rm $REBOOT_FLAG
14+
else
15+
prlog "pstore_crash_test has not been executed yet. we skip further tests."
16+
exit 0
17+
fi
18+
19+
prlog -n "Mounting pstore filesystem ... "
20+
mount_info=`grep pstore /proc/mounts`
21+
if [ $? -eq 0 ]; then
22+
mount_point=`echo ${mount_info} | cut -d' ' -f2 | head -n1`
23+
prlog "ok"
24+
else
25+
mount none /sys/fs/pstore -t pstore
26+
if [ $? -eq 0 ]; then
27+
mount_point=`grep pstore /proc/mounts | cut -d' ' -f2 | head -n1`
28+
prlog "ok"
29+
else
30+
prlog "FAIL"
31+
exit 1
32+
fi
33+
fi
34+
35+
cd ${mount_point}
36+
37+
prlog -n "Checking dmesg files exist in pstore filesystem ... "
38+
check_files_exist dmesg
39+
40+
prlog -n "Checking console files exist in pstore filesystem ... "
41+
check_files_exist console
42+
43+
prlog -n "Checking pmsg files exist in pstore filesystem ... "
44+
check_files_exist pmsg
45+
46+
prlog -n "Checking dmesg files contain oops end marker"
47+
grep_end_trace() {
48+
grep -q "\---\[ end trace" $1
49+
}
50+
files=`ls dmesg-${backend}-*`
51+
operate_files $? "$files" grep_end_trace
52+
53+
prlog -n "Checking console file contains oops end marker ... "
54+
grep -q "\---\[ end trace" console-${backend}-0
55+
show_result $?
56+
57+
prlog -n "Checking pmsg file properly keeps the content written before crash ... "
58+
prev_uuid=`cat $TOP_DIR/prev_uuid`
59+
if [ $? -eq 0 ]; then
60+
nr_matched=`grep -c "$TEST_STRING_PATTERN" pmsg-${backend}-0`
61+
if [ $nr_matched -eq 1 ]; then
62+
grep -q "$TEST_STRING_PATTERN"$prev_uuid pmsg-${backend}-0
63+
show_result $?
64+
else
65+
prlog "FAIL"
66+
rc=1
67+
fi
68+
else
69+
prlog "FAIL"
70+
rc=1
71+
fi
72+
73+
prlog -n "Removing all files in pstore filesystem "
74+
files=`ls *-${backend}-*`
75+
operate_files $? "$files" rm
76+
77+
exit $rc

0 commit comments

Comments
 (0)