#!/bin/sh
# ------------------------------------------------------------------
#
#    Copyright (C) 2013 Canonical Ltd.
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#
# ------------------------------------------------------------------

set -e

testdir="/tmp/testme"
if [ -d "$ADTTMP" ]; then
    cat > "$ADTTMP/click" <<EOM
#!/bin/sh
echo "$testdir"
EOM
    chmod 755 "$ADTTMP/click"

    cat > "$ADTTMP/aa-exec" <<EOM
#!/bin/sh
set > $ADTTMP/out
EOM
    chmod 755 "$ADTTMP/aa-exec"
else
    echo "ADTTMP '$ADTTMP' does not exist" >&2
    exit 1
fi

uid=`id -u`
if [ "$uid" = "0" ]; then
    # divert aa-exec and substitute /bin/true so we don't need to load
    # policy into the kernel
    cp -f /usr/sbin/aa-exec /usr/sbin/aa-exec.orig
    cp -f "$ADTTMP/aa-exec" /usr/sbin/aa-exec
    cp -f /usr/bin/click /usr/bin/click.orig
    cp -f "$ADTTMP/click" /usr/bin/click
    trap "mv -f /usr/sbin/aa-exec.orig /usr/sbin/aa-exec ; mv -f /usr/bin/click.orig /usr/bin/click" EXIT HUP INT QUIT TERM
fi

user=`id -un`

aa-exec-click -x -p testme -- /bin/true

rc="0"
for i in XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_DATA_DIRS PATH LD_LIBRARY_PATH QML2_IMPORT_PATH APP_ID UBUNTU_APPLICATION_ISOLATION TMPDIR __GL_SHADER_DISK_CACHE_PATH ; do
    case "$i" in
        XDG_CACHE_HOME)
            egrep -q "$i='/.*/.cache'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        XDG_CONFIG_HOME)
            egrep -q "$i='/.*/.config'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        XDG_DATA_HOME)
            egrep -q "$i='/.*/.local/share'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        XDG_RUNTIME_DIR)
            egrep -q "$i='/run/user/[0-9]+'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        XDG_DATA_DIRS)
            egrep -q "$i='/tmp/testme:/usr/share" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        PATH)
            egrep -q "$i='/tmp/testme/lib/.+/bin:/tmp/testme:" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        LD_LIBRARY_PATH)
            egrep -q "$i='/tmp/testme/lib/.+'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        QML2_IMPORT_PATH)
            egrep -q "$i='/tmp/testme/lib/.*'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        __GL_SHADER_DISK_CACHE_PATH)
            egrep -q "$i='/.*/.cache/testme'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        APP_ID)
            egrep -q "$i='testme'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        UBUNTU_APPLICATION_ISOLATION)
            egrep -q "$i='1'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
        TMPDIR)
            egrep -q "$i='/run/user/[0-9]+/confined/testme'" "$ADTTMP/out" || {
                rc="1"
                echo "$i not properly set" >&2
            }
            ;;
    esac
done

if [ "$rc" = "0" ]; then
    echo PASS
else
    echo ""
    echo "Output:"
    cat "$ADTTMP/out" >&2
    echo ""
    echo FAIL
fi

exit $rc
