From 0382a47e2ddb9dc94f98d7e2c6fdf1d53ccf35f0 Mon Sep 17 00:00:00 2001 From: Frantisek Hrdina Date: Thu, 2 Jun 2022 14:26:06 +0200 Subject: [PATCH] Adding sanity tests tests: initscript headercheck bodycheck --- Sanity/bodycheck/main.fmf | 23 ++++++ Sanity/bodycheck/runtest.sh | 138 +++++++++++++++++++++++++++++++++ Sanity/headercheck/main.fmf | 23 ++++++ Sanity/headercheck/runtest.sh | 139 ++++++++++++++++++++++++++++++++++ Sanity/initscript/main.fmf | 26 +++++++ Sanity/initscript/runtest.sh | 125 ++++++++++++++++++++++++++++++ 6 files changed, 474 insertions(+) create mode 100644 Sanity/bodycheck/main.fmf create mode 100755 Sanity/bodycheck/runtest.sh create mode 100644 Sanity/headercheck/main.fmf create mode 100755 Sanity/headercheck/runtest.sh create mode 100644 Sanity/initscript/main.fmf create mode 100755 Sanity/initscript/runtest.sh diff --git a/Sanity/bodycheck/main.fmf b/Sanity/bodycheck/main.fmf new file mode 100644 index 0000000..3245429 --- /dev/null +++ b/Sanity/bodycheck/main.fmf @@ -0,0 +1,23 @@ +summary: bodycheck +description: '' +contact: fhrdina@redhat.com +component: + - postfix +test: ./runtest.sh +framework: beakerlib +recommend: + - postfix + - nc +duration: 20m +enabled: true +tag: + - Tier1 + - postfix::junk::bodycheck +tier: '1' +adjust: + - enabled: false + when: distro < rhel-6 + continue: false +extra-nitrate: TC#0602484 +extra-summary: /CoreOS/postfix/Sanity/bodycheck +extra-task: /CoreOS/postfix/Sanity/bodycheck diff --git a/Sanity/bodycheck/runtest.sh b/Sanity/bodycheck/runtest.sh new file mode 100755 index 0000000..d128cb0 --- /dev/null +++ b/Sanity/bodycheck/runtest.sh @@ -0,0 +1,138 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/postfix/Sanity/bodycheck +# Description: bodycheck +# Author: Robin Hack +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019 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" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + + if rlIsRHEL 5; then + rlServiceStop "sendmail" + fi + + rlServiceStop "postfix" + rlFileBackup "/etc/postfix/main.cf" + rlFileBackup "/etc/postfix/vmailbox" + rlFileBackup "/etc/postfix/virtual" + rlPhaseEnd + + rlPhaseStartSetup + + # don't care + rm -rf /var/mail/vhosts + rlRun "mkdir -p /var/mail/vhosts/example.com" + rlRun "chown -R 5000:5000 /var/mail/vhosts/" + + cat << "EOF" > "/etc/postfix/main.cf" +myhostname = randomstuff.at + +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases + +myorigin = /etc/mailname +mydestination = localhost.randomstuff.at, localhost + +relayhost = +mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 +mailbox_size_limit = 0 +recipient_delimiter = + +inet_interfaces = all + +smtpd_relay_restrictions = reject_unauth_destination + +virtual_mailbox_domains = example.com +virtual_mailbox_base = /var/mail/vhosts +virtual_mailbox_maps = hash:/etc/postfix/vmailbox +virtual_minimum_uid = 100 +virtual_uid_maps = static:5000 +virtual_gid_maps = static:5000 +virtual_alias_maps = hash:/etc/postfix/virtual + +body_checks = regexp:/etc/postfix/body_checks +EOF + + cat << "EOF" > "/etc/postfix/vmailbox" +info@example.com example.com/info +sales@example.com example.com/sales/ +EOF + + cat << "EOF" > "/etc/postfix/virtual" +postmaster@example.com postmaster +EOF + + cat << "EOF" > "/etc/postfix/body_checks" +/Aliens/ REJECT +EOF + + rlRun "postmap /etc/postfix/virtual" + rlRun "postmap /etc/postfix/vmailbox" + + rlServiceStart "postfix" + rlPhaseEnd + + rlPhaseStartTest +cat << "EOF" | nc localhost 25 &> TESTOUT +EHLO aliens.outerworld +MAIL FROM: friendly@alien.xt +RCPT TO: info@example.com +DATA +Hello we are friendly Aliens and we are comming in peace! +. +EOF + + rlAssertGrep "message content rejected" TESTOUT + rlAssertNotGrep "Ok: queued as" TESTOUT + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + + rlRun "rm -rf /var/mail/vhosts" + + rlServiceStop "postfix" + rlFileRestore + rlRun "rm -rf /etc/postfix/vmailbox.db" + rlRun "rm -rf /etc/postfix/virtual.db" + rlRun "rm -rf /etc/postfix/body_checks" + + if rlIsRHEL 5; then + rlServiceRestore "sendmail" + rlServiceStop "postfix" + else + rlServiceRestore "postfix" + fi + + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/Sanity/headercheck/main.fmf b/Sanity/headercheck/main.fmf new file mode 100644 index 0000000..9402324 --- /dev/null +++ b/Sanity/headercheck/main.fmf @@ -0,0 +1,23 @@ +summary: headercheck +description: '' +contact: fhrdina@redhat.com +component: + - postfix +test: ./runtest.sh +framework: beakerlib +recommend: + - postfix + - nc +duration: 20m +enabled: true +tag: + - Tier1 + - postfix::junk::headercheck +tier: '1' +adjust: + - enabled: false + when: distro < rhel-6 + continue: false +extra-nitrate: TC#0602485 +extra-summary: /CoreOS/postfix/Sanity/headercheck +extra-task: /CoreOS/postfix/Sanity/headercheck diff --git a/Sanity/headercheck/runtest.sh b/Sanity/headercheck/runtest.sh new file mode 100755 index 0000000..aeacde5 --- /dev/null +++ b/Sanity/headercheck/runtest.sh @@ -0,0 +1,139 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/postfix/Sanity/headercheck +# Description: headercheck +# Author: Robin Hack +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019 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" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + + if rlIsRHEL 5; then + rlServiceStop "sendmail" + fi + + rlServiceStop "postfix" + rlFileBackup "/etc/postfix/main.cf" + rlFileBackup "/etc/postfix/vmailbox" + rlFileBackup "/etc/postfix/virtual" + rlPhaseEnd + + rlPhaseStartSetup + + # don't care + rm -rf /var/mail/vhosts + rlRun "mkdir -p /var/mail/vhosts/example.com" + rlRun "chown -R 5000:5000 /var/mail/vhosts/" + + cat << "EOF" > "/etc/postfix/main.cf" +myhostname = randomstuff.at + +alias_maps = hash:/etc/aliases +alias_database = hash:/etc/aliases + +myorigin = /etc/mailname +mydestination = localhost.randomstuff.at, localhost + +relayhost = +mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 +mailbox_size_limit = 0 +recipient_delimiter = + +inet_interfaces = all + +smtpd_relay_restrictions = reject_unauth_destination + +virtual_mailbox_domains = example.com +virtual_mailbox_base = /var/mail/vhosts +virtual_mailbox_maps = hash:/etc/postfix/vmailbox +virtual_minimum_uid = 100 +virtual_uid_maps = static:5000 +virtual_gid_maps = static:5000 +virtual_alias_maps = hash:/etc/postfix/virtual + +header_checks = regexp:/etc/postfix/header_checks +EOF + + cat << "EOF" > "/etc/postfix/vmailbox" +info@example.com example.com/info +sales@example.com example.com/sales/ +EOF + + cat << "EOF" > "/etc/postfix/virtual" +postmaster@example.com postmaster +EOF + + cat << "EOF" > "/etc/postfix/header_checks" +/^From.*alien\.xt/ REJECT Sorry, no aliens welcome! +EOF + + rlRun "postmap /etc/postfix/virtual" + rlRun "postmap /etc/postfix/vmailbox" + + rlServiceStart "postfix" + rlPhaseEnd + + rlPhaseStartTest +cat << "EOF" | nc localhost 25 &> TESTOUT +EHLO aliens.outerworld +MAIL FROM: friendly@alien.xt +RCPT TO: info@example.com +DATA +From: friendly@alien.xt +Hello we are friendly Aliens and we are comming in peace! +. +EOF + + rlAssertGrep "Sorry, no aliens welcome!" TESTOUT + rlAssertNotGrep "Ok: queued as" TESTOUT + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + + rlRun "rm -rf /var/mail/vhosts" + + rlServiceStop "postfix" + rlFileRestore + rlRun "rm -rf /etc/postfix/vmailbox.db" + rlRun "rm -rf /etc/postfix/virtual.db" + rlRun "rm -rf /etc/postfix/header_checks" + + if rlIsRHEL 5; then + rlServiceRestore "sendmail" + rlServiceStop "postfix" + else + rlServiceRestore "postfix" + fi + + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/Sanity/initscript/main.fmf b/Sanity/initscript/main.fmf new file mode 100644 index 0000000..38bcadd --- /dev/null +++ b/Sanity/initscript/main.fmf @@ -0,0 +1,26 @@ +summary: Basic initscript test for postfix +description: '' +contact: fhrdina@redhat.com +component: + - postfix +test: ./runtest.sh +framework: beakerlib +recommend: + - postfix +duration: 5m +enabled: true +tag: + - Tier1 + - postfix::initscripts +tier: '1' +link: + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=584377 + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=557756 + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=528151 +adjust: + - enabled: false + when: distro < rhel-6 + continue: false +extra-nitrate: TC#0044097 +extra-summary: /CoreOS/postfix/Sanity/initscript +extra-task: /CoreOS/postfix/Sanity/initscript diff --git a/Sanity/initscript/runtest.sh b/Sanity/initscript/runtest.sh new file mode 100755 index 0000000..8784302 --- /dev/null +++ b/Sanity/initscript/runtest.sh @@ -0,0 +1,125 @@ +#!/bin/bash +# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/postfix/Sanity/initscript +# Description: Init script should meet LSB specifications +# Author: Jan Scotka , Yulia Kopkova +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2009 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# 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., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="postfix" +STATUS_LOG="test.log" + +SERVICE=$PACKAGE + +rlJournalStart + + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "useradd testuserqa" 0 "Add test user" + rlServiceStop sendmail + rlServiceStop $SERVICE + rlRun "TmpDir=\`mktemp -d\`" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest + rlLog ">>>>>>>>> service start" + rlRun "service $SERVICE start" 0 " Service must start without problem" + rlRun "service $SERVICE status &>> $STATUS_LOG" 0 " Then Status command " + rlRun "service $SERVICE start" 0 " Already started service " + rlRun "service $SERVICE status &>> $STATUS_LOG" 0 " Again status command " + + rlLog ">>>>>>>>> service restart" + rlRun "service $SERVICE restart" 0 " Restarting of service" + rlRun "service $SERVICE status &>> $STATUS_LOG" 0 " Status command " + + rlLog ">>>>>>>>> service stop" + rlRun "service $SERVICE stop" 0 " Stopping service " + rlRun "service $SERVICE status &>> $STATUS_LOG" 3 " Status of stopped service " + rlRun "service $SERVICE stop" 0 " Stopping service again " + rlRun "service $SERVICE status &>> $STATUS_LOG" 3 " Status of stopped service " + + rlServiceStart $SERVICE + sleep 10 + rlAssertExists "/var/spool/postfix/pid/master.pid" "Pid file /var/spool/postfix/pid/master.pid must exist" + SERVICE_PID=`cat /var/spool/postfix/pid/master.pid` + rlRun "kill -11 $SERVICE_PID" 0 "Kill $SERVICE" + sleep 5 + + if rlIsRHEL '<=6'; then + EXIT_STATUS=1; + rlAssertExists "/var/spool/postfix/pid/master.pid" "Pid file /var/spool/postfix/pid/master.pid must exist after kill" + else + EXIT_STATUS=3; + fi + rlRun "service $SERVICE status &>> $STATUS_LOG" $EXIT_STATUS " Existing pid file, but service not started " + + rlRun "rm -f /var/spool/postfix/pid/master.pid" 0 "Remove .pid file" + rlLog ">>>>>>>>> lock file" + + if rlIsRHEL '<=6'; then + EXIT_STATUS=2; + rlAssertExists "/var/lock/subsys/$SERVICE" "Lock file /var/lock/subsys/$SERVICE must exist" + else + EXIT_STATUS=3; + fi + rlRun "service $SERVICE status &>> $STATUS_LOG" $EXIT_STATUS "Existing lock file, but service not started " + rlServiceStop $SERVICE + + rlLog ">>>>>>>>> insufficient rights" + + # Polkit rpm installed is causing that running with insufficient rights returns 1 instead of 4 + if ( (rlIsRHEL '>=9' || rlIsFedora) && ! rlCheckRpm 'polkit' ) || rlIsRHEL '<=6' ; then + ACCESS_DENIED_EXIT_STATUS=4 + else + ACCESS_DENIED_EXIT_STATUS=1 + fi + rlRun "service $SERVICE start " 0 " Starting service for restarting under nonpriv user " + rlRun "su testuserqa -c 'service $SERVICE restart'" $ACCESS_DENIED_EXIT_STATUS "Insufficient rights, restarting service under nonprivileged user must fail" + + rlLog ">>>>>>>>> operations" + rlRun "service $SERVICE start" 0 " Service have to implement start function " + rlRun "service $SERVICE restart" 0 " Service have to implement restart function " + rlRun "service $SERVICE status &>> $STATUS_LOG" 0 " Service have to implement status function " + rlRun "service $SERVICE condrestart" 0 " Service have to implement condrestart function " + rlRun "service $SERVICE reload" 0 " Service have to implement reload function " + rlRun "service $SERVICE force-reload" 0 " Service have to implement force-reload function " + + rlLog ">>>>>>>>> nonexist operations" + rlRun "service $SERVICE noexistop" 2 " Testing proper return code when nonexisting function" + + rlPhaseEnd + + rlPhaseStartCleanup + rlServiceRestore $SERVICE + rlServiceRestore sendmail + rlRun "userdel -fr testuserqa" 0 "Remove test user" + rlRun "popd" + rlRun "rm -r $TmpDir" + rlPhaseEnd + +rlJournalPrintText +rlJournalEnd