diff --git a/.gitignore b/.gitignore
index 4e9c74d..e5c18f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,6 @@ doc/man/*.html
doc/man/*.htm
doc/man/*.texi
doc/man/*.man
-test/*
.*.swp
doc/man/*.[0-9]
doc/*.xml
diff --git a/Makefile b/Makefile
index 9b07e09..9b9f3e5 100644
--- a/Makefile
+++ b/Makefile
@@ -79,6 +79,8 @@ DOCBDOCS = ${DOCS:.text=.docbook}
DOC_ALL = ${HTMLDOCS} ${DBHTMLDOCS} ${TEXIDOCS} ${MANPDOCS} ${PDFDOCS}
+TEST_LOG_FILE = /tmp/ccollect/ccollect.log
+
#
# End user targets
#
@@ -202,9 +204,49 @@ dist: distclean documentation
shellcheck: ./ccollect
shellcheck -s sh -f gcc -x ./ccollect
-test: $(CCOLLECT_SOURCE) /tmp/ccollect
+test-nico: $(CCOLLECT_SOURCE) /tmp/ccollect
cd ./conf/sources/; for s in *; do CCOLLECT_CONF=../ ../../ccollect daily "$$s"; done
touch /tmp/ccollect/$$(ls /tmp/ccollect | head -n1).ccollect-marker
CCOLLECT_CONF=./conf ./ccollect -a daily
touch /tmp/ccollect/$$(ls /tmp/ccollect | head -n1).ccollect-marker
CCOLLECT_CONF=./conf ./ccollect -a -p daily
+
+test-dir-source:
+ mkdir -p /tmp/ccollect/source
+ cp -R -f ./* /tmp/ccollect/source
+
+test-dir-destination:
+ mkdir -p /tmp/ccollect/backup
+
+test-dir-destination-chint:
+ mkdir -p /tmp/ccollect/backup-chint
+
+test-fixed-intervals: $(CCOLLECT_SOURCE) test-dir-source test-dir-destination test-dir-destination-chint
+ for s in ./test/conf/sources/*; do \
+ CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} daily "$$(basename $$s)"; \
+ test "$$(ls -1 /tmp/ccollect/backup | wc -l)" -gt "0"; \
+ done
+ CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} -a -v daily
+ test "$$(ls -1 /tmp/ccollect/backup | wc -l)" -gt "0"
+ CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} -a -p daily
+ test "$$(ls -1 /tmp/ccollect/backup | wc -l)" -gt "0"
+ @printf "\nFixed intervals test ended successfully\n"
+
+test-interval-changing: $(CCOLLECT_SOURCE) test-dir-source test-dir-destination-chint
+ rm -rf /tmp/ccollect/backup-chint/*
+ test "$$(ls -1 /tmp/ccollect/backup-chint | wc -l)" -eq "0"
+ printf "3" > ./test/conf/sources/local-with-interval/intervals/daily
+ for x in 1 2 3 4 5; do CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} daily local-with-interval; done
+ test "$$(ls -1 /tmp/ccollect/backup-chint | wc -l)" -eq "3"
+ printf "5" > ./test/conf/sources/local-with-interval/intervals/daily
+ for x in 1 2 3 4 5 6 7; do CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} daily local-with-interval; done
+ test "$$(ls -1 /tmp/ccollect/backup-chint | wc -l)" -eq "5"
+ printf "4" > ./test/conf/sources/local-with-interval/intervals/daily
+ for x in 1 2 3 4 5 6; do CCOLLECT_CONF=./test/conf ./ccollect -l ${TEST_LOG_FILE} daily local-with-interval; done
+ test "$$(ls -1 /tmp/ccollect/backup-chint | wc -l)" -eq "4"
+ printf "3" > ./test/conf/sources/local-with-interval/intervals/daily
+ @printf "\nInterval changing test ended successfully\n"
+
+test: test-fixed-intervals test-interval-changing
+ test -f "${TEST_LOG_FILE}"
+ @printf "\nTests ended successfully\n"
diff --git a/test/conf/ccollect_local-with b/test/conf/ccollect_local-with
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/ccollect_source b/test/conf/ccollect_source
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/defaults/intervals/daily b/test/conf/defaults/intervals/daily
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/test/conf/defaults/intervals/daily
@@ -0,0 +1 @@
+5
diff --git a/test/conf/defaults/intervals/monthly b/test/conf/defaults/intervals/monthly
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/test/conf/defaults/intervals/monthly
@@ -0,0 +1 @@
+4
diff --git a/test/conf/defaults/intervals/normal b/test/conf/defaults/intervals/normal
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/test/conf/defaults/intervals/normal
@@ -0,0 +1 @@
+4
diff --git a/test/conf/defaults/intervals/weekly b/test/conf/defaults/intervals/weekly
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/test/conf/defaults/intervals/weekly
@@ -0,0 +1 @@
+2
diff --git a/test/conf/defaults/post_exec b/test/conf/defaults/post_exec
new file mode 100755
index 0000000..8aee58f
--- /dev/null
+++ b/test/conf/defaults/post_exec
@@ -0,0 +1,5 @@
+#!/bin/cat
+
+######################################################################
+General post_exec executed.
+######################################################################
diff --git a/test/conf/defaults/pre_exec b/test/conf/defaults/pre_exec
new file mode 100755
index 0000000..ecd2857
--- /dev/null
+++ b/test/conf/defaults/pre_exec
@@ -0,0 +1,5 @@
+#!/bin/cat
+
+######################################################################
+General pre__exec executed.
+######################################################################
diff --git a/test/conf/defaults/sources/exclude b/test/conf/defaults/sources/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/defaults/sources/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/defaults/sources/rsync_options b/test/conf/defaults/sources/rsync_options
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/defaults/sources/verbose b/test/conf/defaults/sources/verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/defaults/verbose b/test/conf/defaults/verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/delete_incomplete/delete_incomplete b/test/conf/sources/delete_incomplete/delete_incomplete
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/delete_incomplete/destination b/test/conf/sources/delete_incomplete/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/delete_incomplete/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/delete_incomplete/exclude b/test/conf/sources/delete_incomplete/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/delete_incomplete/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/delete_incomplete/source b/test/conf/sources/delete_incomplete/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/delete_incomplete/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/local-with&ersand/destination b/test/conf/sources/local-with&ersand/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/local-with&ersand/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/local-with&ersand/exclude b/test/conf/sources/local-with&ersand/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/local-with&ersand/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/local-with&ersand/source b/test/conf/sources/local-with&ersand/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/local-with&ersand/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/local-with-interval/delete_incomplete b/test/conf/sources/local-with-interval/delete_incomplete
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/local-with-interval/destination b/test/conf/sources/local-with-interval/destination
new file mode 100644
index 0000000..4de7e06
--- /dev/null
+++ b/test/conf/sources/local-with-interval/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup-chint
diff --git a/test/conf/sources/local-with-interval/exclude b/test/conf/sources/local-with-interval/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/local-with-interval/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/local-with-interval/intervals/daily b/test/conf/sources/local-with-interval/intervals/daily
new file mode 100644
index 0000000..e440e5c
--- /dev/null
+++ b/test/conf/sources/local-with-interval/intervals/daily
@@ -0,0 +1 @@
+3
\ No newline at end of file
diff --git a/test/conf/sources/local-with-interval/source b/test/conf/sources/local-with-interval/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/local-with-interval/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/local-with-interval/verbose b/test/conf/sources/local-with-interval/verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/local/destination b/test/conf/sources/local/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/local/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/local/exclude b/test/conf/sources/local/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/local/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/local/no_verbose b/test/conf/sources/local/no_verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/local/source b/test/conf/sources/local/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/local/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/source with spaces and interval/delete_incomplete b/test/conf/sources/source with spaces and interval/delete_incomplete
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/source with spaces and interval/destination b/test/conf/sources/source with spaces and interval/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/source with spaces and interval/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/source with spaces and interval/exclude b/test/conf/sources/source with spaces and interval/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/source with spaces and interval/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/source with spaces and interval/source b/test/conf/sources/source with spaces and interval/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/source with spaces and interval/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/source with spaces and interval/verbose b/test/conf/sources/source with spaces and interval/verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/very_verbose/destination b/test/conf/sources/very_verbose/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/very_verbose/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/very_verbose/exclude b/test/conf/sources/very_verbose/exclude
new file mode 100644
index 0000000..6b8710a
--- /dev/null
+++ b/test/conf/sources/very_verbose/exclude
@@ -0,0 +1 @@
+.git
diff --git a/test/conf/sources/very_verbose/source b/test/conf/sources/very_verbose/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/very_verbose/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/conf/sources/very_verbose/summary b/test/conf/sources/very_verbose/summary
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/very_verbose/verbose b/test/conf/sources/very_verbose/verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/very_verbose/very_verbose b/test/conf/sources/very_verbose/very_verbose
new file mode 100644
index 0000000..e69de29
diff --git a/test/conf/sources/with_exec/destination b/test/conf/sources/with_exec/destination
new file mode 100644
index 0000000..c2a7c55
--- /dev/null
+++ b/test/conf/sources/with_exec/destination
@@ -0,0 +1 @@
+/tmp/ccollect/backup
diff --git a/test/conf/sources/with_exec/post_exec b/test/conf/sources/with_exec/post_exec
new file mode 100755
index 0000000..abc0a40
--- /dev/null
+++ b/test/conf/sources/with_exec/post_exec
@@ -0,0 +1,5 @@
+#!/bin/cat
+
+######################################################################
+Source post_exec executed.
+######################################################################
diff --git a/test/conf/sources/with_exec/pre_exec b/test/conf/sources/with_exec/pre_exec
new file mode 100755
index 0000000..ba7b2af
--- /dev/null
+++ b/test/conf/sources/with_exec/pre_exec
@@ -0,0 +1,5 @@
+#!/bin/cat
+
+######################################################################
+Source pre_exec executed.
+######################################################################
diff --git a/test/conf/sources/with_exec/source b/test/conf/sources/with_exec/source
new file mode 100644
index 0000000..9e90576
--- /dev/null
+++ b/test/conf/sources/with_exec/source
@@ -0,0 +1 @@
+/tmp/ccollect/source
diff --git a/test/exec.sh b/test/exec.sh
deleted file mode 100755
index bdf601d..0000000
--- a/test/exec.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-host="home.schottelius.org"
-host=""
-set -x
-pcmd()
-{
- echo "$#", "$@"
- if [ "$host" ]; then
- ssh "$host" "$@"
- else
- $@
- fi
-}
-
-#pcmd ls /
-#pcmd cd /; ls "/is not there"
-pcmd cd / && ls
diff --git a/test/local.sh b/test/local.sh
deleted file mode 100755
index c2430fd..0000000
--- a/test/local.sh
+++ /dev/null
@@ -1 +0,0 @@
-CCOLLECT_CONF=./conf ./ccollect.sh daily -v local1
diff --git a/test/remote.sh b/test/remote.sh
deleted file mode 100755
index 2af364e..0000000
--- a/test/remote.sh
+++ /dev/null
@@ -1 +0,0 @@
-CCOLLECT_CONF=./conf ./ccollect.sh daily -v remote1
diff --git a/test/return-value.sh b/test/return-value.sh
deleted file mode 100755
index 554def0..0000000
--- a/test/return-value.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-ls /surely-not-existent$$ 2>/dev/null
-
-if [ "$?" -ne 0 ]; then
- echo "$?"
-fi
-
-ls /surely-not-existent$$ 2>/dev/null
-
-ret=$?
-
-if [ "$ret" -ne 0 ]; then
- echo "$ret"
-fi
-
-# if is true, ls is fales
-if [ "foo" = "foo" ]; then
- ls /surely-not-existent$$ 2>/dev/null
-fi
-
-# but that's still the return of ls and not of fi
-echo $?
diff --git a/test/test-ccollect-tools.sh b/test/test-ccollect-tools.sh
deleted file mode 100644
index 5980d04..0000000
--- a/test/test-ccollect-tools.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# 2009 Nico Schottelius (nico-ccollect at schottelius.org)
-#
-# This file is part of ccollect.
-#
-# ccollect is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# ccollect is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with ccollect. If not, see .
-#
-#
-# Test the ccollect tools suite
-#
-
-set -x
-
-tmp="$(mktemp /tmp/ccollect-tools.XXXXXXXXXXX)"
-
-
-rm -rf "${tmp}"
diff --git a/test/test-ccollect1.sh b/test/test-ccollect1.sh
deleted file mode 100755
index c5acf54..0000000
--- a/test/test-ccollect1.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Nico Schottelius
-# Date: 27-Jan-2007
-# Last Modified: -
-# Description:
-#
-
-ccollect=../ccollect.sh
-testdir="$(dirname $0)/test-backups"
-confdir="$(dirname $0)/test-config"
-source="$(hostname)"
-source_source="/tmp"
-interval="taeglich"
-
-
-# backup destination
-mkdir -p "$testdir"
-source_dest="$(cd "$testdir"; pwd -P)"
-
-# configuration
-mkdir -p "${confdir}/sources/${source}"
-ln -s "$source_dest" "${confdir}/sources/${source}/destination"
-echo "$source_source" > "${confdir}/sources/${source}/source"
-touch "${confdir}/sources/${source}/summary"
-touch "${confdir}/sources/${source}/verbose"
-
-mkdir -p "${confdir}/defaults/intervals/"
-echo 3 > "${confdir}/defaults/intervals/$interval"
-
-# create backups
-
-CCOLLECT_CONF="$confdir" "$ccollect" "$interval" -p -a
-touch "${source_source}/$(date +%s)-$$.1982"
-
-CCOLLECT_CONF="$confdir" "$ccollect" "$interval" -p -a
-touch "${source_source}/$(date +%s)-$$.42"
-
-CCOLLECT_CONF="$confdir" "$ccollect" "$interval" -p -a
-
-du -sh "$testdir"
-du -shl "$testdir"
-
-echo "Delete $testdir and $confdir after test"