#!/bin/sh
################################################################################
##										##
## Copyright (c) International Business Machines  Corp., 2001			##
##										##
## This program is free software;  you can redistribute it and#or modify	##
## it under the terms of the GNU General Public License as published by	   	##
## the Free Software Foundation; either version 2 of the License, or		##
## (at your option) any later version.						##
##										##
## This program is distributed in the hope that it will be useful, but		##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY	##
## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License	##
## for more details.								##
##										##
## You should have received a copy of the GNU General Public License		##
## along with this program;  if not, write to the Free Software			##
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA	##
##										##
################################################################################
#
# File :		mail_tests.sh
#
# Description:  Tests basic functions of mail system. The aim of the test is to
#		make sure that certain basic functionality of mail is expected
#		to work as per man page. There are 4 - 5 operations that are
#		done on a regular basis wrt mail. ie. 
#
#		   mail sent to an user@domain - received by that user@domain
#		   mail is sent to nosuchuser@domain - mail delivery failure
#		   mail is sent to user@nosuchdomain - mail delivery failure
#		   mail to user1@domain and cc user2@domain - mail rec by both
#		   mail to user1@domain and bcc user2@domain - mail rec by both
#
# Author:	  Manoj Iyer, manjo@mail.utexas.edu
#
# History:	  Jan 07 2003 - Created - Manoj Iyer.
#		  Jan 09 2003 - Added Test #2 #3 #4 and #5.
#		  Jan 10 2002 - Fixed various bugs I had introduced in the test.
#			      - Added SETUP and CLEANUP sections 
#

export TST_TOTAL=5

LTPTMP=${TMPBASE:-/tmp}

if [ -z "$LTPBIN" -a -z "$LTPROOT" ]; then
	LTPBIN=./
else
	LTPBIN=$LTPROOT/testcases/bin
fi

isHeirloomMail=0
checkHeirloomMail()
{
	if [ $# -eq 1 -a -f $1 ] && grep "Heirloom" $1; then
		isHeirloomMail=1
	fi
}

RC=0
export TCID=mail_tests::setup
export TST_COUNT=1

if ! type mail > /dev/null 2>&1; then
	tst_resm TCONF "mail isn't installed"
	exit 0
fi

cat > $LTPTMP/tst_mail.in <<EOF
This is a test email.
EOF

if [ $? -ne 0 ] ; then
	tst_resm TBROK "couldn't create a temporary message"
fi

# check if the user mail_test exists on this system.
# if not add that user mail_test, will removed before exiting test.
id -u mail_test >/dev/null 2>&1
if [ $? -ne 0 ] ; then
	tst_resm TINFO "INIT: Adding temporary user mail_test"
	useradd -m -s /sbin/nologin mail_test > $LTPTMP/tst_mail.out 2>&1
	if [ $? -ne 0 ]; then
		tst_brk TBROK $LTPTMP/tst_mail.out NULL \
			"Test INIT: Failed adding user mail_test. Reason:"
		exit 1
	fi
fi

trap 

tst_resm TINFO "INIT: Removing all mails for mail_test and root"
echo "d*" | mail -u mail_test > /dev/null 2>&1
echo "d*" | mail -u root > /dev/null 2>&1

# Set return code RC variable to 0, it will be set with a non-zero return code
# in case of error. Set TFAILCNT to 0, increment if there occures a failure.

TFAILCNT=0
RC=0
RC1=0
RC2=0

# Test #1
# Test that mail user@domain will send a mail to that user at that domain.

export TCID=mail_tests::mail01
export TST_COUNT=1

tst_resm TINFO "Test #1: mail root@localhost will send mail to root"
tst_resm TINFO "Test #1: user on local machine."

mail -s "Test" root@localhost < $LTPTMP/tst_mail.in \
	> $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]; then
	tst_res TFAIL $LTPTMP/tst_mail.out \
	    "Test #1: mail command failed. Reason: "
	: $(( TFAILCNT += 1 ))
else
	# check if root received a new email with Test as subject
	# but wait for the mail to arrive.

	sleep 10
	echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
	mailsub=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)
	if [ "x$mailsub" != x0 ]; then
		tst_resm TPASS \
		    "Test #1: Mail was sent to root & was received"
	else
		tst_res TFAIL $LTPTMP/tst_mail.res \
		    "Test #1: Mail sent to root, but was not received"
		: $(( TFAILCNT += 1 ))
	fi

fi

