2 #@ Usage: ./cc-test.sh [--check-only [s-nail-binary]]
11 cksum=`command -v cksum`
12 MAKE
="${MAKE:-`command -v make`}"
18 export SNAIL CONF BODY MBOX
awk cat cksum MAKE
rm sed
20 # NOTE! UnixWare 7.1.4 gives ISO-10646-Minimum-European-Subset for
21 # nl_langinfo(CODESET), then, so also overwrite ttycharset.
22 # (In addition this setup allows us to succeed on TinyCore 4.4 that has no
23 # other locales than C/POSIX installed by default!)
25 LC_ALL
=${LC} LANG
=${LC}
27 export LC_ALL LANG ttycharset
32 echo >&2 "Usage: ./cc-test.sh [--check-only [s-nail-binary]]"
38 [ "${1}" = --check-only ] || usage
39 [ ${#} -gt 2 ] && usage
40 [ ${#} -eq 2 ] && SNAIL
="${2}"
41 [ -x "${SNAIL}" ] || usage
46 # Test all configs TODO doesn't cover all *combinations*, stupid!
50 /^[[:space:]]*WANT_/ {
51 sub(/^[[:space:]]*/, "")
56 for (j = 0; j < i; ++j) {
57 for (k = 0; k < j; ++k)
59 for (k = j; k < i; ++k)
62 for (k = 0; k < j; ++k)
64 for (k = j; k < i; ++k)
70 printf "\n\n##########\n$c\n"
71 printf "\n\n##########\n$c\n" >&2
78 # Read mailbox $2, strip non-constant headers and MIME boundaries, query the
79 # cksum(1) of the resulting data and compare against the checksum $3
83 csum
="`${sed} -e '/^From /d' -e '/^Date: /d' \
84 -e '/^ boundary=/d' -e '/^--=_/d' < \"${f}\" | ${cksum}`";
85 if [ "${csum}" = "${s}" ]; then
89 printf 'error: checksum mismatch\n'
94 # Basic (easily testable) behaviour tests
98 printf 'echo +nix\nset folder=/\necho +nix\nset nofolder\necho +nix\nx' |
99 MAILRC
=/dev
/null
"${SNAIL}" -n -# -SPAGER="${cat}" > "${MBOX}"
100 cksum_test behave
:1 "${MBOX}" '4214021069 15'
102 # POSIX: setting *noprompt*/prompt='' shall prevent prompting TODO
103 # TODO for this to be testable we need a way to echo a variable
104 # TODO or to force echo of the prompt
108 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
109 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
110 # Note we unfortunately need to place some statements without proper
111 # indentation because of continuation problems
113 ${rm} -f "${BODY}" "${MBOX}"
115 # MIME CTE (QP) stress message body
117 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
118 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
119 "wasde willst
, gelle
, gelle
, gelle
, gelle
, gelle.
\r\n"\
120 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
\r\n"\
121 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1\r\n"\
122 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12\r\n"\
123 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123\r\n"\
124 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1234\r\n"\
125 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12345\r\n"\
126 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123456\r\n"\
127 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1234567\r\n"\
128 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12345678\r\n"\
129 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123456789\r\n"\
130 "Unn ausserdem habe ich trailing SP
/HT
/SP
/HT whitespace
\r\n"\
131 "Unn ausserdem habe ich trailing HT
/SP
/HT
/SP whitespace
\r\n"\
132 "auf den zeilen vorher.
\r\n"\
133 "From am Zeilenbeginn und From der Mitte gibt es auch.
\r\n"\
135 "Die letzte Zeile war nur ein Punkt.
\r\n"\
137 "Das waren deren zwei.
\r\n"\
139 "Die letzte Zeile war ein Leerschritt.
\n"\
140 "=VIER
= EQUAL SIGNS
=ON A LINE
=\r\n"\
143 "Die letzte Zeile war nur ein Punkt
, mit Unix Zeilenende.
\n"\
145 "Das waren deren zwei. ditto.
\n"\
147 "Unn ausseerdem habe ich trailing SP
/HT
/SP
/HT whitespace
\n"\
148 "Unn ausseerdem habe ich trailing HT
/SP
/HT
/SP whitespace
\n"\
149 "auf den zeilen vorher.
\n"\
151 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende.
\n"\
152 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.1"\
154 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
156 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
158 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
160 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
162 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
164 "=VIER
= EQUAL SIGNS
=ON A LINE
=\n"\
166 "Die letzte Zeile war ein Leerschritt.
\n"\
170 # MIME CTE (QP) stress message subject
171 SUB='Äbrä Kä?dä=brö Fü?di=bus? '\
172 'adadaddsssssssddddddddddddddddddddd'\
173 'ddddddddddddddddddddddddddddddddddd'\
174 'ddddddddddddddddddddddddddddddddddd'\
175 'dddddddddddddddddddd Hallelulja? Od'\
176 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
177 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
178 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
179 'fffffffffffffffffffffffffffffffffff'\
180 'fffffffffffffffffffff ggggggggggggg'\
181 'ggggggggggggggggggggggggggggggggggg'\
182 'ggggggggggggggggggggggggggggggggggg'\
183 'ggggggggggggggggggggggggggggggggggg'\
186 # Three tests for MIME-CTE and (a bit) content classification.
187 # At the same time testing -q FILE, < FILE and -t FILE
189 < "${BODY}" MAILRC=/dev/null \
190 "${SNAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" "${MBOX}"
191 cksum_test content:1 "${MBOX}" '2606934084 5649'
194 < /dev/null MAILRC=/dev/null \
195 "${SNAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" \
196 -q "${BODY}" "${MBOX}"
197 cksum_test content:2 "${MBOX}" '2606934084 5649'
200 ( echo "To
: ${MBOX}" && echo "Subject
: ${SUB}" && echo &&
202 ) | MAILRC=/dev/null "${SNAIL}" -n -Sstealthmua -a "${BODY}" -t
203 cksum_test content:3 "${MBOX}" '799758423 5648'
205 # Test for [260e19d]. Juergen Daubert.
207 echo body | MAILRC=/dev/null "${SNAIL}" -n -Sstealthmua "${MBOX}"
208 cksum_test content:4 "${MBOX}" '506144051 104'
210 # Sending of multiple mails in a single invocation
212 ( printf "m
${MBOX}\n~s subject1
\nE
-Mail Körper
1\n.
\n" &&
213 printf "m
${MBOX}\n~s subject2
\nEmail body
2\n.
\n" &&
215 ) | MAILRC=/dev/null "${SNAIL}" -n -# -Sstealthmua
216 cksum_test content:5 "${MBOX}" '2028749685 277'
218 ${rm} -f "${BODY}" "${MBOX}"
221 if [ -z "${CHECK_ONLY}" ]; then
223 printf "\n\n######## STARTING TESTS ########\n\n"
230 [ ${ESTAT} -eq 0 ] && echo Ok ||
echo >&2 'Errors occurred'
231 [ -n "${CHECK_ONLY}" ] ||
"${MAKE}" distclean
234 # vim:set fenc=utf8:s-it-mode