#!/bin/sh

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

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