# Test #2
# Test that mail user@bad-domain will result in a warning from the mailer
# daemon that the domain does not exist. 

export TCID=mail_tests::mail02
export TST_COUNT=2
RC=0
RC1=0
RC2=0

tst_resm TINFO "Test #2: mail user@bad-domain will result in failure"
tst_resm TINFO "Test #2: to deliver the mail. Mailer daemon should"
tst_resm TINFO "Test #2: report this failure."

# Don't use underscores in domain names (they're illegal)...
mail -s "Test" root@thisdomaindoesnotexist < $LTPTMP/tst_mail.in \
	> $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]; then
	tst_res TFAIL $LTPTMP/tst_mail.out \
	    "Test #2: mail command failed. Reason:"
	: $(( TFAILCNT += 1 ))
else
	# check if Mailer-Deamon reported any delivery failure.	
	# but wait for the mail to arrive first, sleep 5.
	sleep 5
	echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
	checkHeirloomMail $LTPTMP/tst_mail.res
	if [ $isHeirloomMail -eq 0 ]; then
		RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3, "Mailer-Daemon")}' \
		    $LTPTMP/tst_mail.res)
	else
		RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3 $4 $5, "MailDeliverySubsys")}' \
		    $LTPTMP/tst_mail.res)
	fi

	##################################################################
	# In this testcase, mail will get "Returnedmail:", while mailx will
	# get "UndeliveredMailReturned:".
	# Either of mail and mailx may be linked to another.
	# For example,
	# /bin/mail -> /bin/mailx
	# or
	# /bin/mailx -> /bin/mail
	##################################################################
	if [ $isHeirloomMail -eq 0 ]; then
		RC2=$(awk '/^>N/ {print match($9 $10, "Returnedmail:")}' \
		    $LTPTMP/tst_mail.res)
		RC3=$(awk '/^>N/ {print match($9 $10, "UndeliveredMail")}' \
		    $LTPTMP/tst_mail.res)
	else
		RC2=$(awk '/^>N/ {print match($11 $12, "Returnedmail:")}' \
		    $LTPTMP/tst_mail.res)
		RC3=$(awk '/^>N/ {print match($11 $12, "UndeliveredMail")}' \
		    $LTPTMP/tst_mail.res)
	fi
	if [ -z "$RC1" -a -z "$RC2" -a -z "$RC3" ]; then
		tst_res TFAIL $LTPTMP/tst_mail.res \
		    "Test #2: No new mail for root. Reason:"
		: $(( TFAILCNT += 1 ))
	else

		if [ $RC1 -ne 0 -a $RC2 -ne 0 ] || [ $RC1 -ne 0 -a $RC3 -ne 0 ]; then
			tst_resm TPASS \
				"Test #2: Mailer-Deamon reported delivery failure"
		else
			tst_res TFAIL $LTPTMP/tst_mail.res \
			"Test #2: Mailer-Deamon failed to report delivery failure. Reason:"
			: $(( TFAILCNT += 1 ))
		fi

	fi


fi

# Test #3
# Test that mail non_existent_user@localhost will result in delivery failure.
# Mailer-Deamon will report this failure.

export TCID=mail_tests::mail03
export TST_COUNT=3
RC=0
RC1=0
RC2=0

tst_resm TINFO "Test #3: mail non_existent_user@localhost will fail"
tst_resm TINFO "Test #3: to deliver the mail. Mailer daemon should"
tst_resm TINFO "Test #3: report this failure."

mail -s "Test" non_existent_user@localhost < $LTPTMP/tst_mail.in > \
    $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]; then
	tst_res TFAIL $LTPTMP/tst_mail.out \
	    "Test #3: mail command failed. Reason: "
	: $(( TFAILCNT += 1 ))
else
	# check if Mailer-Deamon reported any delivery failure.	
	# but wait for the mail to arrive first, sleep 5.
	sleep 5
	echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
	checkHeirloomMail $LTPTMP/tst_mail.res
	if [ $isHeirloomMail -eq 0 ]; then
		RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3, "Mailer-Daemon")}' \
		    $LTPTMP/tst_mail.res)
	else
		RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3 $4 $5, "MailDeliverySubsys")}' \
		    $LTPTMP/tst_mail.res)
	fi
	##################################################################
	# In this testcase, mail will get "Returnedmail:", while mailx will
	# get "UndeliveredMailReturned:".
	# Either of mail and mailx may be linked to another.
	# For example,
	# /bin/mail -> /bin/mailx
	# or
	# /bin/mailx -> /bin/mail
	#################################################################
	if [ $isHeirloomMail -eq 0 ]; then
		RC2=$(awk '/^>N/ {print match($9 $10, "Returnedmail:")}' \
		    $LTPTMP/tst_mail.res)
		RC3=$(awk '/^>N/ {print match($9 $10, "UndeliveredMail")}' \
		    $LTPTMP/tst_mail.res)
	else
		RC2=$(awk '/^>N/ {print match($11 $12, "Returnedmail:")}' \
		    $LTPTMP/tst_mail.res)
		RC3=$(awk '/^>N/ {print match($11 $12, "UndeliveredMail")}' \
		    $LTPTMP/tst_mail.res)
	fi
