#!/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:-gui,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;
