| 1 | #! /bin/bash |
| 2 | |
| 3 | #************************************************************************* |
| 4 | # "run-tests" is free software: you can redistribute it and/or modify * |
| 5 | # it under the terms of the GNU Affero Public License as published by * |
| 6 | # the Free Software Foundation, either version 3 of the License, or * |
| 7 | # (at your option) any later version. * |
| 8 | # * |
| 9 | # "run-tests" is distributed in the hope that it will be useful, * |
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of * |
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
| 12 | # GNU Affero Public License for more details. * |
| 13 | # * |
| 14 | # You should have received a copy of the GNU Affero Public License * |
| 15 | # along with Edward. If not, see <http://www.gnu.org/licenses/>. * |
| 16 | # * |
| 17 | # Copyright (C) 2015 Andrew Engelbrecht (AGPLv3+) * |
| 18 | #************************************************************************* |
| 19 | |
| 20 | #TEST_TYPES="gpg-flatten flatten gpg-plain" |
| 21 | TEST_TYPES="gpg-flatten flatten" |
| 22 | |
| 23 | function _main { |
| 24 | |
| 25 | TEST_TYPES="$1" |
| 26 | SCRIPT_DIR="$(_get_script_dir)" |
| 27 | |
| 28 | _run_all_tests "$SCRIPT_DIR" "$TEST_TYPES" |
| 29 | } |
| 30 | |
| 31 | function _run_all_tests { |
| 32 | |
| 33 | SCRIPT_DIR="$1" |
| 34 | TEST_TYPES="$2" |
| 35 | |
| 36 | ERROR_COUNT="0" |
| 37 | for TYPE in $TEST_TYPES ; do |
| 38 | ERRORS="$(_run_test_type "$SCRIPT_DIR" "$TYPE")" |
| 39 | |
| 40 | ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERRORS")" |
| 41 | done |
| 42 | |
| 43 | if [ "$ERROR_COUNT" -ne "0" ] ; then |
| 44 | echo "*** $PROGNAME: FAILED test count: $ERROR_COUNT" >&2 |
| 45 | exit 1 |
| 46 | fi |
| 47 | |
| 48 | exit 0 |
| 49 | |
| 50 | } |
| 51 | |
| 52 | function _run_test_type { |
| 53 | |
| 54 | SCRIPT_DIR="$1" |
| 55 | TEST_TYPE="$2" |
| 56 | |
| 57 | TESTS_DIR="$SCRIPT_DIR/tests" |
| 58 | G_HOME="$TESTS_DIR/testgnupghome" |
| 59 | EDWARD="$SCRIPT_DIR/edward" |
| 60 | EDWARD_OPT="-p" |
| 61 | FLATTEN_MIME="$TESTS_DIR/flatten-mime" |
| 62 | |
| 63 | ERROR_COUNT="0" |
| 64 | for TEST_NAME in $(ls $TESTS_DIR/$TEST_TYPE-*.eml) ; do |
| 65 | |
| 66 | TEST_INPUT="$TEST_NAME" |
| 67 | TEST_OUTPUT="$(dirname "$TEST_NAME")/$(basename -s .eml "$TEST_NAME").out" |
| 68 | |
| 69 | if [ ! -f "$TEST_OUTPUT" ] ; then |
| 70 | echo "*** $PROGNAME: ERROR: File not found: $TEST_OUTPUT" >&2 |
| 71 | ERROR_COUNT="$(expr "$ERROR_COUNT" + 1 )" |
| 72 | continue |
| 73 | fi |
| 74 | |
| 75 | ERROR="$("_exec_$TEST_TYPE" "$TEST_NAME" "$G_HOME" "$EDWARD" "$EDWARD_OPT" "$FLATTEN_MIME" "$TEST_INPUT" "$TEST_OUTPUT")" |
| 76 | |
| 77 | ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERROR")" |
| 78 | |
| 79 | done |
| 80 | |
| 81 | echo "$ERROR_COUNT" |
| 82 | } |
| 83 | |
| 84 | function _exec_gpg-flatten { |
| 85 | |
| 86 | TEST_NAME="$1" |
| 87 | G_HOME="$2" |
| 88 | TEST_EXEC_1="$3" |
| 89 | TEST_EXEC_1_OPT="$4" |
| 90 | TEST_EXEC_2="$5" |
| 91 | TEST_INPUT="$6" |
| 92 | TEST_OUTPUT="$7" |
| 93 | |
| 94 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null | "$TEST_EXEC_2" )" |
| 95 | |
| 96 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" |
| 97 | |
| 98 | echo "$ERROR" |
| 99 | } |
| 100 | |
| 101 | function _exec_gpg-plain { |
| 102 | |
| 103 | TEST_NAME="$1" |
| 104 | G_HOME="$2" |
| 105 | TEST_EXEC_1="$3" |
| 106 | TEST_EXEC_1_OPT="$4" |
| 107 | TEST_INPUT="$6" |
| 108 | TEST_OUTPUT="$7" |
| 109 | |
| 110 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null )" |
| 111 | |
| 112 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" |
| 113 | |
| 114 | echo "$ERROR" |
| 115 | } |
| 116 | |
| 117 | function _exec_flatten { |
| 118 | |
| 119 | TEST_NAME="$1" |
| 120 | TEST_EXEC_1="$3" |
| 121 | TEST_EXEC_1_OPT="$4" |
| 122 | TEST_EXEC_2="$5" |
| 123 | TEST_INPUT="$6" |
| 124 | TEST_OUTPUT="$7" |
| 125 | |
| 126 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | "$TEST_EXEC_2" )" |
| 127 | |
| 128 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" |
| 129 | |
| 130 | echo "$ERROR" |
| 131 | } |
| 132 | |
| 133 | function _diff { |
| 134 | |
| 135 | TEST_NAME="$1" |
| 136 | TEST_OUT="$2" |
| 137 | PROGRAM_OUT="$3" |
| 138 | |
| 139 | OUT_DIFF="$(echo "$PROGRAM_OUT" | diff -u "$TEST_OUT" - )" |
| 140 | |
| 141 | if [ -n "$OUT_DIFF" ] ; then |
| 142 | echo "*** $PROGNAME: TEST $(basename "$TEST_NAME") FAILED! Output difference:" >&2 |
| 143 | echo "$OUT_DIFF" >&2 |
| 144 | |
| 145 | echo -n "1" |
| 146 | return |
| 147 | fi |
| 148 | |
| 149 | echo -n "0" |
| 150 | } |
| 151 | |
| 152 | function _get_script_dir { |
| 153 | |
| 154 | # gives the directory containing this script |
| 155 | # https://stackoverflow.com/questions/59895 |
| 156 | SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) |
| 157 | |
| 158 | echo -n "$SCRIPT_DIR" |
| 159 | } |
| 160 | |
| 161 | PROGNAME="$(basename $0)" |
| 162 | |
| 163 | _main "$TEST_TYPES" |
| 164 | |