#!/bin/bash
# -----------------------------------------------------------------------------
# Checks whether all and only the ONOS apps configured in ONOS_APPS are active.
# -----------------------------------------------------------------------------

[ ! -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

echo $app | grep '.'

if [ $? != 0 ]; then
    appnameextra=
else
    appname=org.onosproject.
fi

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

    # Normalize the installed apps
    cut -c7- $aux | cut -d\  -f1 | sort > $aux.1

    # Normalize the expected apps
    apps=${2:-$ONOS_APPS}
    apps=${apps:-drivers,openflow}
    (for app in ${apps//,/ }; do echo ${appnameextra}${app}; 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;
