#!/bin/bash

# This script runs the integration tests on an already configured LXD machine
# where the tests are run LXD in LXD.  i.e. an LXD container is spawned, pylxd
# is copied into the container, and then the container runs the integration
# tests.

# This script is NOT used by the CI system, but for people to run integration
# tests on their own computers where they don't want the integration test to
# mess with their setup.

set -ex

_dir="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"

function _run_tests {
	local _target=${1}
	CONTAINER_NAME=pylxd-`uuidgen | cut -d"-" -f1`

	if [[ "${_target}" == "bionic" ]]; then
		echo "Running Bionic (18:04) integration tests"
		CONTAINER_IMAGE="ubuntu:18.04"
	else
		echo "Running Xenial (16:04) integration tests"
		CONTAINER_IMAGE="ubuntu:16.04"
	fi

	# This creates a privileged container, because I was bumping into situations where it
	# seemed that we had maxed out user namespaces (I haven't checked it out, but it's likely
	# a bug in LXD).
	lxc launch $CONTAINER_IMAGE $CONTAINER_NAME -c security.nesting=true -c security.privileged=true
	sleep 5  # Wait for the network to come up

	lxc exec $CONTAINER_NAME -- mkdir -p /opt/pylxd
	# NOTE: rockstar (13 Sep 2016) - --recursive is not supported in lxd <2.1, so
	# until we have pervasive support for that, we'll do this tar hack.
	local ldir="${_dir}/.."
	cd ${ldir} && tar cf - * .git | lxc exec $CONTAINER_NAME -- tar xf - -C /opt/pylxd
	cd ${_dir}
	lxc exec $CONTAINER_NAME -- /bin/sh -c "cd /opt/pylxd && integration/run-integration-tests"

	lxc delete --force $CONTAINER_NAME
}

# run xenial and then bionic integration tests
_run_tests xenial
_run_tests bionic
