#!/usr/bin/env bash
# Copyright 2016 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

# Exit immediately if a command exits with a non-zero status.
set -o errexit
# Treat unset variables as an error when substituting.
set -o nounset

CONTAINER_IMAGE=xenial-maas-$USER
LXD_USER=$USER
MAAS_BIND_MOUNT=/opt/src/maas
PROFILE=maas-dev-$USER
DESCRIPTION="MAAS Xenial development environment"

cd "$(dirname $0)"/..
MAAS_SANDBOX=$(basename $PWD)
TMP_MAAS_SANDBOX=$MAAS_SANDBOX-lxd
CONTAINER=$(echo $MAAS_SANDBOX | sed 's/_/-/g')

if lxc profile show $PROFILE &> /dev/null; then
    echo "Found LXD profile: $PROFILE"
else
    echo "LXD profile not found: $PROFILE"
    echo "Please run configure-lxd-profile to continue."
    exit 1
fi

if [ -d ../$TMP_MAAS_SANDBOX ]; then
    echo "../$TMP_MAAS_SANDBOX already exists."
    echo "If you wish to continue, delete it first."
    exit 1
fi


if ! lxc info $CONTAINER &> /dev/null; then
    # Container doesn't exist yet.
    lxc launch $CONTAINER_IMAGE $CONTAINER --profile $PROFILE --ephemeral
fi
utilities/wait-for-systemd-container $CONTAINER

# If this fails, assume the device already exists.
lxc exec $CONTAINER -- mknod /dev/loop0 b 7 0 || true
lxc exec $CONTAINER -- apt-get clean
set +e
lxc exec $CONTAINER -- sudo --login -u $LXD_USER bash -c \
    "cd $MAAS_BIND_MOUNT && rm -rf $MAAS_SANDBOX-lxd && "`
   `"cp -al $MAAS_SANDBOX $TMP_MAAS_SANDBOX && "`
   `"cd $MAAS_SANDBOX-lxd && make install-dependencies "`
   `"&& make clean+db && make && make test"
if [ $? -ne 0 ]; then
    echo "Failed to complete test suite. To triage the error, use:"
    echo "    lxc exec $CONTAINER -- login -f $LXD_USER"
    echo "    cd $MAAS_BIND_MOUNT/$TMP_MAAS_SANDBOX"
    echo "When finished, remove the test directory and stop the container:"
    echo "    lxc exec $CONTAINER -- rm -rf $MAAS_BIND_MOUNT/$TMP_MAAS_SANDBOX"
    echo "    lxc stop $CONTAINER"
    exit 1
fi
lxc exec $CONTAINER -- rm -rf $MAAS_BIND_MOUNT/$TMP_MAAS_SANDBOX
lxc stop $CONTAINER
