#!/bin/bash

SYSFS=`mktemp -d --tmpdir opal-elog-parse.sysfs.XXXXXXXXXX`
OUT=`mktemp -d --tmpdir opal-elog-parse.log.XXXXXXXXXX`
LOG=`mktemp --tmpdir opal-elog-parse.out.XXXXXXXXXX`

cp -pr sysfs-test/* $SYSFS/

echo 'test-opal-elog-parse' > $LOG

./opal_errd -s $SYSFS -o $OUT/platform -D -e /bin/true 2>&1 \
    | sed -e 's/ELOG\[[0-9]*\]/ELOG[XXXX]/' >> $LOG

./opal-elog-parse/opal-elog-parse -l -f $OUT/platform &>> $LOG 1>&2

# First 3 elogs are completely synthesized and not *entirely* according
# to spec, but useful in testing.

./opal-elog-parse/opal-elog-parse -d 1 -f $OUT/platform &>> $LOG 1>&2
R=$?
if [ $R -ne 234 ]; then
    echo 'FAIL:' $R;
    exit $R
fi

./opal-elog-parse/opal-elog-parse -d 2 -f $SYSFS/firmware/opal/elog/0x02/raw &>> $LOG 1>&2
R=$?
if [ $R -ne 234 ]; then
    echo 'FAIL:' $R;
    exit $R
fi

./opal-elog-parse/opal-elog-parse -d 3 -f $SYSFS/firmware/opal/elog/0x03/raw &>> $LOG 1>&2
R=$?
if [ $R -ne 234 ]; then
    echo 'FAIL:' $R;
    exit $R
fi

# Next log entry is from FSP A, so has 0x50
./opal-elog-parse/opal-elog-parse -d 0x50000004 -f $SYSFS/firmware/opal/elog/0x04/raw &>> $LOG 1>&2
R=$?
if [ $R -ne 0 ]; then
    echo 'FAIL:' $R;
    exit $R
fi

# Simualted log with a Call Hom esection
./opal-elog-parse/opal-elog-parse -d 0x50000006 -f $SYSFS/firmware/opal/elog/0x06/raw &>> $LOG 1>&2
R=$?
if [ $R -ne 0 ]; then
    echo 'FAIL:' $R;
    exit $R
fi


# Our first "real" elog, this should parse 100% successfully
./opal-elog-parse/opal-elog-parse -d 0x5055ED2E -f $SYSFS/firmware/opal/elog/0x5055ED2E/raw &>> $LOG 1>&2
R=$?
if [ $R -ne 0 ]; then
    echo 'FAIL:' $R;
    exit $R
fi


if diff -u test-opal-elog-parse.result $LOG; then
	rm -rf $SYSFS $OUT $LOG
	echo PASS;
else
	echo FAIL;
fi
