added tests

This commit is contained in:
ALEXks
2024-05-02 17:08:55 +03:00
parent d0d629eeb8
commit 94570a414b
431 changed files with 248194 additions and 1 deletions

View 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"

View 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

View 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"

View 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"

View 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"

View 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