148 lines
4.9 KiB
Bash
148 lines
4.9 KiB
Bash
|
#!/bin/sh
|
||
|
#
|
||
|
# Copyright (c) 02005 sense.lab <senselab@systemausfall.org>
|
||
|
#
|
||
|
# License: This script is distributed under the terms of version 2
|
||
|
# of the GNU GPL. See the LICENSE file included with the package.
|
||
|
#
|
||
|
# $Id$
|
||
|
#
|
||
|
# do a validation
|
||
|
#
|
||
|
# use "--help" for a list of possible actions
|
||
|
#
|
||
|
|
||
|
set -eu
|
||
|
|
||
|
# include common functions and settings
|
||
|
source $(dirname $0)/common.sh.inc
|
||
|
|
||
|
# extract confirmation text from language file
|
||
|
confirmtext=$(grep "\<ConfirmInit\>" "$TEMPLATE_DIR/usr/share/cryptobox/lang/${VALIDATE_LANGUAGE}.hdf" | sed 's/[^=]*=[^a-zA-Z]*\(.*\)$/\1/; s/ /%20/g; s/!/%21/g; s/,/%2C/g')
|
||
|
|
||
|
##################### some functions ########################
|
||
|
|
||
|
function do_single()
|
||
|
# Parameter: "test case dir" "output directory for results"
|
||
|
{
|
||
|
local TESTNAME=$(basename $1)
|
||
|
# replace IPs and ports in the curl-file by local settings
|
||
|
cat "$1/input.curl" | substitute_constants | curl --insecure --silent --output "${2}/${TESTNAME}.html" --config -
|
||
|
# remove possible refresh-redirect
|
||
|
sed -i 's/<meta http-equiv="refresh"[^>]*>//g' "${2}/${TESTNAME}.html"
|
||
|
# there is no status in certain cases - e.g. for error 404
|
||
|
if [ -e "${2}/${TESTNAME}.html" ]
|
||
|
then sed "1,/CBOX-STATUS-begin/d; /CBOX-STATUS-end/,\$d" "${2}/${TESTNAME}.html" >"${2}/${TESTNAME}.status"
|
||
|
# the diff option "-B" is required, because the status output of
|
||
|
# the cryptobox.pl script contains some blank lines
|
||
|
cat "$1/output" | substitute_constants | diff -NB - "${2}/${TESTNAME}.status" | sed 's/</\</g; s/>/\>/g' >"${2}/${TESTNAME}.diff" || true
|
||
|
rm "${2}/${TESTNAME}.status"
|
||
|
fi
|
||
|
cp "$1/description" "${2}/${TESTNAME}.desc"
|
||
|
# sleep, if a file called 'delay' exists
|
||
|
[ -e "$1/delay" ] && sleep "$(<$1/delay)"
|
||
|
true
|
||
|
}
|
||
|
|
||
|
|
||
|
function do_series()
|
||
|
# parameter: name of the test case
|
||
|
{
|
||
|
[ -d "$VALIDATE_REPORT_DIR/$1" ] && rm -r "$VALIDATE_REPORT_DIR/$1"
|
||
|
mkdir -p "$VALIDATE_REPORT_DIR/$1"
|
||
|
find "$VALIDATE_TEST_CASES_DIR/$1" -maxdepth 1 -mindepth 1 -type d | grep -v "/\.[^/]*$" | sort | while read a
|
||
|
do do_single "$a" "$VALIDATE_REPORT_DIR/$1"
|
||
|
done
|
||
|
create_summary "$1" >"$VALIDATE_REPORT_DIR/summary-$1.html"
|
||
|
}
|
||
|
|
||
|
|
||
|
function create_summary()
|
||
|
# parameter: name of test series
|
||
|
{
|
||
|
cat "$VALIDATE_SUMMARY_TEMPLATE_DIR/header"
|
||
|
find "$VALIDATE_REPORT_DIR/$1" -maxdepth 1 -type f -name \*.desc | sort | while read a
|
||
|
do TESTNAME=$(basename ${a%.desc})
|
||
|
TESTDESCRIPTION=$(cat $a)
|
||
|
sed "s#_TESTSERIES_#$1#g; s#_TESTNAME_#$TESTNAME#g; s/_TESTDESCRIPTION_/$TESTDESCRIPTION/" "$VALIDATE_SUMMARY_TEMPLATE_DIR/single_header"
|
||
|
local DIFF_FILE=${a%.desc}.diff
|
||
|
if [ -s "$DIFF_FILE" ]
|
||
|
then cat "$VALIDATE_SUMMARY_TEMPLATE_DIR/result-error"
|
||
|
sed 's#$#<br/>#' "$DIFF_FILE"
|
||
|
else cat "$VALIDATE_SUMMARY_TEMPLATE_DIR/result-ok"
|
||
|
echo "no differences found"
|
||
|
# remove empty diff
|
||
|
[ -e "$DIFF_FILE" ] && rm "$DIFF_FILE"
|
||
|
fi
|
||
|
cat "$VALIDATE_SUMMARY_TEMPLATE_DIR/single_footer"
|
||
|
# remove description file
|
||
|
rm "$a"
|
||
|
done
|
||
|
cat "$VALIDATE_SUMMARY_TEMPLATE_DIR/footer"
|
||
|
}
|
||
|
|
||
|
|
||
|
function import_style()
|
||
|
# get the stylesheet file and images
|
||
|
# change the stylesheet link
|
||
|
{
|
||
|
[ -d "$VALIDATE_REPORT_DIR/cryptobox-misc" ] && rm -r "$VALIDATE_REPORT_DIR/cryptobox-misc"
|
||
|
mkdir -p "$VALIDATE_REPORT_DIR/cryptobox-misc"
|
||
|
wget -q -O "$VALIDATE_REPORT_DIR/cryptobox-misc/cryptobox.css" http://$VALIDATE_HOST_IP_DEFAULT/cryptobox-misc/cryptobox.css
|
||
|
# extract image file names
|
||
|
grep "url(" "$VALIDATE_REPORT_DIR/cryptobox.css" | sed 's#^.*url(\(.*\)).*$#\1#' | while read a
|
||
|
do wget -q -O "$VALIDATE_REPORT_DIR/cryptobox-misc/$a" "http://$VALIDATE_HOST_IP_DEFAULT/cryptobox-misc/$a"
|
||
|
done
|
||
|
|
||
|
# change the stylesheet link in every html file in REPORT_DIR
|
||
|
find "$VALIDATE_REPORT_DIR" -type f -name \*.html | while read a
|
||
|
do sed -i '/stylesheet/s#href=\"/cryptobox-misc/cryptobox.css\"#href=\"../cryptobox-misc/cryptobox.css\"#g' "$a"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
|
||
|
function substitute_constants()
|
||
|
{
|
||
|
sed "s/_HOST_IP_DEFAULT_/$VALIDATE_HOST_IP_DEFAULT/g; \
|
||
|
s/_HOST_IP_CHANGED_/$VALIDATE_HOST_IP_CHANGED/g; \
|
||
|
s/_IFACE_LANG_/$VALIDATE_LANGUAGE/g;
|
||
|
s/_CONFIRM_TEXT_/$confirmtext/g"
|
||
|
}
|
||
|
|
||
|
##################### main ###########################
|
||
|
|
||
|
# do all checks, if nothing is specified
|
||
|
ACTION="check_all"
|
||
|
[ $# -gt 0 ] && ACTION=$1
|
||
|
|
||
|
case "$ACTION" in
|
||
|
list )
|
||
|
find "$VALIDATE_TEST_CASES_DIR" -maxdepth 1 -mindepth 1 -type d | grep -v "/\.[^/]*$" | sort | while read a
|
||
|
do echo $(basename "$a")
|
||
|
done
|
||
|
;;
|
||
|
check )
|
||
|
[ $# -ne 2 ] && error_die 1 "Syntax: $(basename $0) check NAME"
|
||
|
case_dir="$VALIDATE_TEST_CASES_DIR/$2"
|
||
|
[ ! -d "$case_dir" ] && error_die 2 "the test case was not found ($case_dir)!"
|
||
|
do_series "$2"
|
||
|
import_style
|
||
|
;;
|
||
|
check_all )
|
||
|
# default action
|
||
|
"$0" list | sort | while read a
|
||
|
do echo -n "Validating $a ..."
|
||
|
"$0" check "$a"
|
||
|
echo
|
||
|
done
|
||
|
;;
|
||
|
* )
|
||
|
echo "Syntax of $(basename $0)"
|
||
|
echo -e "\t check_all \t - execute all test cases [default]"
|
||
|
echo -e "\t check NAME \t - execute a test case"
|
||
|
echo -e "\t list \t\t - show a list of available test cases"
|
||
|
echo -e "\t help \t\t - this syntax information"
|
||
|
echo
|
||
|
;;
|
||
|
esac
|