commit - 0da605df6f1d2c7759af871153259ace75dda192
commit + 64ecf5f2b61d41d55cb2a7fa09733f1860aa304b
blob - 323289f5fb4f09574c16fd93f5c6c79b599283a3
blob + f92b6c484991d9d2d7ad14ea0db7164a421a0402
--- Makefile
+++ Makefile
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
+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
+#!/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"
+
+