git-remote-mediawiki: test environment of git-remote-mediawiki
In order to test git-remote-mediawiki, a set of functions is needed to manage a MediaWiki: edit a page, remove a page, fetch a page, fetch all pages on a given wiki. A few helper function are also provided to check the content of directories. In addition, this patch provides Makefiles to execute tests. See the README file for more details. Signed-off-by: Simon CATHEBRAS <Simon.Cathebras@ensimag.imag.fr> Signed-off-by: Julien KHAYAT <Julien.Khayat@ensimag.imag.fr> Signed-off-by: Simon Perrat <simon.perrat@ensimag.imag.fr> Signed-off-by: Charles ROUSSEL <Charles.Roussel@ensimag.imag.fr> Signed-off-by: Guillaume SASDY <Guillaume.Sasdy@ensimag.imag.fr> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
5ef6ad1785
commit
8435b28989
@ -13,6 +13,7 @@
|
||||
|
||||
. ./test.config
|
||||
|
||||
WIKI_URL=http://"$SERVER_ADDR:$PORT/$WIKI_DIR_NAME"
|
||||
CURR_DIR=$(pwd)
|
||||
TEST_OUTPUT_DIRECTORY=$(pwd)
|
||||
TEST_DIRECTORY="$CURR_DIR"/../../../t
|
||||
@ -25,6 +26,148 @@ else
|
||||
WIKI_DIR_INST="$CURR_DIR/$WEB_WWW"
|
||||
fi
|
||||
|
||||
|
||||
wiki_getpage () {
|
||||
"$CURR_DIR"/test-gitmw.pl get_page "$@"
|
||||
}
|
||||
|
||||
wiki_delete_page () {
|
||||
"$CURR_DIR"/test-gitmw.pl delete_page "$@"
|
||||
}
|
||||
|
||||
wiki_editpage () {
|
||||
"$CURR_DIR"/test-gitmw.pl edit_page "$@"
|
||||
}
|
||||
|
||||
die () {
|
||||
die_with_status 1 "$@"
|
||||
}
|
||||
|
||||
die_with_status () {
|
||||
status=$1
|
||||
shift
|
||||
echo >&2 "$*"
|
||||
exit "$status"
|
||||
}
|
||||
|
||||
|
||||
# Check the preconditions to run git-remote-mediawiki's tests
|
||||
test_check_precond () {
|
||||
if ! test_have_prereq PERL
|
||||
then
|
||||
skip_all='skipping gateway git-mw tests, perl not available'
|
||||
test_done
|
||||
fi
|
||||
|
||||
if [ ! -f "$GIT_BUILD_DIR"/git-remote-mediawiki ];
|
||||
then
|
||||
echo "No remote mediawiki for git found. Copying it in git"
|
||||
echo "cp $GIT_BUILD_DIR/contrib/mw-to-git/git-remote-mediawiki $GIT_BUILD_DIR/"
|
||||
ln -s "$GIT_BUILD_DIR"/contrib/mw-to-git/git-remote-mediawiki "$GIT_BUILD_DIR"
|
||||
fi
|
||||
|
||||
if [ ! -d "$WIKI_DIR_INST/$WIKI_DIR_NAME" ];
|
||||
then
|
||||
skip_all='skipping gateway git-mw tests, no mediawiki found'
|
||||
test_done
|
||||
fi
|
||||
}
|
||||
|
||||
# test_diff_directories <dir_git> <dir_wiki>
|
||||
#
|
||||
# Compare the contents of directories <dir_git> and <dir_wiki> with diff
|
||||
# and errors if they do not match. The program will
|
||||
# not look into .git in the process.
|
||||
# Warning: the first argument MUST be the directory containing the git data
|
||||
test_diff_directories () {
|
||||
rm -rf "$1_tmp"
|
||||
mkdir -p "$1_tmp"
|
||||
cp "$1"/*.mw "$1_tmp"
|
||||
diff -r -b "$1_tmp" "$2"
|
||||
}
|
||||
|
||||
# $1=<dir>
|
||||
# $2=<N>
|
||||
#
|
||||
# Check that <dir> contains exactly <N> files
|
||||
test_contains_N_files () {
|
||||
if test `ls -- "$1" | wc -l` -ne "$2"; then
|
||||
echo "directory $1 sould contain $2 files"
|
||||
echo "it contains these files:"
|
||||
ls "$1"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# wiki_check_content <file_name> <page_name>
|
||||
#
|
||||
# Compares the contents of the file <file_name> and the wiki page
|
||||
# <page_name> and exits with error 1 if they do not match.
|
||||
wiki_check_content () {
|
||||
mkdir -p wiki_tmp
|
||||
wiki_getpage "$2" wiki_tmp
|
||||
# replacement of forbidden character in file name
|
||||
page_name=$(printf "%s\n" "$2" | sed -e "s/\//%2F/g")
|
||||
|
||||
diff -b "$1" wiki_tmp/"$page_name".mw
|
||||
if test $? -ne 0
|
||||
then
|
||||
rm -rf wiki_tmp
|
||||
error "ERROR: file $2 not found on wiki"
|
||||
fi
|
||||
rm -rf wiki_tmp
|
||||
}
|
||||
|
||||
# wiki_page_exist <page_name>
|
||||
#
|
||||
# Check the existence of the page <page_name> on the wiki and exits
|
||||
# with error if it is absent from it.
|
||||
wiki_page_exist () {
|
||||
mkdir -p wiki_tmp
|
||||
wiki_getpage "$1" wiki_tmp
|
||||
page_name=$(printf "%s\n" "$1" | sed "s/\//%2F/g")
|
||||
if test -f wiki_tmp/"$page_name".mw ; then
|
||||
rm -rf wiki_tmp
|
||||
else
|
||||
rm -rf wiki_tmp
|
||||
error "test failed: file $1 not found on wiki"
|
||||
fi
|
||||
}
|
||||
|
||||
# wiki_getallpagename
|
||||
#
|
||||
# Fetch the name of each page on the wiki.
|
||||
wiki_getallpagename () {
|
||||
"$CURR_DIR"/test-gitmw.pl getallpagename
|
||||
}
|
||||
|
||||
# wiki_getallpagecategory <category>
|
||||
#
|
||||
# Fetch the name of each page belonging to <category> on the wiki.
|
||||
wiki_getallpagecategory () {
|
||||
"$CURR_DIR"/test-gitmw.pl getallpagename "$@"
|
||||
}
|
||||
|
||||
# wiki_getallpage <dest_dir> [<category>]
|
||||
#
|
||||
# Fetch all the pages from the wiki and place them in the directory
|
||||
# <dest_dir>.
|
||||
# If <category> is define, then wiki_getallpage fetch the pages included
|
||||
# in <category>.
|
||||
wiki_getallpage () {
|
||||
if test -z "$2";
|
||||
then
|
||||
wiki_getallpagename
|
||||
else
|
||||
wiki_getallpagecategory "$2"
|
||||
fi
|
||||
mkdir -p "$1"
|
||||
while read -r line; do
|
||||
wiki_getpage "$line" $1;
|
||||
done < all.txt
|
||||
}
|
||||
|
||||
# ================= Install part =================
|
||||
|
||||
error () {
|
||||
|
Reference in New Issue
Block a user