#!/bin/bash
# -----------------------------------------------------------------------------
# Checks whether the given pipeconfs are registered.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

aux=/tmp/stc/stc-$$.log
trap "rm -f $aux $aux.1 $aux.2 2>/dev/null" EXIT

for attempt in {1..30}; do
    onos ${1:-$OCI} "onos:pipeconfs -s" > $aux
    cat $aux

    # Normalize the registered pipeconfs
    cut -d '=' -f2 $aux | sort > $aux.1

    # Expected pipeconfs
    pipeconfs=${2-org.onosproject.pipelines.basic}
    (for pipeconf in ${pipeconfs//,/ }; do echo ${pipeconf}; done) | sort > $aux.2

    # Check for differences
    case ${3:-equals} in
    equals) diff $aux.1 $aux.2;;
    includes) [ $(egrep -c -f $aux.2 $aux.1) -ge $(wc -l $aux.2 | sed "s|$aux.2||g") ];;
    excludes) ! egrep -f $aux.2 $aux.1;;
    esac

    [ $? -eq 0 ] && exit 0 || sleep 1
done

exit 1;
