#! /bin/bash #************************************************************************* # "run-tests" is free software: you can redistribute it and/or modify * # it under the terms of the GNU Affero Public License as published by * # the Free Software Foundation, either version 3 of the License, or * # (at your option) any later version. * # * # "run-tests" is distributed in the hope that it will be useful, * # but WITHOUT ANY WARRANTY; without even the implied warranty of * # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * # GNU Affero Public License for more details. * # * # You should have received a copy of the GNU Affero Public License * # along with Edward. If not, see . * # * # Copyright (C) 2015 Andrew Engelbrecht (AGPLv3+) * #************************************************************************* #TEST_TYPES="gpg-flatten flatten gpg-plain" TEST_TYPES="gpg-flatten flatten" function _main { TEST_TYPES="$1" SCRIPT_DIR="$(_get_script_dir)" _run_all_tests "$SCRIPT_DIR" "$TEST_TYPES" } function _run_all_tests { SCRIPT_DIR="$1" TEST_TYPES="$2" ERROR_COUNT="0" for TYPE in $TEST_TYPES ; do ERRORS="$(_run_test_type "$SCRIPT_DIR" "$TYPE")" ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERRORS")" done if [ "$ERROR_COUNT" -ne "0" ] ; then echo "*** $PROGNAME: FAILED test count: $ERROR_COUNT" >&2 exit 1 fi exit 0 } function _run_test_type { SCRIPT_DIR="$1" TEST_TYPE="$2" TESTS_DIR="$SCRIPT_DIR/tests" G_HOME="$TESTS_DIR/testgnupghome" EDWARD="$SCRIPT_DIR/edward" EDWARD_OPT="-p" FLATTEN_MIME="$TESTS_DIR/flatten-mime" ERROR_COUNT="0" for TEST_NAME in $(ls $TESTS_DIR/$TEST_TYPE-*.eml) ; do TEST_INPUT="$TEST_NAME" TEST_OUTPUT="$(dirname "$TEST_NAME")/$(basename -s .eml "$TEST_NAME").out" if [ ! -f "$TEST_OUTPUT" ] ; then echo "*** $PROGNAME: ERROR: File not found: $TEST_OUTPUT" >&2 ERROR_COUNT="$(expr "$ERROR_COUNT" + 1 )" continue fi ERROR="$("_exec_$TEST_TYPE" "$TEST_NAME" "$G_HOME" "$EDWARD" "$EDWARD_OPT" "$FLATTEN_MIME" "$TEST_INPUT" "$TEST_OUTPUT")" ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERROR")" done echo "$ERROR_COUNT" } function _exec_gpg-flatten { TEST_NAME="$1" G_HOME="$2" TEST_EXEC_1="$3" TEST_EXEC_1_OPT="$4" TEST_EXEC_2="$5" TEST_INPUT="$6" TEST_OUTPUT="$7" PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null | "$TEST_EXEC_2" )" ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" echo "$ERROR" } function _exec_gpg-plain { TEST_NAME="$1" G_HOME="$2" TEST_EXEC_1="$3" TEST_EXEC_1_OPT="$4" TEST_INPUT="$6" TEST_OUTPUT="$7" PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null )" ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" echo "$ERROR" } function _exec_flatten { TEST_NAME="$1" TEST_EXEC_1="$3" TEST_EXEC_1_OPT="$4" TEST_EXEC_2="$5" TEST_INPUT="$6" TEST_OUTPUT="$7" PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | "$TEST_EXEC_2" )" ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" echo "$ERROR" } function _diff { TEST_NAME="$1" TEST_OUT="$2" PROGRAM_OUT="$3" OUT_DIFF="$(echo "$PROGRAM_OUT" | diff -u "$TEST_OUT" - )" if [ -n "$OUT_DIFF" ] ; then echo "*** $PROGNAME: TEST $(basename "$TEST_NAME") FAILED! Output difference:" >&2 echo "$OUT_DIFF" >&2 echo -n "1" return fi echo -n "0" } function _get_script_dir { # gives the directory containing this script # https://stackoverflow.com/questions/59895 SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) echo -n "$SCRIPT_DIR" } PROGNAME="$(basename $0)" _main "$TEST_TYPES"