#! /bin/sh
# PCP QA Test No. 257
# Tests out the api (uses torture_api)
# when connecting to different hosts.
# Initial motivation was to test the distributed PMNS.
# This test is modelled on #112 and compares with 031.out
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.check
. ./common.filter

status=1	# failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15

_filter()
{
    os=$1
    echo "--- os = $os, version = 2 ---" >>$seq.full
    cat - > $tmp.1

    echo "--- unfiltered output ---" >>$seq.full
    cat $tmp.1 >> $seq.full

    _filter_torture_api <$tmp.1
}

_cmp()
{
    echo "differences relative to 031.out ..."

    diff 031.out.${PCP_PLATFORM} $1
}

_do_tests()
{
    style=$1

    case $style
    in
    -s1)
	  style_str="--- style $style (local PMNS)"
	  ;;
    -s2)
	  style_str="--- style $style (distributed PMNS)"
	  ;;
    esac

    echo ""
    echo "=== pmapi 32 v2, local version $style_str ===" | tee -a $seq.full
    torture_api="src/torture_api"
    echo "torture_api = $torture_api" >> $seq.full
    $torture_api -v $style 2>&1 | _filter `uname -r` >$tmp.out
    _cmp $tmp.out

    echo ""
    echo "=== pmapi 32 v2, pmcd 32 v2 $style_str ===" | tee -a $seq.full
    torture_api="src/torture_api"
    echo "torture_api = $torture_api" >> $seq.full
    $torture_api -v $style -h $host_32_v2 2>&1 | _filter $host_32_v2_os >$tmp.out
    _cmp $tmp.out

    echo ""
    echo "=== pmapi 32 v2, pmcd 64 v2 $style_str ===" | tee -a $seq.full
    torture_api="src/torture_api"
    echo "torture_api = $torture_api" >> $seq.full
    $torture_api -v $style -h $host_64_v2 2>&1 | _filter $host_64_v2_os >$tmp.out
    _cmp $tmp.out

}

# real QA test starts here
rm -f $tmp.*
rm -f $seq.full

# try against variously configured hosts
#
# Need PCP_PLATFORM b/c the torture_api output is different
# on different platforms at the moment.
# => different metrics and the same metrics have different pmids
#
host_32_v2=`./getpmcdhosts -s $PCP_PLATFORM -b 32 -m "pmcd.version>2.0" -n 1 -a sample 2>&1`
if [ $? -eq 1 ]; then
    echo "$host_32_v2" >$seq.notrun
    echo "$seq: [not run] `cat $seq.notrun`"
    exit
fi
echo "host_32_v2 = $host_32_v2" >> $seq.full
host_32_v2_os=`ssh -q pcpqa@$host_32_v2 uname -r`

host_64_v2=`./getpmcdhosts -s $PCP_PLATFORM -b 64 -m "pmcd.version>2.0" -n 1 -a sample 2>&1`
if [ $? -eq 1 ]; then
    echo "$host_64_v2" >$seq.notrun
    echo "$seq: [not run] `cat $seq.notrun`"
    exit
fi
echo "host_64_v2 = $host_64_v2" >> $seq.full
host_64_v2_os=`ssh -q pcpqa@$host_64_v2 uname -r`

# make sure it's got the metrics we want for torture_api
_check_metric sample.seconds $hosts_32_v2
_check_metric sampledso.sysinfo $hosts_32_v2
_check_metric sample.seconds $hosts_64_v2
_check_metric sampledso.sysinfo $hosts_64_v2

# uses libpcp2 and local PMNS
_do_tests -s1

# uses libpcp2 and possibly distributed PMNS
_do_tests -s2

status=0
