tests: use Git's test framework
This allows tests to run in parallel as well as letting us use "prove" or another TAP harness to run the tests. Git's test framework requires Git to be fully built before letting any tests run, so add a new target to the top-level Makefile which builds all of Git instead of just libgit.a and make the "test" target depend on that. Signed-off-by: John Keeping <john@keeping.me.uk>
This commit is contained in:

committed by
Jason A. Donenfeld

parent
8a92df033e
commit
c95cc5ec56
130
tests/setup.sh
130
tests/setup.sh
@@ -15,46 +15,48 @@
|
||||
# run_test 'repo index' 'cgit_url "/" | tidy -e'
|
||||
# run_test 'repo summary' 'cgit_url "/foo" | tidy -e'
|
||||
|
||||
unset CDPATH
|
||||
: ${TEST_DIRECTORY=$(pwd)/../git/t}
|
||||
TEST_NO_CREATE_REPO=YesPlease
|
||||
. "$TEST_DIRECTORY"/test-lib.sh
|
||||
|
||||
# Prepend the directory containing cgit to PATH.
|
||||
PATH="$(pwd)/../..:$PATH"
|
||||
|
||||
mkrepo() {
|
||||
name=$1
|
||||
count=$2
|
||||
dir=$PWD
|
||||
test -d "$name" && return
|
||||
printf "Creating testrepo %s\n" "$name"
|
||||
mkdir -p "$name"
|
||||
cd "$name"
|
||||
git init
|
||||
n=1
|
||||
while test $n -le $count
|
||||
do
|
||||
echo $n >file-$n
|
||||
git add file-$n
|
||||
git commit -m "commit $n"
|
||||
n=$(expr $n + 1)
|
||||
done
|
||||
if test "$3" = "testplus"
|
||||
then
|
||||
echo "hello" >a+b
|
||||
git add a+b
|
||||
git commit -m "add a+b"
|
||||
git branch "1+2"
|
||||
fi
|
||||
cd "$dir"
|
||||
test_create_repo "$name"
|
||||
(
|
||||
cd "$name"
|
||||
n=1
|
||||
while test $n -le $count
|
||||
do
|
||||
echo $n >file-$n
|
||||
git add file-$n
|
||||
git commit -m "commit $n"
|
||||
n=$(expr $n + 1)
|
||||
done
|
||||
if test "$3" = "testplus"
|
||||
then
|
||||
echo "hello" >a+b
|
||||
git add a+b
|
||||
git commit -m "add a+b"
|
||||
git branch "1+2"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
setup_repos()
|
||||
{
|
||||
rm -rf trash/cache
|
||||
mkdir -p trash/cache
|
||||
mkrepo trash/repos/foo 5 >/dev/null
|
||||
mkrepo trash/repos/bar 50 >/dev/null
|
||||
mkrepo trash/repos/foo+bar 10 testplus >/dev/null
|
||||
mkrepo "trash/repos/with space" 2 >/dev/null
|
||||
cat >trash/cgitrc <<EOF
|
||||
rm -rf cache
|
||||
mkdir -p cache
|
||||
mkrepo repos/foo 5 >/dev/null
|
||||
mkrepo repos/bar 50 >/dev/null
|
||||
mkrepo repos/foo+bar 10 testplus >/dev/null
|
||||
mkrepo "repos/with space" 2 >/dev/null
|
||||
cat >cgitrc <<EOF
|
||||
virtual-root=/
|
||||
cache-root=$PWD/trash/cache
|
||||
cache-root=$PWD/cache
|
||||
|
||||
cache-size=1021
|
||||
snapshots=tar.gz tar.bz zip
|
||||
@@ -66,83 +68,33 @@ summary-tags=5
|
||||
clone-url=git://example.org/\$CGIT_REPO_URL.git
|
||||
|
||||
repo.url=foo
|
||||
repo.path=$PWD/trash/repos/foo/.git
|
||||
repo.path=$PWD/repos/foo/.git
|
||||
# Do not specify a description for this repo, as it then will be assigned
|
||||
# the constant value "[no description]" (which actually used to cause a
|
||||
# segfault).
|
||||
|
||||
repo.url=bar
|
||||
repo.path=$PWD/trash/repos/bar/.git
|
||||
repo.path=$PWD/repos/bar/.git
|
||||
repo.desc=the bar repo
|
||||
|
||||
repo.url=foo+bar
|
||||
repo.path=$PWD/trash/repos/foo+bar/.git
|
||||
repo.path=$PWD/repos/foo+bar/.git
|
||||
repo.desc=the foo+bar repo
|
||||
|
||||
repo.url=with space
|
||||
repo.path=$PWD/trash/repos/with space/.git
|
||||
repo.path=$PWD/repos/with space/.git
|
||||
repo.desc=spaced repo
|
||||
EOF
|
||||
}
|
||||
|
||||
prepare_tests()
|
||||
{
|
||||
setup_repos
|
||||
rm -f test-output.log 2>/dev/null
|
||||
test_count=0
|
||||
test_failed=0
|
||||
echo "[$0]" "$@" >test-output.log
|
||||
echo "$@" "($0)"
|
||||
}
|
||||
|
||||
tests_done()
|
||||
{
|
||||
printf "\n"
|
||||
if test $test_failed -gt 0
|
||||
then
|
||||
printf "test: *** %s failure(s), logfile=%s\n" \
|
||||
$test_failed "$(pwd)/test-output.log"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
run_test()
|
||||
{
|
||||
bug=0
|
||||
if test "$1" = "BUG"
|
||||
then
|
||||
bug=1
|
||||
shift
|
||||
fi
|
||||
desc=$1
|
||||
script=$2
|
||||
test_count=$(expr $test_count + 1)
|
||||
printf "\ntest %d: name='%s'\n" $test_count "$desc" >>test-output.log
|
||||
printf "test %d: eval='%s'\n" $test_count "$2" >>test-output.log
|
||||
eval "$2" >>test-output.log 2>>test-output.log
|
||||
res=$?
|
||||
printf "test %d: exitcode=%d\n" $test_count $res >>test-output.log
|
||||
if test $res = 0 -a $bug = 0
|
||||
then
|
||||
printf " %2d) %-60s [ok]\n" $test_count "$desc"
|
||||
elif test $res = 0 -a $bug = 1
|
||||
then
|
||||
printf " %2d) %-60s [BUG FIXED]\n" $test_count "$desc"
|
||||
elif test $bug = 1
|
||||
then
|
||||
printf " %2d) %-60s [KNOWN BUG]\n" $test_count "$desc"
|
||||
else
|
||||
test_failed=$(expr $test_failed + 1)
|
||||
printf " %2d) %-60s [failed]\n" $test_count "$desc"
|
||||
fi
|
||||
}
|
||||
|
||||
cgit_query()
|
||||
{
|
||||
CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="$1" "$PWD/../cgit"
|
||||
CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="$1" cgit
|
||||
}
|
||||
|
||||
cgit_url()
|
||||
{
|
||||
CGIT_CONFIG="$PWD/trash/cgitrc" QUERY_STRING="url=$1" "$PWD/../cgit"
|
||||
CGIT_CONFIG="$PWD/cgitrc" QUERY_STRING="url=$1" cgit
|
||||
}
|
||||
|
||||
test -z "$CGIT_TEST_NO_CREATE_REPOS" && setup_repos
|
||||
|
Reference in New Issue
Block a user