Merge pull request #174 from phreaker0/tests
implemented a simple test which will take snapshots over a whole year…
This commit is contained in:
commit
50bd897cb7
|
@ -0,0 +1,55 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# this test will take hourly, daily and monthly snapshots
|
||||||
|
# for the whole year of 2017 in the timezone Europe/Vienna
|
||||||
|
# sanoid is run hourly and no snapshots are pruned
|
||||||
|
|
||||||
|
. ../common/lib.sh
|
||||||
|
|
||||||
|
POOL_NAME="sanoid-test-1"
|
||||||
|
POOL_TARGET="" # root
|
||||||
|
RESULT="/tmp/sanoid_test_result"
|
||||||
|
RESULT_CHECKSUM="aa15e5595b0ed959313289ecb70323dad9903328ac46e881da5c4b0f871dd7cf"
|
||||||
|
|
||||||
|
# UTC timestamp of start and end
|
||||||
|
START="1483225200"
|
||||||
|
END="1514761199"
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
setup
|
||||||
|
checkEnvironment
|
||||||
|
disableTimeSync
|
||||||
|
|
||||||
|
# set timezone
|
||||||
|
ln -sf /usr/share/zoneinfo/Europe/Vienna /etc/localtime
|
||||||
|
|
||||||
|
timestamp=$START
|
||||||
|
|
||||||
|
mkdir -p "${POOL_TARGET}"
|
||||||
|
truncate -s 5120M "${POOL_TARGET}"/zpool.img
|
||||||
|
|
||||||
|
zpool create -f "${POOL_NAME}" "${POOL_TARGET}"/zpool.img
|
||||||
|
|
||||||
|
function cleanUp {
|
||||||
|
zpool export "${POOL_NAME}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# export pool in any case
|
||||||
|
trap cleanUp EXIT
|
||||||
|
|
||||||
|
while [ $timestamp -le $END ]; do
|
||||||
|
date --utc --set @$timestamp; date; "${SANOID}" --cron --verbose
|
||||||
|
timestamp=$((timestamp+3600))
|
||||||
|
done
|
||||||
|
|
||||||
|
saveSnapshotList "${POOL_NAME}" "${RESULT}"
|
||||||
|
|
||||||
|
# hourly daily monthly
|
||||||
|
verifySnapshotList "${RESULT}" 8759 366 12 "${RESULT_CHECKSUM}"
|
||||||
|
|
||||||
|
# hourly count should be 8760 but one hour get's lost because of DST
|
||||||
|
|
||||||
|
# daily count should be 365 but one additional daily is taken
|
||||||
|
# because the DST change leads to a day with 25 hours
|
||||||
|
# which will trigger an additional daily snapshot
|
|
@ -0,0 +1,10 @@
|
||||||
|
[sanoid-test-1]
|
||||||
|
use_template = production
|
||||||
|
|
||||||
|
[template_production]
|
||||||
|
hourly = 36
|
||||||
|
daily = 30
|
||||||
|
monthly = 3
|
||||||
|
yearly = 0
|
||||||
|
autosnap = yes
|
||||||
|
autoprune = no
|
|
@ -0,0 +1,107 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function setup {
|
||||||
|
export LANG=C
|
||||||
|
export LANGUAGE=C
|
||||||
|
export LC_ALL=C
|
||||||
|
|
||||||
|
export SANOID="../../sanoid"
|
||||||
|
|
||||||
|
# make sure that there is no cache file
|
||||||
|
rm -f /var/cache/sanoidsnapshots.txt
|
||||||
|
|
||||||
|
# install needed sanoid configuration files
|
||||||
|
[ -f sanoid.conf ] && cp sanoid.conf /etc/sanoid/sanoid.conf
|
||||||
|
cp ../../sanoid.defaults.conf /etc/sanoid/sanoid.defaults.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkEnvironment {
|
||||||
|
ASK=1
|
||||||
|
|
||||||
|
which systemd-detect-virt > /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
systemd-detect-virt --vm > /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# we are in a vm
|
||||||
|
ASK=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $ASK -eq 1 ]; then
|
||||||
|
set +x
|
||||||
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||||
|
echo "you should be running this test in a"
|
||||||
|
echo "dedicated vm, as it will mess with your system!"
|
||||||
|
echo "Are you sure you wan't to continue? (y)"
|
||||||
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
||||||
|
set -x
|
||||||
|
|
||||||
|
read -n 1 c
|
||||||
|
if [ "$c" != "y" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function disableTimeSync {
|
||||||
|
# disable ntp sync
|
||||||
|
which timedatectl > /dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
timedatectl set-ntp 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSnapshotList {
|
||||||
|
POOL_NAME="$1"
|
||||||
|
RESULT="$2"
|
||||||
|
|
||||||
|
zfs list -t snapshot -o name -Hr "${POOL_NAME}" | sort > "${RESULT}"
|
||||||
|
|
||||||
|
# clear the seconds for comparing
|
||||||
|
sed -i 's/\(autosnap_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9]:[0-9][0-9]:\)[0-9][0-9]_/\100_/g' "${RESULT}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function verifySnapshotList {
|
||||||
|
RESULT="$1"
|
||||||
|
HOURLY_COUNT=$2
|
||||||
|
DAILY_COUNT=$3
|
||||||
|
MONTHLY_COUNT=$4
|
||||||
|
CHECKSUM="$5"
|
||||||
|
|
||||||
|
failed=0
|
||||||
|
message=""
|
||||||
|
|
||||||
|
hourly_count=$(grep -c "autosnap_.*_hourly" < "${RESULT}")
|
||||||
|
daily_count=$(grep -c "autosnap_.*_daily" < "${RESULT}")
|
||||||
|
monthly_count=$(grep -c "autosnap_.*_monthly" < "${RESULT}")
|
||||||
|
|
||||||
|
if [ "${hourly_count}" -ne "${HOURLY_COUNT}" ]; then
|
||||||
|
failed=1
|
||||||
|
message="${message}hourly snapshot count is wrong: ${hourly_count}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${daily_count}" -ne "${DAILY_COUNT}" ]; then
|
||||||
|
failed=1
|
||||||
|
message="${message}daily snapshot count is wrong: ${daily_count}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${monthly_count}" -ne "${MONTHLY_COUNT}" ]; then
|
||||||
|
failed=1
|
||||||
|
message="${message}monthly snapshot count is wrong: ${monthly_count}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
checksum=$(sha256sum "${RESULT}" | cut -d' ' -f1)
|
||||||
|
if [ "${checksum}" != "${CHECKSUM}" ]; then
|
||||||
|
failed=1
|
||||||
|
message="${message}result checksum mismatch\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${failed}" -eq 0 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "TEST FAILED:" >&2
|
||||||
|
echo -n -e "${message}" >&2
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# run's all the available tests
|
||||||
|
|
||||||
|
for test in */; do
|
||||||
|
if [ ! -x "${test}/run.sh" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
testName="${test%/}"
|
||||||
|
|
||||||
|
LOGFILE=/tmp/sanoid_test_run_"${testName}".log
|
||||||
|
|
||||||
|
pushd . > /dev/null
|
||||||
|
|
||||||
|
echo -n "Running test ${testName} ... "
|
||||||
|
cd "${test}"
|
||||||
|
echo | bash run.sh > "${LOGFILE}" 2>&1
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "[PASS]"
|
||||||
|
else
|
||||||
|
echo "[FAILED] (see ${LOGFILE})"
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd > /dev/null
|
||||||
|
done
|
Loading…
Reference in New Issue