2 #@ Usage: ./cc-test.sh [--check-only [s-nail-binary]]
9 MAKE
="${MAKE:-`command -v make`}"
10 awk=${awk:-`command -v awk`}
11 cat=${cat:-`command -v cat`}
12 # TODO cksum not fixated via mk-conf.sh, mk.mk should export variables!!
13 cksum=${cksum:-`command -v cksum`}
14 rm=${rm:-`command -v rm`}
15 sed=${sed:-`command -v sed`}
16 grep=${grep:-`command -v grep`}
20 export SNAIL CONF BODY MBOX MAKE
awk cat cksum rm sed grep
22 # NOTE! UnixWare 7.1.4 gives ISO-10646-Minimum-European-Subset for
23 # nl_langinfo(CODESET), then, so also overwrite ttycharset.
24 # (In addition this setup allows us to succeed on TinyCore 4.4 that has no
25 # other locales than C/POSIX installed by default!)
27 LC_ALL
=${LC} LANG
=${LC}
29 export LC_ALL LANG ttycharset
34 echo >&2 "Usage: ./cc-test.sh [--check-only [s-nail-binary]]"
40 [ "${1}" = --check-only ] || usage
41 [ ${#} -gt 2 ] && usage
42 [ ${#} -eq 2 ] && SNAIL
="${2}"
43 [ -x "${SNAIL}" ] || usage
48 # Test all configs TODO doesn't cover all *combinations*, stupid!
52 /^[[:space:]]*WANT_/ {
53 sub(/^[[:space:]]*/, "")
54 # This bails for UnixWare 7.1.4 awk(1), but preceeding = with \
55 # does not seem to be a compliant escape for =
57 $1 = substr($1, 1, index($1, "=") - 1)
58 if ($1 == "WANT_AUTOCC")
63 for (j = 0; j < i; ++j) {
64 for (k = 0; k < j; ++k)
66 for (k = j; k < i; ++k)
68 printf "WANT_AUTOCC=1\n"
71 for (k = 0; k < j; ++k)
73 for (k = j; k < i; ++k)
75 printf "WANT_AUTOCC=1\n"
80 printf "\n\n##########\n$c\n"
81 printf "\n\n##########\n$c\n" >&2
89 # Read mailbox $2, strip non-constant headers and MIME boundaries, query the
90 # cksum(1) of the resulting data and compare against the checksum $3
94 csum
="`${sed} -e '/^From /d' -e '/^Date: /d' \
95 -e '/^ boundary=/d' -e '/^--=_/d' < \"${f}\" | ${cksum}`";
96 if [ "${csum}" = "${s}" ]; then
100 printf 'error: checksum mismatch\n'
105 # Basic (easily testable) behaviour tests
109 printf 'echo +nix\nset folder=/\necho +nix\nset nofolder\necho +nix\nx' |
110 MAILRC
=/dev
/null
"${SNAIL}" -n -# -SPAGER="${cat}" > "${MBOX}"
111 cksum_test behave
:1 "${MBOX}" '4214021069 15'
113 # POSIX: setting *noprompt*/prompt='' shall prevent prompting TODO
114 # TODO for this to be testable we need a way to echo a variable
115 # TODO or to force echo of the prompt
119 FEAT
=`printf 'feat\n' | MAILRC=/dev/null "${SNAIL}" -n -#`
120 if { i
=${FEAT}; echo "${i}"; } |
${grep} -q DEBUG
&&
121 { i
=${FEAT}; echo "${i}"; } |
${grep} -q 'SSL/TLS' &&
122 { i
=${FEAT}; echo "${i}"; } |
${grep} -q 'S/MIME'; then
128 # Nestable conditions test
130 cat <<- '__EOT' | MAILRC=/dev/null "${SNAIL}" -n -# > "${MBOX}"
152 if $dietcurd == 'yoho'
157 if $dietcurd != 'yoho'
218 cksum_test behave
:2 "${MBOX}" '1909382116 98'
221 __behave_smime
() { # FIXME add test/ dir, unroll tests therein, regular enable!
222 echo WARNING
: behave_smime is yet debug only and not generalized
223 printf 'behave:s/mime: .. generating test key and certificate ..\n'
227 default_keyfile = keyfile.pem
228 distinguished_name = req_distinguished_name
229 attributes = req_attributes
233 [ req_distinguished_name ]
240 emailAddress = test@localhost
245 openssl req
-x509 -nodes -days 3650 -config t.conf \
246 -newkey rsa
:1024 -keyout tkey.pem
-out tcert.pem
>/dev
/null
2>&1
248 cat tkey.pem tcert.pem
> tpair.pem
250 printf "behave:s/mime:sign/verify: "
252 MAILRC
=/dev
/null .
/s-nail
-n# \
253 -Ssmime-ca-file=tcert.pem
-Ssmime-sign-cert=tpair.pem \
254 -Ssmime-sign -Sfrom=test@localhost \
255 -s 'S/MIME test' .
/VERIFY
257 printf 'verify\nx\n' |
258 MAILRC
=/dev
/null .
/s-nail
-n# \
259 -Ssmime-ca-file=tcert.pem
-Ssmime-sign-cert=tpair.pem \
260 -Ssmime-sign -Sfrom=test@localhost \
261 -Sbatch-exit-on-error -R \
262 -f .
/VERIFY
>/dev
/null
2>&1
263 if [ $?
-eq 0 ]; then
267 printf 'error: verification failed\n'
268 rm -f .
/VERIFY tkey.pem tcert.pem tpair.pem
273 printf "behave:s/mime:encrypt/decrypt: "
274 cat <<-_EOT > tsendmail.sh
276 (echo 'From S-Postman Thu May 10 20:40:54 2012' && cat) > ./ENCRYPT
278 chmod 0755 tsendmail.sh
281 MAILRC
=/dev
/null .
/s-nail
-n# \
282 -Ssmime-force-encryption \
283 -Ssmime-encrypt-recei@ver.com
=tpair.pem \
284 -Ssendmail=.
/tsendmail.sh \
285 -Ssmime-ca-file=tcert.pem
-Ssmime-sign-cert=tpair.pem \
286 -Ssmime-sign -Sfrom=test@localhost \
287 -s 'S/MIME test' recei@ver.com
289 printf 'decrypt ./DECRYPT\nfi ./DECRYPT\nverify\nx\n' |
290 MAILRC
=/dev
/null .
/s-nail
-n# \
291 -Ssmime-force-encryption \
292 -Ssmime-encrypt-recei@ver.com
=tpair.pem \
293 -Ssendmail=.
/tsendmail.sh \
294 -Ssmime-ca-file=tcert.pem
-Ssmime-sign-cert=tpair.pem \
295 -Ssmime-sign -Sfrom=test@localhost \
296 -Sbatch-exit-on-error -R \
297 -f .
/ENCRYPT
>/dev
/null
2>&1
298 if [ $?
-eq 0 ]; then
302 printf 'error: decryption+verification failed\n'
304 rm -f .
/tsendmail.sh .
/ENCRYPT .
/DECRYPT tkey.pem tcert.pem tpair.pem
308 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
309 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
310 # Note we unfortunately need to place some statements without proper
311 # indentation because of continuation problems
313 ${rm} -f "${BODY}" "${MBOX}"
315 # MIME CTE (QP) stress message body
317 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
318 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
319 "wasde willst
, gelle
, gelle
, gelle
, gelle
, gelle.
\r\n"\
320 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
\r\n"\
321 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1\r\n"\
322 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12\r\n"\
323 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123\r\n"\
324 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1234\r\n"\
325 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12345\r\n"\
326 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123456\r\n"\
327 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
1234567\r\n"\
328 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
12345678\r\n"\
329 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst
123456789\r\n"\
330 "Unn ausserdem habe ich trailing SP
/HT
/SP
/HT whitespace
\r\n"\
331 "Unn ausserdem habe ich trailing HT
/SP
/HT
/SP whitespace
\r\n"\
332 "auf den zeilen vorher.
\r\n"\
333 "From am Zeilenbeginn und From der Mitte gibt es auch.
\r\n"\
335 "Die letzte Zeile war nur ein Punkt.
\r\n"\
337 "Das waren deren zwei.
\r\n"\
339 "Die letzte Zeile war ein Leerschritt.
\n"\
340 "=VIER
= EQUAL SIGNS
=ON A LINE
=\r\n"\
343 "Die letzte Zeile war nur ein Punkt
, mit Unix Zeilenende.
\n"\
345 "Das waren deren zwei. ditto.
\n"\
347 "Unn ausseerdem habe ich trailing SP
/HT
/SP
/HT whitespace
\n"\
348 "Unn ausseerdem habe ich trailing HT
/SP
/HT
/SP whitespace
\n"\
349 "auf den zeilen vorher.
\n"\
351 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende.
\n"\
352 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.1"\
354 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
356 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
358 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
360 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
362 "Ich bin eine ziemlich lange
, steile
, scharfe Zeile mit Unix Zeilenende
.12"\
364 "=VIER
= EQUAL SIGNS
=ON A LINE
=\n"\
366 "Die letzte Zeile war ein Leerschritt.
\n"\
370 # MIME CTE (QP) stress message subject
371 SUB='Äbrä Kä?dä=brö Fü?di=bus? '\
372 'adadaddsssssssddddddddddddddddddddd'\
373 'ddddddddddddddddddddddddddddddddddd'\
374 'ddddddddddddddddddddddddddddddddddd'\
375 'dddddddddddddddddddd Hallelulja? Od'\
376 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
377 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
378 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
379 'fffffffffffffffffffffffffffffffffff'\
380 'fffffffffffffffffffff ggggggggggggg'\
381 'ggggggggggggggggggggggggggggggggggg'\
382 'ggggggggggggggggggggggggggggggggggg'\
383 'ggggggggggggggggggggggggggggggggggg'\
386 # Three tests for MIME-CTE and (a bit) content classification.
387 # At the same time testing -q FILE, < FILE and -t FILE
389 < "${BODY}" MAILRC=/dev/null \
390 "${SNAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" "${MBOX}"
391 cksum_test content:1 "${MBOX}" '2606934084 5649'
394 < /dev/null MAILRC=/dev/null \
395 "${SNAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" \
396 -q "${BODY}" "${MBOX}"
397 cksum_test content:2 "${MBOX}" '2606934084 5649'
400 ( echo "To
: ${MBOX}" && echo "Subject
: ${SUB}" && echo &&
402 ) | MAILRC=/dev/null "${SNAIL}" -n -Sstealthmua -a "${BODY}" -t
403 cksum_test content:3 "${MBOX}" '799758423 5648'
405 # Test for [260e19d]. Juergen Daubert.
407 echo body | MAILRC=/dev/null "${SNAIL}" -n -Sstealthmua "${MBOX}"
408 cksum_test content:4 "${MBOX}" '506144051 104'
410 # Sending of multiple mails in a single invocation
412 ( printf "m
${MBOX}\n~s subject1
\nE
-Mail Körper
1\n.
\n" &&
413 printf "m
${MBOX}\n~s subject2
\nEmail body
2\n.
\n" &&
415 ) | MAILRC=/dev/null "${SNAIL}" -n -# -Sstealthmua
416 cksum_test content:5 "${MBOX}" '2028749685 277'
418 ${rm} -f "${BODY}" "${MBOX}"
426 if [ -z "${CHECK_ONLY}" ]; then
432 [ ${ESTAT} -eq 0 ] && echo Ok ||
echo >&2 'Errors occurred'
435 # vim:set fenc=utf8:s-it-mode