#!/bin/sh ###################################################### # # Test rcvdist # ###################################################### set -e if test -z "${MH_OBJ_DIR}"; then srcdir=`dirname $0`/../.. MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR fi . "${MH_OBJ_DIR}/test/common.sh" setup_test # Use proper program, likely not the first one on PATH. rcvdist="${MH_LIBEXEC_DIR}/rcvdist" arith_eval 64000 + $$ % 1000 localport=$arith_val testname="${MH_TEST_DIR}/$$" check_exit '-eq 1' $rcvdist - expected=$MH_TEST_DIR/$$.expected actual=$MH_TEST_DIR/$$.actual # check -help start_test -help cat >$expected <&1 | sed '/^$/,$d' >"$actual" check "$expected" "$actual" # check -version start_test -version case `$rcvdist -v` in rcvdist\ --*) ;; * ) printf '%s: rcvdist -v generated unexpected output\n' "$0" >&2 failed=`expr ${failed:-0} + 1`;; esac # check unknown switch start_test 'unknown switch' run_test "$rcvdist -nonexistent" \ 'rcvdist: usage: rcvdist [switches] [switches for postproc] address ...' # check with no switches start_test 'no switches' run_test "$rcvdist" \ 'rcvdist: usage: rcvdist [switches] [switches for postproc] address ...' #### Use fakesmtp for this first test. # check post switch with argument start_test 'post switch with argument' cat > "${MH_TEST_DIR}/Mail/draft" < To: Somebody Else Subject: Test MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Date: Sun, 14 Jan 2018 12:00:00 -0500 This is a test. EOF cat > "${testname}.expected" < RCPT TO: DATA From: Mr Nobody To: Somebody Else Subject: Test MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Date: Resent-To: somebody@example.com Resent-From: Somebody Else Resent-Date: This is a test. . QUIT EOF cat > "$MH_TEST_DIR/Mail/rcvdistcomps" <<'EOF' %(lit)%(formataddr{addresses})\ %<(nonnull)%(void(width))%(putaddr Resent-To:)%> %(lit)%(formataddr{to})\ %<(nonnull)%(void(width))%(putaddr Resent-From:)\n%> EOF # Set this for the EHLO command echo "clientname: nosuchhost.example.com" >> ${MHMTSCONF} # $1: message draft file # $2: output filename for fakesmtp, i.e., the sent message test_post () { pid=`"${MH_OBJ_DIR}/test/fakesmtp" "$2" $localport` run_prog $rcvdist -form "$MH_TEST_DIR/Mail/rcvdistcomps" -server 127.0.0.1 -port $localport somebody@example.com <$1 sed -e 's/^Date:.*/Date:/' -e 's/^Resent-Date:.*/Resent-Date:/' "$2" > "$2".nodate rm -f "$2" check "$2".nodate "$3" } test_post "${MH_TEST_DIR}/Mail/draft" "${testname}.fakesmtp" "${testname}.expected" #### Use sendmail/pipe below to override default mts. mts_fakesendmail="${MHMTSCONF}-fakesendmail" sed -e 's/^mts:.*/mts: sendmail\/pipe/' "${MHMTSCONF}" > "$mts_fakesendmail" printf 'sendmail: %s/test/fakesendmail\n' "$srcdir" >>"$mts_fakesendmail" MHMTSCONF="$mts_fakesendmail" # arguments: rcvdist switches test_rcvdist () { run_prog $rcvdist "$@" # fakesendmail drops the message and any cc's into this mbox. mbox="${MH_TEST_DIR}"/Mail/fakesendmail.mbox inc -silent -file "$mbox" rm -f "$mbox" # It's hard to calculate the exact Date: header post is going to # use, so we'll just use sed to remove the actual date so we can # easily compare it against our "correct" output. sed -e 's/^Resent-Date:.*/Resent-Date:/' `mhpath last` > "$actual" check "$expected" "$actual" } # check with address start_test 'with address' cat > "$expected" < To: Some User Date: Fri, 29 Sep 2006 00:00:00 Message-Id: 1@test.nmh Subject: Testing message 1 Resent-To: recipient@example.com Resent-From: Some User Resent-Date: This is message number 1 EOF test_rcvdist recipient@example.com < "$MH_TEST_DIR/Mail/inbox/1" # check -form start_test -form cat > "$expected" < To: Some User Date: Fri, 29 Sep 2006 00:00:00 Message-Id: 2@test.nmh Subject: Testing message 2 Resent-To: recipient@example.com Resent-From: Some User Resent-Date: This is message number 2 EOF test_rcvdist -form "$MH_TEST_DIR/Mail/rcvdistcomps" recipient@example.com \ < "$MH_TEST_DIR/Mail/inbox/2" finish_test exit ${failed:-0}