commit 64ecf5f2b61d41d55cb2a7fa09733f1860aa304b from: vincent.delft date: Thu Jul 5 21:29:52 2018 UTC Add a regression testing script. Contains 20 tests for the moment commit - 0da605df6f1d2c7759af871153259ace75dda192 commit + 64ecf5f2b61d41d55cb2a7fa09733f1860aa304b blob - 323289f5fb4f09574c16fd93f5c6c79b599283a3 blob + f92b6c484991d9d2d7ad14ea0db7164a421a0402 --- Makefile +++ Makefile @@ -17,4 +17,8 @@ uninstall: rm ${PREFIX}/man/man8/vdcron.8 rm ${PREFIX}/man/man8/vdcron.conf.8 -.PHONY: install uninstall +test: + @echo == Testing == + sh tests/scenarios + +.PHONY: install uninstall test blob - /dev/null blob + f41e26bef699533574d13f06d1da1095839bf082 (mode 644) --- /dev/null +++ INSTALL @@ -0,0 +1,19 @@ +Install +------- + +doas make install + +Will copy all required files on your system + +uninstall +--------- + +doas make uninstall + +Remove all files except logs and conf + +test +----- + +Execute all regressions tests as defined in the folder tests. +Those tests can be executed before doing the install blob - /dev/null blob + f893658f4cefe5d2ec00431108fcdc5844d505f0 (mode 644) --- /dev/null +++ tests/scenarios @@ -0,0 +1,289 @@ +#!/bin/sh + +CONF=/tmp/test.conf +LOG=~/.vdcron/vdcron.log +RES= +DATEREFERENCE= +check_log() { +RES=$(sed -n 'H; /^Starting/h; ${g;p;}' $LOG | grep -c -E "$1") +} +tail_log() { +sed -n 'H; /^Starting/h; ${g;p;}' $LOG +} +check_conf() { +RES=$(grep -c -E "$1" $CONF) +} +test_gt0() { +if [ "$1" -gt 0 ]; then + echo "$2 : PASS" +else + echo "$2: FAILED" + echo "==== LOG FILE ===" + tail_log + echo "==== CONF FILE ===" + cat $CONF + echo "==== END ===" +fi +} +test_eq0() { +if [ "$1" -eq 0 ]; then + echo "$2 : PASS" +else + echo "$2: FAILED" + echo "==== LOG FILE ===" + tail_log + echo "==== CONF FILE ===" + cat $CONF + echo "==== END ===" +fi +} +plus_10min() { +local _ref=$(date -j +%s $1) +_ref=$((_ref+10*60)) +while [ "$(date -j -r $_ref +%s)" -lt "$(date +%s)" ] +do + _ref=$((_ref+60*10)) +done +DATEREFERENCE=$(date -j -r $_ref +$2) +} +today_plus_10days() { +local _now=$(date -j +%s) +_now=$((_now+10*3600*24)) +DATEREFERENCE=$(date -j -r $_now +%Y%m%d) +} +today_plus_1day() { +local _now=$(date -j +%s) +_now=$((_now+24*3600)) +DATEREFERENCE=$(date -j -r $_now +%A) +} +today_plus_1month() { +local _now=$(date -j +%s) +local _step +[ $(date +%d) -gt 27 ] && _step=864000 || _step=2678400 +_now=$((_now+_step)) +DATEREFERENCE=$(date -j -r $_now +%B) +} + + +if [ "$(date +%S)" -gt "50" ]; then + echo "We are now ($(date +%H:%M:%S))very close to a minute change" + echo "This could generate troubles for this test" + echo "Thus we sleep 10 seconds" + sleep 10 +fi + + +# 1. test YYYYmmddHHMM + TEST="YYYYmmddHHMM" + echo "test $TEST" + echo "$(date +%Y%m%d%H%M) echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log ".*execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 2. test +YYYYmmddHHMM + TEST="+YYYYmmddHHMM" + echo "test $TEST" + echo "+201707052214 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+YYYYmmddHHMM" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 3. test YYYYmmddHHMM/10 + TEST="YYYYmmddHHMM/10" + echo "test $TEST" + echo "$(date +%Y%m%d%H%M)/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log $TEST" + check_log "Reschedule as: .* echo test $TEST" + test_gt0 "$RES" " test log reschedule $TEST" + plus_10min "$(date +%Y%m%d%H%M)" "%Y%m%d%H%M" + echo "DATE REF : $DATEREFERENCE" + check_conf "$DATEREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 4. test +YYYYmmddHHMM/10 + TEST="+YYYYmmddHHMM/10" + echo "test $TEST" + _refdate=$(date +%s) + _refdate=$((_refdate-86400)) + _refdate=$(date -j -r $_refdate +%Y%m%d%H%M) + echo "+$_refdate/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+YYYYmmddHHMM/10" + test_gt0 "$RES" " test log $TEST" + check_log "Reschedule as: .* echo test \+YYYYmmddHHMM/10" + test_gt0 "$RES" " test log reschedule $TEST" + plus_10min "$_refdate" "%Y%m%d%H%M" + echo "DATE REF : $DATEREFERENCE" + check_conf ".*$DATEREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 5. test YYYYmmdd + TEST="YYYYmmdd" + echo "test $TEST" + echo "$(date +%Y%m%d) echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 6. test +YYYYmmdd + TEST="+YYYYmmdd" + echo "test $TEST" + echo "+20170705 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+YYYYmmdd" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 7. test YYYYmmdd/10 + TEST="YYYYmmdd/10" + echo "test $TEST" + echo "$(date +%Y%m%d)/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log $TEST" + check_log "Reschedule as: .* echo test $TEST" + test_gt0 "$RES" " test log reschedule $TEST" + today_plus_10days + check_conf "$DATREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 8. test +YYYYmmdd/10 + TEST="+YYYYmmdd/10" + echo "test $TEST" + echo "+20170705/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+YYYYmmdd" + test_gt0 "$RES" " test log $TEST" + check_log "Reschedule as: .* echo test \+YYYYmmdd" + test_gt0 "$RES" " test log reschedule $TEST" + today_plus_10days + check_conf "$DATREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 9. test HHMM + TEST="HHMM" + echo "test $TEST" + echo "$(date +%H%M) echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf ".* echo test $TEST" + test_eq0 "$RES" " test conf" +# 10. test +HHMM + TEST="+HHMM" + echo "test $TEST" + echo "+0001 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+HHMM" + test_gt0 "$RES" " test log" + check_conf ".* echo test $TEST" + test_eq0 "$RES" " test conf" +# 11. test HHMM/10 + TEST="HHMM/10" + echo "test $TEST" + echo "$(date +%H%M)/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_log "Reschedule as: .* echo test $TEST" + test_gt0 "$RES" " test log reschedule $TEST" + plus_10min "$(date +%Y%m%d%H%M)" "%H%M" + check_conf "$DATEREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 12. test +HHMM/10 + TEST="+HHMM/10" + echo "test $TEST" + _refdate=$(date +%s) + _refdate=$((_refdate-86400)) + _refdate=$(date -j -r $_refdate +%Y%m%d%H%M) + echo "+$_refdate/10 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test \+HHMM/10" + test_gt0 "$RES" " test log" + check_log "Reschedule as: .* echo test \+HHMM/10" + test_gt0 "$RES" " test log reschedule $TEST" + plus_10min "$_refdate" "%H%M" + check_conf ".*$DATEREFERENCE.* echo test" + test_gt0 "$RES" " test conf" +# 13. test local's week name + TEST="Weekname" + echo "test $TEST" + echo "$(date +%A) echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 14. test local's week name and recurrency + TEST="Weekname/7" + echo "test $TEST" + echo "$(date +%A)/7 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf "_$(date +%A)/7 echo test" + test_gt0 "$RES" " test conf" +# 15. test local's week name and recurrency + TEST="Weekname/1" + echo "test $TEST" + echo "$(date +%A)/1 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + today_plus_1day + check_conf "$DATEREFERENCE/1 echo test" + test_gt0 "$RES" " test conf" +# 16. test local's month name + TEST="monthname" + echo "test $TEST" + echo "$(date +%B) echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_conf ".* echo test" + test_eq0 "$RES" " test conf" +# 17. test local's month name and recurrence + TEST="monthname/1" + echo "test $TEST" + echo "$(date +%B)/1 echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_log "Reschedule as: .* echo test $TEST" + test_gt0 "$RES" " test log reschedule" + today_plus_1month + check_conf "$DATEREFERENCE/1 echo test" + test_gt0 "$RES" " test conf" +# 18. test comment + TEST="#with a comment" + echo "test $TEST" + echo "$TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "Not executed: $TEST" + test_gt0 "$RES" " test log" + check_conf "$TEST" + test_gt0 "$RES" " test conf" +# 19. test Always + TEST="Always" + echo "test $TEST" + echo "$TEST echo test $TEST" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: $TEST echo test $TEST" + test_gt0 "$RES" " test log" + check_conf "$TEST echo test $TEST" + test_gt0 "$RES" " test conf" +# 20. return code not ull + TEST="Return code not null" + echo "test $TEST" + echo "$(date +%Y%m%d%H%M) echo test $TEST; false" > $CONF + ./vdcron -s0 -f $CONF + check_log "On .* execute: .* echo test $TEST" + test_gt0 "$RES" " test log" + check_log "Return code: 1 is not null. We keep this task" + test_gt0 "$RES" " test return code not null" + check_conf ".* echo test $TEST" + test_gt0 "$RES" " test conf" + +