timewarrior/test/timemachine
2019-03-02 16:59:36 +01:00

66 lines
1.2 KiB
Bash
Executable file

#!/bin/bash
function current_date()
{
date --rfc-3339=date
}
function random_minute()
{
echo "0$( rand -M 60 )" | sed "s|.\+\(..\)\$|\1|g"
}
function default_hours()
{
seq -w 0 23
}
if ! command -v faketime >/dev/null 2>&1 ; then
echo "timemachine requires libfaketime to be installed!"
exit 1
fi
# parse options/arguments
until [[ -z "${1}" ]] ; do
case "${1}" in
--minute)
shift
minutes="${minutes} ${1}"
;;
--hour)
shift
hours="${hours} ${1}"
;;
--day)
shift
days="${days} ${1}"
;;
--fail-at-end)
fail_at_end=1
;;
-*)
echo "Unknown option '${1}'"
exit 1
;;
*)
tests="${tests} ${1}"
;;
esac
shift
done
for day in ${days-$( current_date )} ; do
for minute in ${minutes-$( random_minute )} ; do
for hour in ${hours-$( default_hours )} ; do
date="${day}T${hour}:${minute}"
for single_test in ${tests} ; do
echo "Running test ${single_test} at ${date}"
faketime "${date}" "${single_test}"
if [[ $? -ne 0 ]] ; then
echo "Test ${single_test} broke at ${date}!"
[[ ${fail_at_end-0} -ne 0 ]] || break 2
fi
done
done
done
done