#!/bin/sh
#
# Copyright (c) 2008 Clemens Buchacher <drizzd@aon.at>
#

if test -z "$GIT_TEST_HTTPD"
then
	say "skipping test, network testing disabled by default"
	say "(define GIT_TEST_HTTPD to enable)"
	test_done
	exit
fi

LIB_HTTPD_PATH=${LIB_HTTPD_PATH-'/usr/sbin/apache2'}
LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'8111'}

TEST_PATH="$PWD"/../lib-httpd
HTTPD_ROOT_PATH="$PWD"/httpd
HTTPD_DOCUMENT_ROOT_PATH=$HTTPD_ROOT_PATH/www

if ! test -x "$LIB_HTTPD_PATH"
then
        say "skipping test, no web server found at '$LIB_HTTPD_PATH'"
        test_done
        exit
fi

HTTPD_VERSION=`$LIB_HTTPD_PATH -v | \
	sed -n 's/^Server version: Apache\/\([0-9]*\)\..*$/\1/p; q'`

if test -n "$HTTPD_VERSION"
then
	if test -z "$LIB_HTTPD_MODULE_PATH"
	then
		if ! test $HTTPD_VERSION -ge 2
		then
			say "skipping test, at least Apache version 2 is required"
			test_done
			exit
		fi

		LIB_HTTPD_MODULE_PATH='/usr/lib/apache2/modules'
	fi
else
	error "Could not identify web server at '$LIB_HTTPD_PATH'"
fi

HTTPD_PARA="-d $HTTPD_ROOT_PATH -f $TEST_PATH/apache.conf"

prepare_httpd() {
	mkdir -p $HTTPD_DOCUMENT_ROOT_PATH

	ln -s $LIB_HTTPD_MODULE_PATH $HTTPD_ROOT_PATH/modules

	if test -n "$LIB_HTTPD_SSL"
	then
		HTTPD_URL=https://127.0.0.1:$LIB_HTTPD_PORT

		RANDFILE_PATH="$HTTPD_ROOT_PATH"/.rnd openssl req \
			-config $TEST_PATH/ssl.cnf \
			-new -x509 -nodes \
			-out $HTTPD_ROOT_PATH/httpd.pem \
			-keyout $HTTPD_ROOT_PATH/httpd.pem
		GIT_SSL_NO_VERIFY=t
		export GIT_SSL_NO_VERIFY
		HTTPD_PARA="$HTTPD_PARA -DSSL"
	else
		HTTPD_URL=http://127.0.0.1:$LIB_HTTPD_PORT
	fi

	if test -n "$LIB_HTTPD_DAV" -o -n "$LIB_HTTPD_SVN"
	then
		HTTPD_PARA="$HTTPD_PARA -DDAV"

		if test -n "$LIB_HTTPD_SVN"
		then
			HTTPD_PARA="$HTTPD_PARA -DSVN"
			rawsvnrepo="$HTTPD_ROOT_PATH/svnrepo"
			svnrepo="http://127.0.0.1:$LIB_HTTPD_PORT/svn"
		fi
	fi
}

start_httpd() {
	prepare_httpd

	trap 'stop_httpd; die' exit

	"$LIB_HTTPD_PATH" $HTTPD_PARA \
		-c "Listen 127.0.0.1:$LIB_HTTPD_PORT" -k start
}

stop_httpd() {
	trap 'die' exit

	"$LIB_HTTPD_PATH" $HTTPD_PARA -k stop
}
