sfeed_update tests: add initial automated tests - sfeed_tests - sfeed tests and RSS and Atom files
(HTM) git clone git://git.codemadness.org/sfeed_tests
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit d8e5c3bd772a5480dff77936b2642e496e741e38
(DIR) parent f6225f213e6abbe40b67ced09edfbe16f762018d
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 14 Dec 2023 20:35:36 +0100
sfeed_update tests: add initial automated tests
Diffstat:
C input/sfeed_update/test.sh -> inpu… | 0
M input/sfeed_update/test.sh | 172 +++++++++++++++++++++++++++++--
2 files changed, 164 insertions(+), 8 deletions(-)
---
(DIR) diff --git a/input/sfeed_update/test.sh b/input/sfeed_update/manual.sh
(DIR) diff --git a/input/sfeed_update/test.sh b/input/sfeed_update/test.sh
@@ -1,9 +1,165 @@
#!/bin/sh
-sfeed_update /dev/null # should say feeds function is not defined.
-sfeed_update nonexistant
-sfeed_update `pwd` # directory
-sfeed_update /root # directory, no access
-sfeed_update /root/.sfeed/sfeedrc # no access
-
-#sfeed_update "" # empty: loads default
-#sfeed_update # loads default
+SFEED_UPDATE="sfeed_update"
+
+# expect(expect, got, [extra])
+expect() {
+ if [ "$1" != "$2" ]; then
+ extra="$3"
+ [ "$extra" = "" ] || extra="($extra)"
+ echo "Expected \"$1\", but got \"$2\" $extra" >&2
+ exit 1
+ fi
+}
+
+# test normal execution, all succesful.
+test_normal() {
+ rc="$(mktemp)"
+ log_stdout="$(mktemp)"
+ log_stderr="$(mktemp)"
+ feedpath="$(mktemp -d)"
+
+ cat > "$rc" <<!
+sfeedpath="$feedpath"
+
+feeds() {
+ # feed <name> <feedurl> [basesiteurl] [encoding]
+ feed "1" "file:///dev/null"
+ feed "2" "file:///dev/null"
+ feed "3" "file:///dev/null"
+}
+!
+
+ "$SFEED_UPDATE" "$rc" >"$log_stdout" 2>"$log_stderr"
+ expect "0" "$?" "exit statuscode"
+
+ linecount=$(wc -l < "$log_stdout")
+ linecount=$((linecount+0))
+ expect "3" "$linecount" "all 3 lines should be written to stdout"
+
+ linecount=$(wc -l < "$log_stderr")
+ linecount=$((linecount+0))
+ expect "0" "$linecount" "0 lines should be written to stderr"
+
+ test -d "$feedpath"
+ expect "0" "$?" "directory should exist: $feedpath"
+
+ for i in 1 2 3; do
+ f="$feedpath/$i"
+ test -f "$f"
+ expect "0" "$?" "file should exist: $f"
+ done
+
+ # cleanup test
+ rm -rf "$feedpath"
+ rm -f "$log_stdout" "$log_stderr" "$rc"
+
+ echo "test_normal: test OK" >&2
+}
+
+# test execution where a feed failed.
+test_one_fail() {
+ rc="$(mktemp)"
+ log_stdout="$(mktemp)"
+ log_stderr="$(mktemp)"
+ feedpath="$(mktemp -d)"
+
+ cat > "$rc" <<!
+sfeedpath="$feedpath"
+
+feeds() {
+ # feed <name> <feedurl> [basesiteurl] [encoding]
+ feed "1" "file:///dev/null"
+ feed "2" "file:///dev/null_fail"
+ feed "3" "file:///dev/null"
+}
+!
+
+ "$SFEED_UPDATE" "$rc" >"$log_stdout" 2> "$log_stderr"
+ expect "1" "$?" "exit statuscode"
+
+ linecount=$(wc -l < "$log_stdout")
+ linecount=$((linecount+0))
+ expect "2" "$linecount" "2 lines should be written to stdout"
+
+ linecount=$(wc -l < "$log_stderr")
+ linecount=$((linecount+0))
+ expect "1" "$linecount" "1 line should be written to stderr"
+
+ test -d "$feedpath"
+ expect "0" "$?" "directory should exist: $feedpath"
+
+ for i in 1 2 3; do
+ f="$feedpath/$i"
+ test -f "$f"
+ expect "0" "$?" "file should exist: $f"
+ done
+
+ # cleanup test
+ rm -rf "$feedpath"
+ rm -f "$log_stdout" "$log_stderr" "$rc"
+
+ echo "test_one_fail: test OK" >&2
+}
+
+# test SIGTERM
+test_sigterm() {
+ rc="$(mktemp)"
+ log_stdout="$(mktemp)"
+ log_stderr="$(mktemp)"
+ feedpath="$(mktemp -d)"
+
+ cat > "$rc" <<!
+sfeedpath="$feedpath"
+
+# override
+feed() {
+ _feed "\$@"
+ sleep 2
+}
+
+feeds() {
+ # feed <name> <feedurl> [basesiteurl] [encoding]
+ feed "1" "file:///dev/null"
+ feed "2" "file:///dev/null"
+ feed "3" "file:///dev/null"
+}
+!
+
+ "$SFEED_UPDATE" "$rc" >"$log_stdout" 2> "$log_stderr" &
+ pid="$!"
+ {
+ sleep 1
+ kill -TERM "$pid"
+ } &
+ wait "$pid"
+ expect "143" "$?" "exit statuscode"
+
+ test -d "$feedpath"
+ expect "0" "$?" "directory should exist: $feedpath"
+
+ # TODO: test that temporary directory is properly cleaned up.
+
+ # cleanup test
+ rm -rf "$feedpath"
+ rm -f "$log_stdout" "$log_stderr" "$rc"
+
+ echo "test_sigterm: test OK" >&2
+}
+
+test_normal
+test_one_fail
+
+# NOTE: SIGINT can't reliably be tested.
+test_sigterm
+
+# TODO:
+# - test weird feednames.
+# - check filenames, '*', '/', newline.
+# - test override functions.
+# - test error messages, grep for "FAIL (ENCODING)" etc.
+# - test merge, order logic.
+# - test empty fields (for xargs etc).
+# - add existing test-cases and make them automatic:
+# - ecoding/
+# - exitstatus/
+# - merge/