On Tue, Sep 8, 2015 at 4:06 AM, Hiraku Toyooka <hiraku.toyooka.gu@xxxxxxxxxxx> wrote: > 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 string to /dev/pmsg0 > > Example usage is following. > > make: Entering directory '/home/root/selftests/pstore' > === Pstore unit tests (pstore_tests)=== > Checking pstore backend is registered ... ok > Checking pstore console is registered ... ok > Checking /dev/pmsg0 exists ... ok > Writing TEST_STRING to /dev/pmsg0 ... ok > selftests: pstore_tests [PASS] > === Pstore unit tests (pstore_post_reboot_tests)=== > Checking pstore backend is registered ... ok > pstore_crash_test has not been executed yet. we skip further tests. > selftests: pstore_post_reboot_tests [PASS] > make: Leaving directory '/home/root/selftests/pstore' > > We can also see test logs later. > > Signed-off-by: Hiraku Toyooka <hiraku.toyooka.gu@xxxxxxxxxxx> > Cc: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx> > Cc: Tony Luck <tony.luck@xxxxxxxxx> > Cc: Anton Vorontsov <anton@xxxxxxxxxx> > Cc: Colin Cross <ccross@xxxxxxxxxxx> > Cc: Kees Cook <keescook@xxxxxxxxxxxx> > Cc: Mark Salyzyn <salyzyn@xxxxxxxxxxx> > Cc: Seiji Aguchi <seiji.aguchi@xxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: linux-api@xxxxxxxxxxxxxxx > --- > tools/testing/selftests/Makefile | 1 + > tools/testing/selftests/pstore/Makefile | 12 +++++++ > tools/testing/selftests/pstore/common_tests | 45 +++++++++++++++++++++++++++ > tools/testing/selftests/pstore/pstore_tests | 42 +++++++++++++++++++++++++ > 4 files changed, 100 insertions(+) > create mode 100644 tools/testing/selftests/pstore/Makefile > create mode 100755 tools/testing/selftests/pstore/common_tests > create mode 100755 tools/testing/selftests/pstore/pstore_tests > > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile > index 24ae9e8..b58c72e 100644 > --- a/tools/testing/selftests/Makefile > +++ b/tools/testing/selftests/Makefile > @@ -12,6 +12,7 @@ TARGETS += mount > TARGETS += mqueue > TARGETS += net > TARGETS += powerpc > +TARGETS += pstore > TARGETS += ptrace > TARGETS += seccomp > TARGETS += size > diff --git a/tools/testing/selftests/pstore/Makefile b/tools/testing/selftests/pstore/Makefile > new file mode 100644 > index 0000000..40b887d > --- /dev/null > +++ b/tools/testing/selftests/pstore/Makefile > @@ -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/* > diff --git a/tools/testing/selftests/pstore/common_tests b/tools/testing/selftests/pstore/common_tests > new file mode 100755 > index 0000000..98611c5 > --- /dev/null > +++ b/tools/testing/selftests/pstore/common_tests > @@ -0,0 +1,45 @@ > +#!/bin/sh > + > +# common_tests - Shell script commonly used by pstore test scripts > +# > +# Copyright (C) Hitachi Ltd., 2015 > +# Written by Hiraku Toyooka <hiraku.toyooka.gu@xxxxxxxxxxx> > +# > +# 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) > +} > + > +# Parameters > +TOP_DIR=`absdir $0` > +LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/ > +TEST_STRING="Testing pstore" > + > +# 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 > +} > +prlog "=== Pstore unit tests (`basename $0`)===" > + > +# Starting tests > +rc=0 > + > +prlog -n "Checking pstore backend is registered ... " > +be_msg=`dmesg | grep "pstore: Registered [a-zA-Z0-9]\+ as persistent store backend$"` > +if [ $? -eq 0 ]; then > + backend=`echo ${be_msg} | sed -e 's/^.*Registered\ \([a-zA-z0-9-]\+\)\ as.*$/\1/g'` > + prlog "ok" > +else > + prlog "FAIL" > + exit 1 > +fi This seems unstable if the system hasn't booted recently or if stuff is spamming dmesg. What about examining /sys/module/pstore instead? > diff --git a/tools/testing/selftests/pstore/pstore_tests b/tools/testing/selftests/pstore/pstore_tests > new file mode 100755 > index 0000000..cbf613c > --- /dev/null > +++ b/tools/testing/selftests/pstore/pstore_tests > @@ -0,0 +1,42 @@ > +#!/bin/sh > + > +# pstore_tests - Check pstore's behavior before crash/reboot > +# > +# Copyright (C) Hitachi Ltd., 2015 > +# Written by Hiraku Toyooka <hiraku.toyooka.gu@xxxxxxxxxxx> > +# > +# Released under the terms of the GPL v2. > + > +. ./common_tests > + > +prlog -n "Checking pstore console is registered ... " > +dmesg | grep -q "console \[pstore" > +if [ $? -eq 0 ]; then > + prlog "ok" > +else > + prlog "FAIL" > +fi > + > +prlog -n "Checking /dev/pmsg0 exists ... " > +if [ -e "/dev/pmsg0" ]; then > + prlog "ok" > +else > + prlog "FAIL" > + rc=1 > +fi > + > +prlog -n "Writing TEST_STRING to /dev/pmsg0 ... " > +if [ -e "/dev/pmsg0" ]; then > + echo "${TEST_STRING}" > /dev/pmsg0 > + if [ $? -eq 0 ]; then > + prlog "ok" > + else > + prlog "FAIL" > + rc=1 > + fi > +else > + prlog "FAIL" > + rc=1 > +fi > + > +exit $rc > -Kees -- Kees Cook Chrome OS Security -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html