| #!/bin/bash |
| |
| # Positive tests for cron, that means these tests have to pass |
| |
| iam=`whoami` |
| |
| tvar=${MACHTYPE%-*} |
| tvar=${tvar#*-} |
| |
| if [ "$tvar" = "redhat" -o "$tvar" = "redhat-linux" ] |
| then |
| CRON_ALLOW="/etc/cron.allow" |
| else |
| CRON_ALLOW="/var/spool/cron/allow" |
| fi |
| |
| |
| if [ $iam = "root" ]; then |
| if [ $# -lt 1 ] ; then |
| echo Either do not run this script as root or start it like |
| echo " $0 <user>" |
| exit 1 |
| fi |
| |
| mv $CRON_ALLOW $CRON_ALLOW.old &> /dev/null |
| su $1 -c "$0 $*" |
| RC=$? |
| mv $CRON_ALLOW.old $CRON_ALLOW &> /dev/null |
| exit $RC |
| fi |
| |
| function restorecrontab () { |
| test -e /tmp/crontab-save-$iam && \ |
| crontab /tmp/crontab-save-$iam && \ |
| rm -f /tmp/crontab-save-$iam && \ |
| echo restored old crontab |
| } |
| |
| echo Running as user $iam... |
| |
| # Save current users crontab |
| |
| test -e /tmp/crontab-save-$iam && rm -f /tmp/crontab-save-$iam |
| |
| if [ "0" -lt `crontab -l 2>/dev/null | wc -l` ]; then |
| |
| echo 'crontab of this user exists -> creating backup' |
| crontab -l | grep '^[^#]' > /tmp/crontab-save-$iam |
| fi |
| |
| |
| # Do tests |
| |
| # 1. Add new job |
| |
| rm -rf /tmp/crontest &> /dev/null |
| mkdir -p /tmp/crontest |
| |
| cat > /tmp/crontest/testjob_cron01 << EOF |
| echo Testjob running |
| date |
| EOF |
| |
| chmod 755 /tmp/crontest/testjob_cron01 |
| |
| crontab - << EOF |
| `date '+%M' | awk '{ print ($1+2)%60 " * * * * " |
| }'` /tmp/crontest/testjob_cron01 >> /tmp/crontest/output_cron01 2>&1 |
| EOF |
| |
| rc=$? |
| |
| if [ $rc = "1" ]; then |
| echo Error while adding crontab for user $iam |
| restorecrontab |
| exit 1 |
| fi |
| |
| echo new job added successfully |
| |
| # 2. Wait for execution of job |
| |
| echo 'sleeping for 130 seconds...' |
| sleep 130 |
| |
| rc=1 |
| test -e /tmp/crontest/output_cron01 && rc=0 |
| |
| if [ $rc = "1" ]; then |
| echo Job has not been executed |
| restorecrontab |
| exit 1 |
| fi |
| |
| grep "Testjob running" /tmp/crontest/output_cron01 |
| rc=$? |
| if [ $rc = "1" ]; then |
| echo Job has not produced valid output |
| restorecrontab |
| fi |
| |
| echo 'job has been executed :-)' |
| echo "testjob's output:" |
| echo |
| |
| rm -rf /tmp/crontest |
| |
| # 3. Delete crontab |
| |
| crontab -r |
| |
| echo removed crontab |
| |
| # Restore old crontab file |
| |
| restorecrontab |
| |
| exit $rc |