#!/bin/sh
# PCP QA Test No. 1335
# simplest V3 archive test
# non-valgrind variant, see qa/1336 for the valgrind variant
#
# Copyright (c) 2021 Ken McDonell.  All Rights Reserved.
#

if [ $# -eq 0 ]
then
    seq=`basename $0`
    echo "QA output created by $seq"
else
    # use $seq from caller, unless not set
    [ -n "$seq" ] || seq=`basename $0`
    echo "QA output created by `basename $0` $*"
fi

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

eval `pmconfig -L -s v3_archives`
[ "$v3_archives" = true ] || _notrun "No V3 archive support"

do_valgrind=false
if [ "$1" = "--valgrind" ]
then
    _check_valgrind
    do_valgrind=true
elif which valgrind >/dev/null 2>&1
then
    [ $PCPQA_VALGRIND = both ] || \
	_notrun "valgrind variant qa/1336 will be run"
fi

_cleanup()
{
    cd $here
    $sudo rm -rf $tmp $tmp.*
}

status=0	# success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_filter()
{
    rm -f $tmp.sed
    touch $tmp.sed
    tstamp=1
    tee -a $seq_full \
    | sed >$tmp.tmp \
	-e "s@$tmp@TMP@g" \
	-e '/commencing/s/ing .*/ing DATE/' \
	-e '/ending/s/ing .*/ing DATE/' \
	-e '/^PID for pmlogger:/s/ [0-9][0-9]*/ PID/' \
	-e '/^[0-2][0-9]:/{
s/  [0-9][0-9][0-9][0-9]/OFFSET/g
s/   [0-9][0-9][0-9]/OFFSET/g
}' \
    # end
    sed -n <$tmp.tmp \
      -e 's/.*\([0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9]*[0-9]\).*/\1/p' \
    | LC_COLLATE=POSIX sort -u \
    | while read time
    do
	case "$time"
	in
	    *000)	# nsec precision, but usec value
			time=`echo "$time" | sed -e 's/\(.*\)000/\1/'`
			;;
	esac
    	if grep $time $tmp.sed >/dev/null
	then
	    :
	else
	    # new timestamp, match optionally with trailing zeroes
	    echo "s/${time}0*/TIMESTAMP-$tstamp/g" >>$tmp.sed
	    tstamp=`expr $tstamp + 1`
	fi
    done
    cat $tmp.sed >>$seq_full

    sed -f $tmp.sed <$tmp.tmp
}

cat <<End-of-File >$tmp.config
log mandatory on 100 msec {
    sample.long
}
End-of-File

pmstore sample.long.write_me 13 >>$seq_full

# real QA test starts here
for version in 2 3
do

    if $do_valgrind
    then
	_run_valgrind pmlogger -V $version -c $tmp.config -l $tmp.log -s 1 $tmp.$version 2>&1 \
	| sed -e "s@$tmp@TMP@g"
    else
	pmlogger -V $version -c $tmp.config -l $tmp.log -s 1 $tmp.$version
    fi

    cat $tmp.log >>$seq_full
    ls -l $tmp.$version.index $tmp.$version.meta $tmp.$version.0 >>$seq_full

    if $do_valgrind
    then
	_run_valgrind pmdumplog -lt $tmp.$version sample 2>&1 \
	| _filter >$tmp.$version.dump
    else
	pmdumplog -lt $tmp.$version sample \
	| _filter >$tmp.$version.dump
    fi
    cat $tmp.$version.dump >>$seq_full

    if $do_valgrind
    then
	_run_valgrind pmloglabel -L $tmp.$version 2>&1 \
	| _filter >$tmp.$version.label
    else
	pmloglabel -L $tmp.$version \
	| _filter >$tmp.$version.label
    fi
    cat $tmp.$version.label >>$seq_full

done

echo "=== pmdumplog diffs ==="
diff $tmp.*.dump

echo "=== pmloglabel diffs ==="
diff $tmp.*.label

# success, all done
exit
