blob: cee08d6e554641ea39343e91a2408849e652e673 [file] [log] [blame]
#!/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 send to an user@domain - received by that user@domain
# mail is send to nosuchuser@domain - mail delivery failure
# mail is send 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
if [ -z "$LTPTMP" -a -z "$TMPBASE" ]
then
LTPTMP=/tmp
else
LTPTMP=$TMPBASE
fi
if [ -z "$LTPBIN" -a -z "$LTPROOT" ]
then
LTPBIN=./
else
LTPBIN=$LTPROOT/testcases/bin
fi
RC=0
export TCID=SETUP
export TST_COUNT=1
MAIL_NOT_INSTALLED=
type mail > /dev/null 2>&1
if [ $? != 0 ]; then
MAIL_NOT_INSTALLED=1
fi
# check if the user mail_test exists on this system.
# if not add that user mail_test, will removed before exiting test.
RC=$(awk '/^mail_test/ {print 1}' /etc/passwd)
if [ -z $RC ]
then
RC=0
$LTPBIN/tst_resm TINFO "INIT: Adding temporary user mail_test"
useradd -m -s /bin/bash mail_test > $LTPTMP/tst_mail.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
$LTPBIN/tst_brk TBROK $LTPTMP/tst_mail.out NULL \
"Test INIT: Failed adding user mail_test. Reason:"
exit 1
fi
fi
$LTPBIN/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=mail01
export TST_COUNT=1
$LTPBIN/tst_resm TINFO "Test #1: mail root@localhost will send mail to root"
$LTPBIN/tst_resm TINFO "Test #1: user on local machine."
if [ -z "$MAIL_NOT_INSTALLED" ]; then
cat > $LTPTMP/tst_mail.in <<EOF
This is a test email.
EOF
mail -s "Test" root@localhost < $LTPTMP/tst_mail.in \
> $LTPTMP/tst_mail.out 2>&1 || RC=$?
if [ $RC -ne 0 ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.out \
"Test #1: mail command failed. Reason: "
TFAILCNT=$(( $TFAILCNT+1 ))
else
# check if root received a new email with Test as subject
# but wait for the mail to arrive.
sleep 10s
echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
mailsub=$(awk '/^>N/ {print match($9, "Test")}' $LTPTMP/tst_mail.res)
if [ $mailsub -ne 0 ]
then
$LTPBIN/tst_resm TPASS \
"Test #1: Mail was send to root & was received"
else
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #1: Mail send to root, but was not received"
TFAILCNT=$(( $TFAILCNT+1 ))
fi
fi
else
$LTPBIN/tst_resm TCONF "mail command not installed"
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=mail02
export TST_COUNT=2
RC=0
RC1=0
RC2=0
$LTPBIN/tst_resm TINFO \
"Test #2: mail user@bad-domain will result in failure"
$LTPBIN/tst_resm TINFO "Test #2: to deliver the mail. Mailer daemon should"
$LTPBIN/tst_resm TINFO "Test #2: report this failure."
if [ -z $MAIL_NOT_INSTALLED ]; then
cat > $LTPTMP/tst_mail.in <<EOF
This is a test email.
EOF
# 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
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.out \
"Test #2: mail command failed. Reason: "
TFAILCNT=$(( $TFAILCNT+1 ))
else
# check if Mailer-Deamon reported any delivery failure.
# but wait for the mail to arrive first, sleep 5s.
sleep 5s
echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3, "Mailer-Daemon")}' \
$LTPTMP/tst_mail.res)
RC2=$(awk '/^>N/ {print match($9 $10 $11, "Maildeliveryfailed:")}' \
$LTPTMP/tst_mail.res)
#####
# Some mailers (e.g., Red Hat's sendmail) print different messages
#####
if [ -f /etc/redhat-release ]
then
[ -z "$RC2" -o "X$RC2" = "X0" ] && \
RC2=$(awk '/^>N/ {print match($9 $10, "Returnedmail:")}' \
$LTPTMP/tst_mail.res)
else
[ -z "$RC2" -o "X$RC2" = "X0" ] && \
RC2=$(awk '/^>N/ {print match($9 $10 $11, "UndeliveredMailReturned")}' \
$LTPTMP/tst_mail.res)
fi
if [ -z "$RC1" -a -z "$RC2" ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #2: No new mail for root. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
else
if [ $RC1 -ne 0 -a $RC2 -ne 0 ]
then
$LTPBIN/tst_resm TPASS \
"Test #2: Mailer-Deamon reported delivery failure"
else
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #2: Mailer-Deamon failed to report delivery failure. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
fi
fi
fi
else
$LTPBIN/tst_resm TCONF "mail command not installed"
fi
# Test #3
# Test that mail non_existant_user@localhost will result in delivery failure.
# Mailer-Deamon will report this failure.
export TCID=mail03
export TST_COUNT=3
RC=0
RC1=0
RC2=0
$LTPBIN/tst_resm TINFO \
"Test #3: mail non_existant_user@localhost will fail"
$LTPBIN/tst_resm TINFO "Test #3: to deliver the mail. Mailer daemon should"
$LTPBIN/tst_resm TINFO "Test #3: report this failure."
if [ -z $MAIL_NOT_INSTALLED ]; then
cat > $LTPTMP/tst_mail.in <<EOF
This is a test email.
EOF
mail -s "Test" non_existant_userr@localhost < $LTPTMP/tst_mail.in \
> $LTPTMP/tst_mail.out 2>&1
if [ $? -ne 0 ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.out \
"Test #3: mail command failed. Reason: "
TFAILCNT=$(( $TFAILCNT+1 ))
else
# check if Mailer-Deamon reported any delivery failure.
# but wait for the mail to arrive first, sleep 5s.
sleep 5s
echo "d" | mail -u root > $LTPTMP/tst_mail.res 2>&1
RC1=$(awk '/^>N/ {IGNORECASE=1; print match($3, "Mailer-Daemon")}' \
$LTPTMP/tst_mail.res)
RC2=$(awk '/^>N/ {print match($9 $10 $11, "Maildeliveryfailed:")}' \
$LTPTMP/tst_mail.res)
#####
# Some mailers (e.g., Red Hat's sendmail) print different messages
#####
if [ -f /etc/redhat-release ]
then
[ -z "$RC2" -o "X$RC2" = "X0" ] && \
RC2=$(awk '/^>N/ {print match($9 $10, "Returnedmail:")}' \
$LTPTMP/tst_mail.res)
else
[ -z "$RC2" -o "X$RC2" = "X0" ] && \
RC2=$(awk '/^>N/ {print match($9 $10 $11, "UndeliveredMailReturned")}' \
$LTPTMP/tst_mail.res)
fi
if [ -z "$RC1" -a -z "$RC2" ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #3: No new mail for root. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
else
if [ $RC1 -ne 0 -a $RC2 -ne 0 ]
then
$LTPBIN/tst_resm TPASS \
"Test #3: Mailer-Deamon reported delivery failure"
else
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #3: Mailer-Deamon failed to report delivery failure. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
fi
fi
fi
else
$LTPBIN/tst_resm TCONF "mail command not installed"
fi
# Test #4
# Test that mail -c user@domain option will carbon copy that user.
export TCID=mail04
export TST_COUNT=4
RC=0
$LTPBIN/tst_resm TINFO "Test #4: Test that mail -c user@domain will"
$LTPBIN/tst_resm TINFO "Test #4: carbon copy user@domain"
if [ -z $MAIL_NOT_INSTALLED ]; then
# 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 || RC=$?
if [ $RC -ne 0 ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.out \
"Test #4: mail command failed. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
else
# Check if mail_test received the mail and
# also if root received the main copy of the email.
sleep 5s
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 [ $RC1 -ne 0 -a $RC2 -ne 0 ]
then
$LTPBIN/tst_resm TPASS \
"Test #4: Mail was carbon copied to user mail_test"
else
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #4: mail failed to carbon copy user mail_test. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
fi
fi
else
$LTPBIN/tst_resm TCONF "mail command not installed"
fi
# Test #5
# Test that mail -b user@domain option will blind carbon copy that user.
export TCID=mail05
export TST_COUNT=5
RC=0
$LTPBIN/tst_resm TINFO "Test #5: Test that mail -b user@domain will"
$LTPBIN/tst_resm TINFO "Test #5: blind carbon copy user@domain"
if [ -z $MAIL_NOT_INSTALLED ]; then
# 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 || RC=$?
if [ $RC -ne 0 ]
then
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.out \
"Test #5: mail command failed. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
else
# Check if mail_test received the mail and
# also if root received the main copy of the email.
sleep 5s
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 [ $RC1 -ne 0 -a $RC2 -ne 0 ]
then
$LTPBIN/tst_resm TPASS \
"Test #5: Mail was carbon copied to user mail_test"
else
$LTPBIN/tst_res TFAIL $LTPTMP/tst_mail.res \
"Test #5: mail failed to carbon copy user mail_testi. Reason:"
TFAILCNT=$(( $TFAILCNT+1 ))
fi
fi
else
$LTPBIN/tst_resm TCONF "mail command not installed"
fi
#CLEANUP & EXIT
# remove all the temporary files created by this test.
export TCID=CLEANUP
export TST_COUNT=1
$LTPBIN/tst_resm TINFO "Test CLEAN: Removing temporary files from $LTPTMP"
rm -fr $LTPTMP/tst_mail*
$LTPBIN/tst_resm TINFO "Test CLEAN: Removing temporary user mail_test"
userdel -r mail_test > /dev/null 2>&1
exit $TFAILCNT