#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only

# common_tests - Shell script commonly used by pstore test scripts
#
# Copyright (C) Hitachi Ltd., 2015
#  Written by Hiraku Toyooka <hiraku.toyooka.gu@hitachi.com>
#

# 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
}

check_files_exist() { # type of pstorefs file
    if [ -e ${1}-${backend}-0 ]; then
	prlog "ok"
	for f in `ls ${1}-${backend}-*`; do
            prlog -e "\t${f}"
	done
    else
	prlog "FAIL"
	rc=1
    fi
}

operate_files() { # tested value, files, operation
    if [ $1 -eq 0 ]; then
	prlog
	for f in $2; do
	    prlog -ne "\t${f} ... "
	    # execute operation
	    $3 $f
	    show_result $?
	done
    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}/
REBOOT_FLAG=$TOP_DIR/reboot_flag

# 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
