Skip to content

Commit

Permalink
selftests/pstore: add pstore test script for pre-reboot
Browse files Browse the repository at this point in the history
The pstore_tests script includes test cases which check pstore's
behavior before crash (and reboot).

The test cases are currently following.

- Check pstore backend is registered
- Check pstore console is registered
- Check /dev/pmsg0 exists
- Write unique string to /dev/pmsg0

The unique string written to /dev/pmsg includes UUID. The UUID is also
left in 'uuid' file in order to enable us to check if the pmsg keeps the
string correctly after reboot.

Example usage is following.

  # cd /path/to/selftests
  # make run_tests -C pstore (or just .pstore/pstore_tests)
  make: Entering directory '/path/to/selftests/pstore'
  === Pstore unit tests (pstore_tests) ===
  UUID=b49b02cf-b0c2-4309-be43-b08c3971e37f
  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
  Checking pstore console is registered ... ok
  Checking /dev/pmsg0 exists ... ok
  Writing unique string to /dev/pmsg0 ... ok
  selftests: pstore_tests [PASS]
  make: Leaving directory '/path/to/selftests/pstore'

We can also see test logs later.

  # cat pstore/logs/20151001-072718_b49b02cf-b0c2-4309-be43-b08c3971e37f/pstore_tests.log
  Thu Oct  1 07:27:18 UTC 2015
  === Pstore unit tests (pstore_tests) ===
  UUID=b49b02cf-b0c2-4309-be43-b08c3971e37f
  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
  Checking pstore console is registered ... ok
  Checking /dev/pmsg0 exists ... ok
  Writing unique string to /dev/pmsg0 ... ok

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]>
  • Loading branch information
toyooka authored and Shuah Khan committed Oct 16, 2015
1 parent be14484 commit cc04a46
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 0 deletions.
1 change: 1 addition & 0 deletions tools/testing/selftests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ TARGETS += mount
TARGETS += mqueue
TARGETS += net
TARGETS += powerpc
TARGETS += pstore
TARGETS += ptrace
TARGETS += seccomp
TARGETS += size
Expand Down
12 changes: 12 additions & 0 deletions tools/testing/selftests/pstore/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Makefile for pstore selftests.
# Expects pstore backend is registered.

all:

TEST_PROGS := pstore_tests
TEST_FILES := common_tests

include ../lib.mk

clean:
rm -rf logs/* *uuid
55 changes: 55 additions & 0 deletions tools/testing/selftests/pstore/common_tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/bin/sh

# common_tests - Shell script commonly used by pstore test scripts
#
# Copyright (C) Hitachi Ltd., 2015
# Written by Hiraku Toyooka <[email protected]>
#
# Released under the terms of the GPL v2.

# Utilities
errexit() { # message
echo "Error: $1" 1>&2
exit 1
}

absdir() { # file_path
(cd `dirname $1`; pwd)
}

show_result() { # result_value
if [ $1 -eq 0 ]; then
prlog "ok"
else
prlog "FAIL"
rc=1
fi
}

# Parameters
TEST_STRING_PATTERN="Testing pstore: uuid="
UUID=`cat /proc/sys/kernel/random/uuid`
TOP_DIR=`absdir $0`
LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`_${UUID}/

# Preparing logs
LOG_FILE=$LOG_DIR/`basename $0`.log
mkdir -p $LOG_DIR || errexit "Failed to make a log directory: $LOG_DIR"
date > $LOG_FILE
prlog() { # messages
/bin/echo "$@" | tee -a $LOG_FILE
}

# Starting tests
rc=0
prlog "=== Pstore unit tests (`basename $0`) ==="
prlog "UUID="$UUID

prlog -n "Checking pstore backend is registered ... "
backend=`cat /sys/module/pstore/parameters/backend`
show_result $?
prlog -e "\tbackend=${backend}"
prlog -e "\tcmdline=`cat /proc/cmdline`"
if [ $rc -ne 0 ]; then
exit 1
fi
30 changes: 30 additions & 0 deletions tools/testing/selftests/pstore/pstore_tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/sh

# pstore_tests - Check pstore's behavior before crash/reboot
#
# Copyright (C) Hitachi Ltd., 2015
# Written by Hiraku Toyooka <[email protected]>
#
# Released under the terms of the GPL v2.

. ./common_tests

prlog -n "Checking pstore console is registered ... "
dmesg | grep -q "console \[pstore"
show_result $?

prlog -n "Checking /dev/pmsg0 exists ... "
test -e /dev/pmsg0
show_result $?

prlog -n "Writing unique string to /dev/pmsg0 ... "
if [ -e "/dev/pmsg0" ]; then
echo "${TEST_STRING_PATTERN}""$UUID" > /dev/pmsg0
show_result $?
echo "$UUID" > $TOP_DIR/uuid
else
prlog "FAIL"
rc=1
fi

exit $rc

0 comments on commit cc04a46

Please sign in to comment.