fi
if [ -z "$RC1" -a -z "$RC2" -a -z "$RC3" ]; then

	tst_res TFAIL $LTPTMP/tst_mail.res \
	    "Test #3: No new mail for root. Reason:"
	: $(( TFAILCNT += 1 ))

else
	if [ $RC1 -ne 0 -a $RC2 -ne 0 ] || [ $RC1 -ne 0 -a $RC3 -ne 0 ]; then
		tst_resm TPASS \
		    "Test #3: Mailer-Daemon reported delivery failure"
	else
		tst_res TFAIL $LTPTMP/tst_mail.res \
		    "Test #3: Mailer-Daemon failed to report delivery failure. Reason:"
		: $(( TFAILCNT += 1 ))
	fi
fi

# Test #4 
# Test that mail -c user@domain option will carbon copy that user.

export TCID=mail_tests::mail04
export TST_COUNT=4
RC=0

tst_resm TINFO "Test #4: Test that mail -c user@domain will"
tst_resm TINFO "Test #4: carbon copy user@domain"
# send mail to root and carbon copy mail_test 
mail -s "Test" root@localhost -c mail_test@localhost < \
    $LTPTMP/tst_mail.in > $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]; then
	tst_res TFAIL $LTPTMP/tst_mail.out \
	    "Test #4: mail command failed. Reason:"
	: $(( TFAILCNT += 1 ))
else
	# Check if mail_test received the mail and 
	# also if root received the main copy of the email.
	sleep 5
	echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
	RC1=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)
	echo "d" | mail -u mail_test > $LTPTMP/tst_mail.res 2>&1
	RC2=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)

	if [ "x$RC1" != x0 -a "x$RC2" != x0 ]; then
		tst_resm TPASS \
		    "Test #4: Mail was carbon copied to user mail_test"
	else
		tst_res TFAIL $LTPTMP/tst_mail.res \
		    "Test #4: mail failed to carbon copy user mail_test. Reason:"
		: $(( TFAILCNT += 1 ))
	fi

fi

# Test #5 
# Test that mail -b user@domain option will blind carbon copy that user.

export TCID=mail_tests::mail05
export TST_COUNT=5
RC=0

tst_resm TINFO "Test #5: Test that mail -b user@domain will"
tst_resm TINFO "Test #5: blind carbon copy user@domain"

# send mail to root and carbon copy mail_test 
mail -s "Test" root@localhost -b mail_test@localhost < \
	$LTPTMP/tst_mail.in > $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]; then
	tst_res TFAIL $LTPTMP/tst_mail.out \
	    "Test #5: mail command failed. Reason:"
	: $(( TFAILCNT += 1 ))
else
	# Check if mail_test received the mail and 
	# also if root received the main copy of the email.
	sleep 5
	echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
	RC1=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)
	echo "d" | mail -u mail_test > $LTPTMP/tst_mail.res 2>&1
	RC2=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)

	if [ "x$RC1" != x0 -a "x$RC2" != x0 ]; then
		tst_resm TPASS \
		    "Test #5: Mail was blind carbon copied to user mail_test"
	else
		tst_res TFAIL $LTPTMP/tst_mail.res \
		    "Test #5: mail failed to blind carbon copy user mail_test. Reason:"
		: $(( TFAILCNT += 1 ))
	fi

fi

#CLEANUP & EXIT
# remove all the temporary files created by this test.
export TCID=mail_tests::cleanup
export TST_COUNT=1

tst_resm TINFO "Test CLEAN: Removing temporary files from $LTPTMP"
rm -fr $LTPTMP/tst_mail* 

tst_resm TINFO "Test CLEAN: Removing temporary user mail_test"
userdel -r mail_test > /dev/null 2>&1

exit $TFAILCNT
