Commit Diff


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"
+  
+