postfix/Sanity/basic/runtest.sh
Frantisek Hrdina b39584c583 Adding tests
/CoreOS/postfix/Sanity/SRV-lookup
/CoreOS/postfix/Sanity/basic
/CoreOS/postfix/Sanity/bz1057593-When-server-is-un-cleanly-shutdown-postfix-does
/CoreOS/postfix/Sanity/bz1888286-logging-to-file
/CoreOS/postfix/Sanity/pflogsumm-filter-not-work-with-underscore
/CoreOS/postfix/Sanity/postfix-master-pid-file
/CoreOS/postfix/Sanity/suppress-openssl-key-generation-output-when-installing
/CoreOS/postfix/Sanity/virtual-MAILBOX-separate-domains-non-UNIX-accounts
/CoreOS/postfix/Regression/bz251677-example-scripts-missing
/CoreOS/postfix/Regression/bz345851-Postfix-MySQL-Support
/CoreOS/postfix/Regression/bz502412-Postfix-MySQL-map-support
/CoreOS/postfix/Regression/bz574439-config-file-in-usr
/CoreOS/postfix/Regression/bz645348-Postfix-init-script-status-not-very-robust
/CoreOS/postfix/Regression/postfix-is-limited-to-using-security-protocols
/CoreOS/postfix/Regression/bz1905484-backport-TLS-1-3-support-to-postfix-3-3-1
/CoreOS/postfix/Regression/cleanup-crash-when-message-with-whitespaceonly-fullname
/CoreOS/postfix/Regression/postfix-doesn-t-support-LDAP-SASL
2023-05-23 13:50:01 +02:00

219 lines
6.3 KiB
Bash
Executable file

#!/bin/bash
#shellcheck disable=SC1091
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /CoreOS/postfix/Sanity/basic
# Description: Basic function
# Author: Alois Mahdal <amahdal@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2018 Red Hat, Inc.
#
# 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, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE="postfix"
TEST_HOME=$PWD
PID="$$"
mkesmtp() {
#
# Make ESMTP mail send commands
#
echo 'helo localhost'
echo 'mail from: <postfixtest@localhost>'
echo 'rcpt to: <root@localhost>'
echo 'data'
echo 'From: Postfixtest postfixtest@localhost>'
echo 'To: root@localhost'
echo 'Subject: Test2'
echo 'Date: Tue, 18 Jun 0102 05:12:09 +0500'
echo 'MIME-Version: 1.0'
echo 'Content-Type: text/plain;'
echo 'charset="us-ascii"'
echo 'Content-Transfer-Encoding: 7bit'
echo 'Content-Disposition: inline'
echo ''
mkmsg
echo '.'
}
distribution_xcase__enum() {
#
# Enumerate test cases
#
# Test cases:
#
# * via_mail_cmd - just send the e-mail via `mail` command
# using default config.
#
# * via_nc_esmtp - send the e-mail via `nc` command and use
# ESMTP, ie. compose the actual ESMTP stream.
#
# * via_gnutls_esmtps - enable TLS (wrapper mode, ie. dedicated
# port; no STARTTLS), and send the ESMTP stream via gnutls
# client.
#
echo via_mail_cmd
echo via_nc_esmtp
rlIsRHEL 6 \
|| echo via_gnutls_esmtps
#FIXME: ^^ maybe figure out how to make gnutls-cli trust our CA, then re-enable
# ... or just disable the whole test on RHEL-6, as RHEL-6 gets older
}
mkmsg() {
#
# Compose a message to send
#
echo "text from '$(distribution_xcase__id)'"
}
mkclientcmd() {
#
# Compose the server start command
#
echo -n "gnutls-cli"
echo -n " -V"
echo -n " --no-ca-verification"
echo -n " -p 465"
echo -n " localhost"
}
setup_postfix() {
#
# Set up postfix
#
#shellcheck disable=SC1004
rlFileBackup --clean /etc/pki/tls/certs/localhost-$PID.pem
cp "$TEST_HOME/localhost.pem" "/etc/pki/tls/certs/localhost-$PID.pem"
sed -i -e '
/#smtps/ {
s/^#//
a \
-o smtpd_tls_cert_file='"/etc/pki/tls/certs/localhost-$PID.pem"'\
-o smtpd_tls_key_file='"/etc/pki/tls/certs/localhost-$PID.pem"'\
-o smtpd_tls_loglevel=2\
-o smtpd_tls_wrappermode=yes\
-o smtpd_tls_security_level=encrypt\
-o smtpd_use_tls=yes
}
' \
/etc/postfix/master.cf
}
master_on() {
#
# True if 'master' is already listening on port $1
#
local port=$1
ss -ntlp | grep '"master"' | grep ":$port"'\>'
}
distribution_xcase__setup() {
rlFileBackup --clean /var/spool/mail/root
rlFileBackup /etc/postfix/master.cf
rlRun "rm -f /var/spool/mail/root"
case $(distribution_xcase__id) in
via_mail_cmd)
rlRun "mkmsg | mail -s test1 root@localhost" \
0 "send e-mail to root"
rlRun "postqueue -f " \
0 "flushing mail queue, forcing mail delivery"
;;
via_nc_esmtp)
rlRun "mkesmtp | nc localhost 25 > nc.out" \
0 "send mail via ESMTP nc connection"
;;
via_gnutls_esmtps)
rlRun "setup_postfix"
rlServiceStart postfix
rlWaitForCmd "master_on 465" || {
rlLogError "master will not listen on 465"
rlFail "(TEST ERROR)"
return 3
}
rlRun "mkesmtp | $(mkclientcmd) >client.out 2>client.err" \
0 "send mail via ESMTP client connection"
;;
*) distribution_xcase__id_error ;;
esac
rlWaitForCmd "mail <<<type >/dev/null"
rlRun "mail <<<type >mail.out"
}
distribution_xcase__test() {
case $(distribution_xcase__id) in
via_mail_cmd)
rlRun "grep 'test1' mail.out" \
0 "mail recieved"
;;
via_nc_esmtp)
rlRun "grep 'ESMTP Postfix' nc.out" \
0 "ESMTP postfix support confirmed"
;;
via_gnutls_esmtps)
rlRun "grep 'ESMTP Postfix' client.out" \
0 "ESMTP postfix support confirmed"
;;
*) distribution_xcase__id_error ;;
esac
rlRun "grep -x 'text from .$(distribution_xcase__id).' mail.out" \
0 "it's the correct mail"
}
distribution_xcase__diag() {
distribution_dump__file -s -S mail.out nc.out client.out client.err
mailq | distribution_dump__pipe MAILQ
ss -ntlp | distribution_dump__pipe SSNTLP
}
distribution_xcase__cleanup() {
rlFileRestore
}
rlJournalStart
rlPhaseStartSetup init
rlAssertRpm $PACKAGE
rlImport "distribution/dump"
rlImport "distribution/xcase"
rlPhaseEnd
rlPhaseStartSetup
rlCheckRpm "sendmail" && {
rlServiceStop "sendmail"
rlRun "alternatives --set mta /usr/sbin/sendmail.postfix" 0 "set postfix as default MTA"
}
rlServiceStart "postfix"
rlPhaseEnd
distribution_xcase__run
rlPhaseStartCleanup
rlServiceRestore "postfix"
rlCheckRpm "sendmail" && {
rlRun "alternatives --set mta /usr/sbin/sendmail.sendmail" 0 "setting sendmail as default mailer"
rlServiceRestore "sendmail"
}
rlPhaseEnd
rlJournalPrintText
rlJournalEnd