1f615e2bbSHiraku Toyooka#!/bin/sh
2*63307d01SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only
3f615e2bbSHiraku Toyooka
4f615e2bbSHiraku Toyooka# pstore_post_reboot_tests - Check pstore's behavior after crash/reboot
5f615e2bbSHiraku Toyooka#
6f615e2bbSHiraku Toyooka# Copyright (C) Hitachi Ltd., 2015
7f615e2bbSHiraku Toyooka#  Written by Hiraku Toyooka <[email protected]>
8f615e2bbSHiraku Toyooka#
9f615e2bbSHiraku Toyooka
10856e7c4bSShuah Khan (Samsung OSG)# Kselftest framework requirement - SKIP code is 4.
11856e7c4bSShuah Khan (Samsung OSG)ksft_skip=4
12856e7c4bSShuah Khan (Samsung OSG)
13f615e2bbSHiraku Toyooka. ./common_tests
14f615e2bbSHiraku Toyooka
15f615e2bbSHiraku Toyookaif [ -e $REBOOT_FLAG  ]; then
16f615e2bbSHiraku Toyooka    rm $REBOOT_FLAG
17f615e2bbSHiraku Toyookaelse
18f615e2bbSHiraku Toyooka    prlog "pstore_crash_test has not been executed yet. we skip further tests."
19856e7c4bSShuah Khan (Samsung OSG)    exit $ksft_skip
20f615e2bbSHiraku Toyookafi
21f615e2bbSHiraku Toyooka
22f615e2bbSHiraku Toyookaprlog -n "Mounting pstore filesystem ... "
23f615e2bbSHiraku Toyookamount_info=`grep pstore /proc/mounts`
24f615e2bbSHiraku Toyookaif [ $? -eq 0 ]; then
25f615e2bbSHiraku Toyooka    mount_point=`echo ${mount_info} | cut -d' ' -f2 | head -n1`
26f615e2bbSHiraku Toyooka    prlog "ok"
27f615e2bbSHiraku Toyookaelse
28f615e2bbSHiraku Toyooka    mount none /sys/fs/pstore -t pstore
29f615e2bbSHiraku Toyooka    if [ $? -eq 0 ]; then
30f615e2bbSHiraku Toyooka	mount_point=`grep pstore /proc/mounts | cut -d' ' -f2 | head -n1`
31f615e2bbSHiraku Toyooka	prlog "ok"
32f615e2bbSHiraku Toyooka    else
33f615e2bbSHiraku Toyooka	prlog "FAIL"
34f615e2bbSHiraku Toyooka	exit 1
35f615e2bbSHiraku Toyooka    fi
36f615e2bbSHiraku Toyookafi
37f615e2bbSHiraku Toyooka
38f615e2bbSHiraku Toyookacd ${mount_point}
39f615e2bbSHiraku Toyooka
40f615e2bbSHiraku Toyookaprlog -n "Checking dmesg files exist in pstore filesystem ... "
41f615e2bbSHiraku Toyookacheck_files_exist dmesg
42f615e2bbSHiraku Toyooka
43f615e2bbSHiraku Toyookaprlog -n "Checking console files exist in pstore filesystem ... "
44f615e2bbSHiraku Toyookacheck_files_exist console
45f615e2bbSHiraku Toyooka
46f615e2bbSHiraku Toyookaprlog -n "Checking pmsg files exist in pstore filesystem ... "
47f615e2bbSHiraku Toyookacheck_files_exist pmsg
48f615e2bbSHiraku Toyooka
49f615e2bbSHiraku Toyookaprlog -n "Checking dmesg files contain oops end marker"
50f615e2bbSHiraku Toyookagrep_end_trace() {
51f615e2bbSHiraku Toyooka    grep -q "\---\[ end trace" $1
52f615e2bbSHiraku Toyooka}
53f615e2bbSHiraku Toyookafiles=`ls dmesg-${backend}-*`
54f615e2bbSHiraku Toyookaoperate_files $? "$files" grep_end_trace
55f615e2bbSHiraku Toyooka
56f615e2bbSHiraku Toyookaprlog -n "Checking console file contains oops end marker ... "
57f615e2bbSHiraku Toyookagrep -q "\---\[ end trace" console-${backend}-0
58f615e2bbSHiraku Toyookashow_result $?
59f615e2bbSHiraku Toyooka
60f615e2bbSHiraku Toyookaprlog -n "Checking pmsg file properly keeps the content written before crash ... "
61f615e2bbSHiraku Toyookaprev_uuid=`cat $TOP_DIR/prev_uuid`
62f615e2bbSHiraku Toyookaif [ $? -eq 0 ]; then
63f615e2bbSHiraku Toyooka    nr_matched=`grep -c "$TEST_STRING_PATTERN" pmsg-${backend}-0`
64f615e2bbSHiraku Toyooka    if [ $nr_matched -eq 1 ]; then
65f615e2bbSHiraku Toyooka	grep -q "$TEST_STRING_PATTERN"$prev_uuid pmsg-${backend}-0
66f615e2bbSHiraku Toyooka	show_result $?
67f615e2bbSHiraku Toyooka    else
68f615e2bbSHiraku Toyooka	prlog "FAIL"
69f615e2bbSHiraku Toyooka	rc=1
70f615e2bbSHiraku Toyooka    fi
71f615e2bbSHiraku Toyookaelse
72f615e2bbSHiraku Toyooka    prlog "FAIL"
73f615e2bbSHiraku Toyooka    rc=1
74f615e2bbSHiraku Toyookafi
75f615e2bbSHiraku Toyooka
76f615e2bbSHiraku Toyookaprlog -n "Removing all files in pstore filesystem "
77f615e2bbSHiraku Toyookafiles=`ls *-${backend}-*`
78f615e2bbSHiraku Toyookaoperate_files $? "$files" rm
79f615e2bbSHiraku Toyooka
80f615e2bbSHiraku Toyookaexit $rc
81