added tests
This commit is contained in:
104
dvm/tools/tester/trunk/automation/build-and-test.sh
Normal file
104
dvm/tools/tester/trunk/automation/build-and-test.sh
Normal file
@@ -0,0 +1,104 @@
|
||||
#!/bin/sh
|
||||
|
||||
SAVE_DIR=`pwd`
|
||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
||||
|
||||
if [ "$1" = "--continue" ]; then
|
||||
CONTINUE_FLAG=1
|
||||
shift
|
||||
else
|
||||
CONTINUE_FLAG=0
|
||||
fi
|
||||
ORIG_DIR="$1"
|
||||
REV_NUMBER=$2
|
||||
|
||||
if [ -f "$SAVE_DIR/dvm-tester.config" ]; then
|
||||
. "$SAVE_DIR/dvm-tester.config"
|
||||
fi
|
||||
|
||||
if [ -z "$PLATFORMS" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$TEST_SUITE" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FULL_REP_URL="$PUBL_BASE_URL/r${REV_NUMBER}${PUBL_SUFFIX}/"
|
||||
|
||||
TEST_SUITE=$(cd "$TEST_SUITE" && pwd)
|
||||
|
||||
# Actually, can be taken any temporary name
|
||||
RESULTS_DIR="$ORIG_DIR.results"
|
||||
export TMPDIR="$ORIG_DIR.work"
|
||||
if [ -d "/home/scratch" ]; then
|
||||
TEMPL_NAME="/home/scratch/$(basename "$TMPDIR").XXX"
|
||||
TMPDIR=$(mktemp -d "$TEMPL_NAME")
|
||||
fi
|
||||
mkdir -p "$TMPDIR"
|
||||
|
||||
# Launch task processor
|
||||
TASK_FIFO="$(mktemp -u).task-fifo"
|
||||
mkfifo "$TASK_FIFO"
|
||||
if [ $CONTINUE_FLAG -eq 0 ]; then
|
||||
rm -rf "$RESULTS_DIR"
|
||||
fi
|
||||
mkdir -p "$RESULTS_DIR"
|
||||
cd "$SAVE_DIR"
|
||||
"$MY_DIR/task-processor.sh" "$RESULTS_DIR" <"$TASK_FIFO" &
|
||||
|
||||
# Build DVM-systems for given platforms and sequentially feed task processor from our test-suite
|
||||
exec 4>"$TASK_FIFO"
|
||||
for platf in $PLATFORMS; do
|
||||
WORK_DIR="$ORIG_DIR.$platf"
|
||||
if [ $CONTINUE_FLAG -eq 0 ]; then
|
||||
rm -rf "$WORK_DIR"
|
||||
fi
|
||||
if [ ! -e "$WORK_DIR" ]; then
|
||||
cp -r "$ORIG_DIR" "$WORK_DIR"
|
||||
fi
|
||||
cd "$WORK_DIR/dvm_sys"
|
||||
if [ ! -f platforms/$platf ]; then
|
||||
if [ -f "$SAVE_DIR/$platf" ]; then
|
||||
cp "$SAVE_DIR/$platf" platforms/
|
||||
else
|
||||
echo "Can not find platform $platf"
|
||||
fi
|
||||
fi
|
||||
if [ -f platforms/$platf ]; then
|
||||
PLATFORM=$platf ./dvminstall >install.log 2>& 1
|
||||
INST_RES=$?
|
||||
if [ $INST_RES -ne 0 -o ! -f user/dvm ]; then
|
||||
:
|
||||
# TODO: Handle errors with building DVM-system
|
||||
else
|
||||
cd "$SAVE_DIR"
|
||||
"$MY_DIR/perform-tests.sh" "$WORK_DIR/dvm_sys" "$TEST_SUITE" 4
|
||||
fi
|
||||
fi
|
||||
done
|
||||
exec 4>&-
|
||||
|
||||
# Wait for task processor to finish
|
||||
wait
|
||||
|
||||
# Cleanup stuff
|
||||
rm "$TASK_FIFO"
|
||||
for platf in $PLATFORMS; do
|
||||
WORK_DIR="$ORIG_DIR.$platf"
|
||||
# rm -rf "$WORK_DIR"
|
||||
done
|
||||
|
||||
# Generate final report
|
||||
cd "$SAVE_DIR"
|
||||
"$MY_DIR/gen-report.sh" "$TEST_SUITE" "$RESULTS_DIR" "$FULL_REP_URL" $REV_NUMBER
|
||||
|
||||
# Publish the report and send summary e-mail
|
||||
if [ "$POPULATE_FLAG" = "1" ]; then
|
||||
cd "$SAVE_DIR"
|
||||
"$MY_DIR/populate-report.sh" "$RESULTS_DIR" "$REV_NUMBER"
|
||||
fi
|
||||
|
||||
# Cleanup stuff finally
|
||||
#rm -rf "$RESULTS_DIR"
|
||||
#rm -rf "$TMPDIR"
|
||||
65
dvm/tools/tester/trunk/automation/check-repo.sh
Normal file
65
dvm/tools/tester/trunk/automation/check-repo.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/bin/sh
|
||||
|
||||
unset CDPATH
|
||||
|
||||
REPO_URL=http://svn.dvm-system.org/svn/dvmhrepo/dvm
|
||||
REPO_USER=dvmhuser
|
||||
REPO_PASS=dvmh2013
|
||||
PATHS_OF_INTEREST="cdvm/trunk cdvmh-clang/trunk driver/trunk fdvm/trunk general/examples/trunk general/platforms/trunk general/trunk rts/trunk rts-dvmh/trunk tools/pppa/trunk tools/predictor/trunk"
|
||||
|
||||
SVN_PARAMS="--username $REPO_USER --password $REPO_PASS --non-interactive"
|
||||
|
||||
PREV_REV=`cat latest-seen-revision`
|
||||
[ "$PREV_REV" -ge 0 ] 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
PREV_REV=0
|
||||
fi
|
||||
|
||||
NEW_REV=`svn info $SVN_PARAMS $REPO_URL | grep "Revision" | awk '{ print $2 }'`
|
||||
[ "$NEW_REV" -ge 1 ] 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
NEW_REV=0
|
||||
fi
|
||||
|
||||
# If latest-seen-revision is corrupted, then inspect only latest revision
|
||||
if [ $PREV_REV -eq 0 -a $NEW_REV -gt 0 ]; then
|
||||
PREV_REV=$(( NEW_REV - 1 ))
|
||||
fi
|
||||
|
||||
CUR_REV=$(( PREV_REV + 1 ))
|
||||
while [ $CUR_REV -le $NEW_REV ]; do
|
||||
TO_TEST=1
|
||||
COMMIT_MSG=`svn log $SVN_PARAMS --incremental -c $CUR_REV $REPO_URL | tail -n +4`
|
||||
IS_INTERMEDIATE=`echo "$COMMIT_MSG" | grep -i "intermediate" | wc -l`
|
||||
IS_TRIVIAL=`echo "$COMMIT_MSG" | grep -i "trivial" | wc -l`
|
||||
IS_COSMETICS=`echo "$COMMIT_MSG" | grep -i "cosmetics" | wc -l`
|
||||
IS_MAJOR=`echo "$COMMIT_MSG" | grep -i "major" | wc -l`
|
||||
if [ $IS_INTERMEDIATE -ne 0 -o $IS_TRIVIAL -ne 0 -o $IS_COSMETICS -ne 0 ]; then
|
||||
TO_TEST=0
|
||||
elif [ $IS_MAJOR -ne 0 ]; then
|
||||
TO_TEST=2
|
||||
fi
|
||||
if [ $TO_TEST -ne 0 -a -n "$PATHS_OF_INTEREST" ]; then
|
||||
NO_TEST=1
|
||||
for p in $PATHS_OF_INTEREST; do
|
||||
WHAT_CHANGED=`svn diff $SVN_PARAMS --summarize -c $CUR_REV $REPO_URL/$p`
|
||||
if [ -n "$WHAT_CHANGED" ]; then
|
||||
NO_TEST=0
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $NO_TEST -ne 0 ]; then
|
||||
TO_TEST=0
|
||||
fi
|
||||
fi
|
||||
if [ $TO_TEST -eq 1 ]; then
|
||||
echo $CUR_REV >>pending-revisions
|
||||
elif [ $TO_TEST -eq 2 ]; then
|
||||
echo $CUR_REV >>pending-revisions-full
|
||||
fi
|
||||
CUR_REV=$(( CUR_REV + 1 ))
|
||||
done
|
||||
|
||||
if [ $NEW_REV -gt 0 ]; then
|
||||
echo $NEW_REV >latest-seen-revision
|
||||
fi
|
||||
19
dvm/tools/tester/trunk/automation/dvm-tester.config
Normal file
19
dvm/tools/tester/trunk/automation/dvm-tester.config
Normal file
@@ -0,0 +1,19 @@
|
||||
PLATFORMS="Titan"
|
||||
|
||||
TEST_SUITE="test-suite"
|
||||
RECIPIENTS="krukov@keldysh.ru, bakhtin@keldysh.ru, pritmick@yandex.ru, alex-w900i@yandex.ru, valex@keldysh.ru, savol@keldysh.ru, socol@keldysh.ru, konov@keldysh.ru"
|
||||
|
||||
REPO_BASE_URL="http://svn.dvm-system.org/svn/dvmhrepo"
|
||||
REPO_USER="dvmhuser"
|
||||
REPO_PASS="dvmh2013"
|
||||
|
||||
LIST_SERVER="admdvm@svn.dvm-system.org"
|
||||
LIST_PATH="/home/admdvm/pending-revisions"
|
||||
|
||||
PUBL_BASE_URL="http://svn.dvm-system.org/dvm-test-results"
|
||||
PUBL_SERVER="admdvm@svn.dvm-system.org"
|
||||
PUBL_BASE_PATH="/var/www/html/dvm-test-results"
|
||||
PUBL_SUFFIX=
|
||||
|
||||
MAIL_SERVER="admdvm@svn.dvm-system.org"
|
||||
SENDMAIL="/usr/sbin/sendmail"
|
||||
73
dvm/tools/tester/trunk/automation/dvm-tester.sh
Normal file
73
dvm/tools/tester/trunk/automation/dvm-tester.sh
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
|
||||
unset CDPATH
|
||||
|
||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
||||
|
||||
MAX_INVOCATIONS=-1
|
||||
WAIT_INTERVAL=60
|
||||
WORKING_DIR=`pwd`
|
||||
|
||||
parse_params() {
|
||||
while [ -n "$1" ]; do
|
||||
if [ "$1" = "--once" ]; then
|
||||
MAX_INVOCATIONS=1
|
||||
elif [ "$1" = "--max-invocations" ]; then
|
||||
MAX_INVOCATIONS=$2
|
||||
shift
|
||||
elif [ "$1" = "--working-dir" ]; then
|
||||
WORKING_DIR="$2"
|
||||
shift
|
||||
elif [ "$1" = "--wait-interval" ]; then
|
||||
WAIT_INTERVAL=$2
|
||||
shift
|
||||
fi
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
parse_params "$@"
|
||||
|
||||
if [ -f "$WORKING_DIR/dvm-tester.config" ]; then
|
||||
. "$WORKING_DIR/dvm-tester.config"
|
||||
else
|
||||
echo "No dvm-tester.config found!" >& 2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $MAX_INVOCATIONS -lt 0 ]; then
|
||||
INF_MODE=1
|
||||
else
|
||||
INF_MODE=0
|
||||
fi
|
||||
|
||||
counter=0
|
||||
while [ $INF_MODE -ne 0 -o $counter -lt $MAX_INVOCATIONS ]; do
|
||||
while true; do
|
||||
if [ -f "$WORKING_DIR/dvm-tester.pause" ] && [ -n "$(cat "$WORKING_DIR/dvm-tester.pause")" ]; then
|
||||
echo "[$(date)] Paused explicitly (local)"
|
||||
elif [ -f "$MY_DIR/dvm-tester.pause" ] && [ -n "$(cat "$MY_DIR/dvm-tester.pause")" ]; then
|
||||
echo "[$(date)] Paused explicitly (global)"
|
||||
elif [ $(ps aux | grep task-processor.sh | wc -l) -gt 1 ]; then
|
||||
echo "[$(date)] Waiting existing task-processor.sh process to finish"
|
||||
else
|
||||
break
|
||||
fi
|
||||
sleep $WAIT_INTERVAL
|
||||
done
|
||||
echo "[$(date)] Attempting to get pending revision number"
|
||||
REV=`ssh $LIST_SERVER "head -n 1 $LIST_PATH && tail -n +2 $LIST_PATH >$LIST_PATH.tmp && mv $LIST_PATH.tmp $LIST_PATH"`
|
||||
echo "[$(date)] Got '$REV'"
|
||||
if [ -z "$REV" ]; then
|
||||
if [ $INF_MODE -ne 0 ]; then
|
||||
sleep $WAIT_INTERVAL
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
fi
|
||||
"$MY_DIR/test-revision.sh" --working-dir "$WORKING_DIR" --populate $REV
|
||||
counter=$(( counter + 1 ))
|
||||
done
|
||||
|
||||
echo "[$(date)] Exiting normally"
|
||||
38
dvm/tools/tester/trunk/automation/populate-report.sh
Normal file
38
dvm/tools/tester/trunk/automation/populate-report.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
SAVE_DIR=`pwd`
|
||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
||||
|
||||
RESULTS_DIR="$1"
|
||||
REV_NUMBER=$2
|
||||
|
||||
if [ -f "$SAVE_DIR/dvm-tester.config" ]; then
|
||||
. "$SAVE_DIR/dvm-tester.config"
|
||||
fi
|
||||
|
||||
if [ -z "$RECIPIENTS" ]; then
|
||||
RECIPIENTS="pritmick@yandex.ru"
|
||||
fi
|
||||
|
||||
PUBL_PATH="$PUBL_BASE_PATH/r${REV_NUMBER}${PUBL_SUFFIX}"
|
||||
COPY_PATHS="$PUBL_BASE_PATH/latest${PUBL_SUFFIX}"
|
||||
|
||||
ssh $PUBL_SERVER "mkdir -p \"$PUBL_PATH\""
|
||||
scp "$RESULTS_DIR/report/full-report.html" "$PUBL_SERVER:$PUBL_PATH/index.html"
|
||||
scp "$RESULTS_DIR/report/sources.tgz" "$PUBL_SERVER:$PUBL_PATH/sources.tgz"
|
||||
for p in $COPY_PATHS; do
|
||||
ssh $PUBL_SERVER "rm -rf \"$p\"; cp -r \"$PUBL_PATH\" \"$p\""
|
||||
done
|
||||
create_email()
|
||||
{
|
||||
echo "MIME-Version: 1.0"
|
||||
echo "Content-type: text/html;charset=UTF-8"
|
||||
echo "From: dvm@keldysh.ru"
|
||||
echo "To: $RECIPIENTS"
|
||||
echo "Subject: DVM tester: Test results for revision $REV_NUMBER"
|
||||
echo
|
||||
cat "$1"
|
||||
echo "."
|
||||
echo
|
||||
}
|
||||
create_email "$RESULTS_DIR/report/brief-report.html" | ssh $MAIL_SERVER "$SENDMAIL $RECIPIENTS"
|
||||
100
dvm/tools/tester/trunk/automation/test-revision.sh
Normal file
100
dvm/tools/tester/trunk/automation/test-revision.sh
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/bin/sh
|
||||
|
||||
unset CDPATH
|
||||
|
||||
MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd)
|
||||
|
||||
POPULATE_FLAG=0
|
||||
WORKING_DIR=`pwd`
|
||||
REV=
|
||||
|
||||
parse_params() {
|
||||
while [ -n "$1" ]; do
|
||||
if [ "$1" = "--working-dir" ]; then
|
||||
WORKING_DIR="$2"
|
||||
shift
|
||||
elif [ "$1" = "--populate" ]; then
|
||||
POPULATE_FLAG=1
|
||||
else
|
||||
REV=$1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
parse_params $@
|
||||
|
||||
if [ -z "$REV" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$WORKING_DIR/dvm-tester.config" ]; then
|
||||
. "$WORKING_DIR/dvm-tester.config"
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REPO_URL="$REPO_BASE_URL/dvm/releases/current-trunk"
|
||||
SVN_PARAMS="--username $REPO_USER --password $REPO_PASS --non-interactive"
|
||||
|
||||
update_test_suite() {
|
||||
if [ -e "$TEST_SUITE/.svn" ]; then
|
||||
( cd "$TEST_SUITE" && svn $SVN_PARAMS update )
|
||||
fi
|
||||
}
|
||||
|
||||
test_revision() {
|
||||
REV=$1
|
||||
echo "[$(date)] Testing revision $REV"
|
||||
SAVE_DIR=`pwd`
|
||||
WORK_DIR="$WORKING_DIR/dvm_r$REV"
|
||||
rm -rf "$WORK_DIR"
|
||||
svn co $SVN_PARAMS -r $REV "$REPO_URL" "$WORK_DIR" >/dev/null
|
||||
SVN_RES=$?
|
||||
while [ $SVN_RES -ne 0 ]; do
|
||||
sleep 1
|
||||
rm -rf "$WORK_DIR"
|
||||
svn co $SVN_PARAMS -r $REV "$REPO_URL" "$WORK_DIR" >/dev/null
|
||||
SVN_RES=$?
|
||||
done
|
||||
cd "$WORK_DIR"
|
||||
TMP_FILE=`mktemp`
|
||||
svn propget svn:externals >$TMP_FILE
|
||||
SVN_RES=$?
|
||||
while [ $SVN_RES -ne 0 ]; do
|
||||
svn propget svn:externals >$TMP_FILE
|
||||
SVN_RES=$?
|
||||
done
|
||||
CHILDREN=`cat $TMP_FILE | sed '/^$/d' | awk '{print $(NF)}'`
|
||||
rm $TMP_FILE
|
||||
for d in $CHILDREN; do
|
||||
cd "$WORK_DIR/$d"
|
||||
svn up $SVN_PARAMS -r $REV >/dev/null
|
||||
SVN_RES=$?
|
||||
while [ $SVN_RES -ne 0 ]; do
|
||||
sleep 1
|
||||
svn cleanup $SVN_PARAMS
|
||||
svn up $SVN_PARAMS -r $REV >/dev/null
|
||||
SVN_RES=$?
|
||||
done
|
||||
done
|
||||
rm -rf "$WORK_DIR.tmp"
|
||||
mv "$WORK_DIR" "$WORK_DIR.tmp"
|
||||
svn export "$WORK_DIR.tmp" "$WORK_DIR" >/dev/null
|
||||
SVN_RES=$?
|
||||
while [ $SVN_RES -ne 0 ]; do
|
||||
sleep 1
|
||||
rm -rf "$WORK_DIR"
|
||||
svn export "$WORK_DIR.tmp" "$WORK_DIR" >/dev/null
|
||||
SVN_RES=$?
|
||||
done
|
||||
rm -rf "$WORK_DIR.tmp"
|
||||
cd "$WORKING_DIR"
|
||||
POPULATE_FLAG=$POPULATE_FLAG "$MY_DIR/build-and-test.sh" "$WORK_DIR" $REV
|
||||
echo "[$(date)] Testing revision $REV done"
|
||||
# rm -rf "$WORK_DIR"
|
||||
cd "$SAVE_DIR"
|
||||
}
|
||||
|
||||
update_test_suite
|
||||
test_revision $REV
|
||||
Reference in New Issue
Block a user