updated expected test results; added more tests
[edward.git] / run-tests
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 NUM_TESTS=1
21 #TEST_TYPES="gpg-flatten flatten plain"
22 TEST_TYPES="gpg-flatten flatten"
23
24 function _main {
25
26 TEST_TYPES="$1"
27 SCRIPT_DIR="$(_get_script_dir)"
28
29 _run_all_tests "$SCRIPT_DIR" "$TEST_TYPES"
30 }
31
32 function _run_all_tests {
33
34 SCRIPT_DIR="$1"
35 TEST_TYPES="$2"
36
37 ERROR_COUNT="0"
38 for TYPE in $TEST_TYPES ; do
39 ERRORS="$(_run_test_type "$SCRIPT_DIR" "$TYPE")"
40
41 ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERRORS")"
42 done
43
44 if [ "$ERROR_COUNT" -ne "0" ] ; then
45 echo "*** $PROGNAME: FAILED test count: $ERROR_COUNT" >&2
46 exit 1
47 fi
48
49 exit 0
50
51 }
52
53 function _run_test_type {
54
55 SCRIPT_DIR="$1"
56 TEST_TYPE="$2"
57
58 TESTS_DIR="$SCRIPT_DIR/tests"
59 G_HOME="$TESTS_DIR/testgnupghome"
60 EDWARD="$SCRIPT_DIR/edward"
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" "$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_2="$4"
90 TEST_INPUT="$5"
91 TEST_OUTPUT="$6"
92
93 PROGRAM_OUT="$(time "$TEST_EXEC_1" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null | "$TEST_EXEC_2" )"
94
95 ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
96
97 echo "$ERROR"
98 }
99
100 function _exec_flatten {
101
102 TEST_NAME="$1"
103 TEST_EXEC_1="$3"
104 TEST_EXEC_2="$4"
105 TEST_INPUT="$5"
106 TEST_OUTPUT="$6"
107
108 PROGRAM_OUT="$(time "$TEST_EXEC_1" < "$TEST_INPUT" | "$TEST_EXEC_2" )"
109
110 ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
111
112 echo "$ERROR"
113 }
114
115 function _exec_plain {
116
117 TEST_NAME="$1"
118 TEST_EXEC_1="$3"
119 TEST_INPUT="$5"
120 TEST_OUTPUT="$6"
121
122 PROGRAM_OUT="$(time "$TEST_EXEC_1" < "$TEST_INPUT" )"
123
124 ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
125
126 echo "$ERROR"
127 }
128
129 function _diff {
130
131 TEST_NAME="$1"
132 TEST_OUT="$2"
133 PROGRAM_OUT="$3"
134
135 OUT_DIFF="$(echo "$PROGRAM_OUT" | diff -u "$TEST_OUT" - )"
136
137 if [ -n "$OUT_DIFF" ] ; then
138 echo "*** $PROGNAME: TEST $(basename "$TEST_NAME") FAILED! Output difference:" >&2
139 echo "$OUT_DIFF" >&2
140
141 echo -n "1"
142 return
143 fi
144
145 echo -n "0"
146 }
147
148 function _get_script_dir {
149
150 # gives the directory containing this script
151 # https://stackoverflow.com/questions/59895
152 SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
153
154 echo -n "$SCRIPT_DIR"
155 }
156
157 PROGNAME="$(basename $0)"
158
159 _main "$TEST_TYPES"
160