Commit | Line | Data |
---|---|---|
341bb4d5 AE |
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 | ||
9fee361e | 20 | #TEST_TYPES="gpg-flatten flatten gpg-plain" |
e5dd6f23 | 21 | TEST_TYPES="gpg-flatten flatten" |
341bb4d5 | 22 | |
a3c531c3 | 23 | function _main { |
341bb4d5 | 24 | |
2c5e4c3e | 25 | TEST_TYPES="$1" |
9bd7bfbc | 26 | SCRIPT_DIR="$(_get_script_dir)" |
9bd7bfbc | 27 | |
2c5e4c3e AE |
28 | _run_all_tests "$SCRIPT_DIR" "$TEST_TYPES" |
29 | } | |
a3c531c3 | 30 | |
2c5e4c3e | 31 | function _run_all_tests { |
a3c531c3 | 32 | |
2c5e4c3e AE |
33 | SCRIPT_DIR="$1" |
34 | TEST_TYPES="$2" | |
a3c531c3 | 35 | |
2c5e4c3e AE |
36 | ERROR_COUNT="0" |
37 | for TYPE in $TEST_TYPES ; do | |
38 | ERRORS="$(_run_test_type "$SCRIPT_DIR" "$TYPE")" | |
9bd7bfbc | 39 | |
2c5e4c3e | 40 | ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERRORS")" |
a3c531c3 AE |
41 | done |
42 | ||
9bd7bfbc | 43 | if [ "$ERROR_COUNT" -ne "0" ] ; then |
f4eb9a82 | 44 | echo "*** $PROGNAME: FAILED test count: $ERROR_COUNT" >&2 |
a3c531c3 AE |
45 | exit 1 |
46 | fi | |
47 | ||
48 | exit 0 | |
49 | ||
50 | } | |
51 | ||
2c5e4c3e AE |
52 | function _run_test_type { |
53 | ||
54 | SCRIPT_DIR="$1" | |
55 | TEST_TYPE="$2" | |
a3c531c3 | 56 | |
2c5e4c3e AE |
57 | TESTS_DIR="$SCRIPT_DIR/tests" |
58 | G_HOME="$TESTS_DIR/testgnupghome" | |
59 | EDWARD="$SCRIPT_DIR/edward" | |
60ccbaf4 | 60 | EDWARD_OPT="-p" |
2c5e4c3e AE |
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 | ||
60ccbaf4 | 75 | ERROR="$("_exec_$TEST_TYPE" "$TEST_NAME" "$G_HOME" "$EDWARD" "$EDWARD_OPT" "$FLATTEN_MIME" "$TEST_INPUT" "$TEST_OUTPUT")" |
2c5e4c3e AE |
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" | |
33ecbb5e AE |
87 | G_HOME="$2" |
88 | TEST_EXEC_1="$3" | |
60ccbaf4 AE |
89 | TEST_EXEC_1_OPT="$4" |
90 | TEST_EXEC_2="$5" | |
91 | TEST_INPUT="$6" | |
92 | TEST_OUTPUT="$7" | |
a3c531c3 | 93 | |
60ccbaf4 | 94 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null | "$TEST_EXEC_2" )" |
33ecbb5e | 95 | |
2c5e4c3e AE |
96 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" |
97 | ||
98 | echo "$ERROR" | |
99 | } | |
100 | ||
9fee361e | 101 | function _exec_gpg-plain { |
2c5e4c3e AE |
102 | |
103 | TEST_NAME="$1" | |
9fee361e | 104 | G_HOME="$2" |
2c5e4c3e | 105 | TEST_EXEC_1="$3" |
60ccbaf4 | 106 | TEST_EXEC_1_OPT="$4" |
60ccbaf4 AE |
107 | TEST_INPUT="$6" |
108 | TEST_OUTPUT="$7" | |
2c5e4c3e | 109 | |
9fee361e | 110 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null )" |
2c5e4c3e AE |
111 | |
112 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" | |
33ecbb5e AE |
113 | |
114 | echo "$ERROR" | |
2c5e4c3e AE |
115 | } |
116 | ||
9fee361e | 117 | function _exec_flatten { |
2c5e4c3e AE |
118 | |
119 | TEST_NAME="$1" | |
120 | TEST_EXEC_1="$3" | |
60ccbaf4 | 121 | TEST_EXEC_1_OPT="$4" |
9fee361e | 122 | TEST_EXEC_2="$5" |
60ccbaf4 AE |
123 | TEST_INPUT="$6" |
124 | TEST_OUTPUT="$7" | |
2c5e4c3e | 125 | |
9fee361e | 126 | PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | "$TEST_EXEC_2" )" |
2c5e4c3e AE |
127 | |
128 | ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")" | |
33ecbb5e | 129 | |
2c5e4c3e | 130 | echo "$ERROR" |
33ecbb5e AE |
131 | } |
132 | ||
133 | function _diff { | |
134 | ||
2c5e4c3e | 135 | TEST_NAME="$1" |
33ecbb5e AE |
136 | TEST_OUT="$2" |
137 | PROGRAM_OUT="$3" | |
138 | ||
139 | OUT_DIFF="$(echo "$PROGRAM_OUT" | diff -u "$TEST_OUT" - )" | |
a3c531c3 AE |
140 | |
141 | if [ -n "$OUT_DIFF" ] ; then | |
2c5e4c3e | 142 | echo "*** $PROGNAME: TEST $(basename "$TEST_NAME") FAILED! Output difference:" >&2 |
a3c531c3 AE |
143 | echo "$OUT_DIFF" >&2 |
144 | ||
33ecbb5e AE |
145 | echo -n "1" |
146 | return | |
a3c531c3 AE |
147 | fi |
148 | ||
33ecbb5e | 149 | echo -n "0" |
a3c531c3 AE |
150 | } |
151 | ||
9bd7bfbc AE |
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" | |
9bd7bfbc AE |
159 | } |
160 | ||
2c5e4c3e AE |
161 | PROGNAME="$(basename $0)" |
162 | ||
163 | _main "$TEST_TYPES" | |
341bb4d5 | 164 |