#!/usr/bin/env bash

# see test-integration for example usage of this script

base="$ABS_DEST/.."
export PATH="$base/binary-daemon:$base/dynbinary-daemon:$PATH"

export TEST_CLIENT_BINARY=docker

# Do not bump this version! Integration tests should no longer rely on the docker cli, they should be
# API tests instead. For the existing tests the scripts will use a frozen version of the docker cli
# with a DOCKER_API_VERSION frozen to 1.30, which should ensure that the CI remains green at all times.
export DOCKER_API_VERSION=1.30
if [ -n "$DOCKER_CLI_PATH" ]; then
	export TEST_CLIENT_BINARY=/usr/local/cli/$(basename "$DOCKER_CLI_PATH")
fi

echo "Using test binary $TEST_CLIENT_BINARY"
if ! command -v "$TEST_CLIENT_BINARY" &> /dev/null; then
	echo >&2 'error: missing test client $TEST_CLIENT_BINARY'
	false
fi

# This is a temporary hack for split-binary mode. It can be removed once
# https://github.com/docker/docker/pull/22134 is merged into docker master
if [ "$(go env GOOS)" = 'windows' ]; then
       return
fi

if [ -z "$DOCKER_TEST_HOST" ]; then
	if docker version &> /dev/null; then
		echo >&2 'skipping daemon start, since daemon appears to be already started'
		return
	fi
fi

if ! command -v dockerd &> /dev/null; then
	echo >&2 'error: binary-daemon or dynbinary-daemon must be run before .integration-daemon-start'
	false
fi

# intentionally open a couple bogus file descriptors to help test that they get scrubbed in containers
exec 41>&1 42>&2

export DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs}
export DOCKER_USERLANDPROXY=${DOCKER_USERLANDPROXY:-true}

# example usage: DOCKER_STORAGE_OPTS="dm.basesize=20G,dm.loopdatasize=200G"
storage_params=""
if [ -n "$DOCKER_STORAGE_OPTS" ]; then
	IFS=','
	for i in ${DOCKER_STORAGE_OPTS}; do
		storage_params="--storage-opt $i $storage_params"
	done
	unset IFS
fi

# example usage: DOCKER_REMAP_ROOT=default
extra_params=""
if [ "$DOCKER_REMAP_ROOT" ]; then
	extra_params="--userns-remap $DOCKER_REMAP_ROOT"
fi

# example usage: DOCKER_EXPERIMENTAL=1
if [  "$DOCKER_EXPERIMENTAL" ]; then
	echo >&2 '# DOCKER_EXPERIMENTAL is set: starting daemon with experimental features enabled! '
	extra_params="$extra_params --experimental"
fi

if [ -z "$DOCKER_TEST_HOST" ]; then
	# Start apparmor if it is enabled
	if [ -e "/sys/module/apparmor/parameters/enabled" ] && [ "$(cat /sys/module/apparmor/parameters/enabled)" == "Y" ]; then
		# reset container variable so apparmor profile is applied to process
		# see https://github.com/docker/libcontainer/blob/master/apparmor/apparmor.go#L16
		export container=""
		(
			[ -n "$TESTDEBUG" ] && set -x
			/etc/init.d/apparmor start
		)
	fi

	# "pwd" tricks to make sure $DEST is an absolute path, not a relative one
	export DOCKER_HOST="unix://$(cd "$DEST" && pwd)/docker.sock"
	(
		echo "Starting dockerd"
		[ -n "$TESTDEBUG" ] && set -x
		exec \
			dockerd --debug \
			--host "$DOCKER_HOST" \
			--storage-driver "$DOCKER_GRAPHDRIVER" \
			--pidfile "$DEST/docker.pid" \
			--userland-proxy="$DOCKER_USERLANDPROXY" \
			$storage_params \
			$extra_params \
				&> "$DEST/docker.log"
	) &
else
	export DOCKER_HOST="$DOCKER_TEST_HOST"
fi

# give it a little time to come up so it's "ready"
tries=60
echo "INFO: Waiting for daemon to start..."
while ! $TEST_CLIENT_BINARY version &> /dev/null; do
	(( tries-- ))
	if [ $tries -le 0 ]; then
		printf "\n"
		if [ -z "$DOCKER_HOST" ]; then
			echo >&2 "error: daemon failed to start"
			echo >&2 "  check $DEST/docker.log for details"
		else
			echo >&2 "error: daemon at $DOCKER_HOST fails to '$TEST_CLIENT_BINARY version':"
			$TEST_CLIENT_BINARY version >&2 || true
			# Additional Windows CI debugging as this is a common error as of
			# January 2016
			if [ "$(go env GOOS)" = 'windows' ]; then
				echo >&2 "Container log below:"
				echo >&2 "---"
				# Important - use the docker on the CI host, not the one built locally
				# which is currently in our path.
				! /c/bin/docker -H=$MAIN_DOCKER_HOST logs docker-$COMMITHASH
				echo >&2 "---"
			fi
		fi
		false
	fi
	printf "."
	sleep 2
done
printf "\n"
