cronie/tests/init-scripts-LSB/runtest.sh
Andrei Stepanov 6743dfe08f Add CI tests using the standard test interface
Adds tests according to the CI wiki [0] specifically the standard test interface in the spec [1].

[0]: https://fedoraproject.org/wiki/CI
[1]: https://fedoraproject.org/wiki/Changes/InvokingTests
2017-10-06 10:38:34 +00:00

187 lines
6.5 KiB
Bash

#!/bin/bash
# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /CoreOS/cronie/Sanity/init-script-LSB
# Description: Init script should meet LSB specifications
# Author: Jan Scotka <jscotka@redhat.com>, Yulia Kopkova <ykopkova@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# 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/bin/rhts-environment.sh
. /usr/share/rhts-library/rhtslib.sh
PACKAGE="cronie"
SERVICE="crond";
reportAllErrors=no;
function isTrue() {
local string="$@";
local oldOpt="shopt -p nocasematch";
local -i rc=1;
shopt -s nocasematch;
[[ -z "$string" ]] && return 1;
case $string in
yes) rc=0;;
true) rc=0;;
ano) rc=0;;
1) rc=0;;
jo) rc=0;;
yeah) rc=0;;
y) rc=0;;
a) rc=0;;
esac;
eval $oldOpt;
return $rc;
}
isTrue no && echo Yes || echo No;
## Is nice to know when things going wrong
function errorHandler() {
local code="${?}";
local lineNO="$1";
case $code in
127)
rlFail "Command not found on line $lineNO"
;;
*)
isTrue $reportAllErrors && rlFail "Unhandled error $code near line $lineNO";
;;
esac
}
function getUserName() {
local userName="qa_$(tr -dc "[:lower:]" < /dev/urandom | head -c 5)";
echo "$userName" >&2;
if getent passwd $userName &>/dev/null; then
getUserName;
return $?
fi
if [[ -n "$userName" ]]; then
echo "$userName";
return $EXIT_SUCCESS;
else
return $EXIT_FAILURE;
fi
}
rlJournalStart
trap 'errorHandler ${LINENO}' ERR;
rlPhaseStartSetup
rlAssertRpm $PACKAGE
rlRun "tmpDir=\$(mktemp -d)" 0 "Creating tmp directory";
testUser="$(getUserName || rlDie "Cannot get username")"
rlLog "${testUser}"
rlRun "useradd -d $tmpDir $testUser";
pushd $tmpDir;
rlServiceStop $SERVICE
rlPhaseEnd
rlPhaseStartTest "starts the service"
rlRun "service $SERVICE start" 0 " Service must start without problem"
rlRun "service $SERVICE status" 0 " Then Status command "
rlRun "service $SERVICE start" 0 " Already started service "
rlRun "service $SERVICE status" 0 " Again status command "
rlPhaseEnd
rlPhaseStartTest "restart the service"
firstPid=$(ps h -C $SERVICE -o pid);
rlRun "service $SERVICE restart" 0 " Restarting of service"
rlRun "service $SERVICE status" 0 " Status command "
secondPid=$(ps h -C $SERVICE -o pid);
rlRun "[[ -n $firstPid ]] && [[ -n $secondPid ]] && [[ $firstPid -ne $secondPid ]]" 0 \
"Pids are different after restart";
rlPhaseEnd
rlPhaseStartTest "stop the service"
rlRun "service $SERVICE stop" 0 " Stopping service "
rlRun "service $SERVICE status" 3 " Status of stopped service " || true
rlRun "service $SERVICE stop" 0 " Stopping service again "
rlRun "service $SERVICE status" 3 " Status of stopped service " || true
rlPhaseEnd
if ! rlIsRHEL ">=7"; then
rlPhaseStartTest "pid file"
rlServiceStart $SERVICE
rlAssertExists "/var/run/$SERVICE.pid" "Pid file /var/run/$SERVICE.pid must exist"
sleep 1
rlRun "kill -9 `pidof crond`" 0 "Kill $SERVICE"
sleep 10
rlRun "service $SERVICE status" 1 " Existing pid file, but service not started " || true;
sleep 1
rlRun "rm -fv /var/run/$SERVICE.pid" 0 "Remove .pid file"
rlPhaseEnd
rlPhaseStartTest "lock file"
rlAssertExists "/var/lock/subsys/$SERVICE" "Lock file /var/lock/subsys/$SERVICE must exist"
rlRun "service $SERVICE status" 2 " Existing lock file, but service not started " || true;
rlServiceStop $SERVICE
rlPhaseEnd
fi
rlPhaseStartTest "insufficient rights"
rlRun "service $SERVICE start " 0 " Starting service for restarting under nonpriv user "
rlRun "su $testUser -c 'service $SERVICE restart'" \
$(rpm -q systemd &>/dev/null && echo 1 || echo 4) \
"Insufficient rights, restarting service under nonprivileged user must fail";
rlPhaseEnd
rlPhaseStartTest "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" 0 " Service have to implement status 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 "
rlRun "service $SERVICE condrestart" 0 " Service have to implement condrestart function "
if ! rlIsRHEL ">=7"; then
rlRun "service $SERVICE try-restart" 0 " Service have to implement try-restart function "
fi
rlPhaseEnd
rlPhaseStartTest "nonexisting operations"
rlRun "service $SERVICE noexistop" 2 " Testing proper return code when nonexisting function";
rlRun "service $SERVICE stopex" 2 " Testing proper return code when nonexisting function";
rlRun "service $SERVICE foo" 2 " Testing proper return code when nonexisting function" || true
rlPhaseEnd
rlPhaseEnd
rlPhaseStartCleanup
rlServiceRestore $SERVICE
rlRun "getent passwd $testUser";
popd tmpDir;
rlRun "userdel -fr $testUser" 0 "Remove test user";
# rlRun "rm -rf $testDir";
#avoid systemd failing to start crond due start-limit
sleep 10
rlPhaseEnd
rlJournalPrintText
trap - ERR;
rlJournalEnd