summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-06 08:59:47 +0300
committerPaul Buetow <paul@buetow.org>2026-06-06 08:59:47 +0300
commitee380ce13969c3ea0a507d51fa6456e32d68d085 (patch)
tree7f8dda5a7be10ab3e71d67f129710acfb694ff17 /tests
parent8bb74397a084e4accb815a2d4b69ba1a8e3f7ed6 (diff)
Clarify render logs and interrupt cleanup
Diffstat (limited to 'tests')
-rwxr-xr-xtests/cli.sh102
-rwxr-xr-xtests/helpers.sh5
2 files changed, 102 insertions, 5 deletions
diff --git a/tests/cli.sh b/tests/cli.sh
index 905f6a4..c2dbca2 100755
--- a/tests/cli.sh
+++ b/tests/cli.sh
@@ -792,7 +792,8 @@ test_default_output_reports_routine_progress() {
)
test::assert_contains 'Processing 01-landscape.jpg to' "$output"
- test::assert_contains 'Generating ' "$output"
+ test::assert_contains 'Rendering header template into ' "$output"
+ test::assert_contains 'Rendering view template into ' "$output"
test::assert_contains 'Creating thumb ' "$output"
test::assert_not_contains 'Verbose:' "$output"
test::teardown
@@ -820,7 +821,7 @@ test_quiet_output_suppresses_routine_progress() {
)
test::assert_not_contains 'Processing ' "$output"
- test::assert_not_contains 'Generating ' "$output"
+ test::assert_not_contains 'Rendering ' "$output"
test::assert_not_contains 'Creating thumb ' "$output"
test::assert_file_exists "$TEST_TMPDIR/dist/photoalbum.json"
test::teardown
@@ -1047,7 +1048,7 @@ test_repeated_output_flags_use_last_value() {
"$verbose_last_output"
test::assert_not_contains 'Verbose:' "$quiet_last_output"
test::assert_not_contains 'Processing ' "$quiet_last_output"
- test::assert_not_contains 'Generating ' "$quiet_last_output"
+ test::assert_not_contains 'Rendering ' "$quiet_last_output"
test::teardown
}
@@ -2023,6 +2024,9 @@ test_integration_generates_album_outputs_and_cleans() {
test::assert_contains 'Next 2 pictures' "$page_html"
test::assert_contains 'No EXIF details available.' "$details_html"
test::assert_contains '<div class="details-layout">' "$details_html"
+ test::assert_contains '<div class="details-photo-column">' "$details_html"
+ test::assert_contains '<div class="navigator details-navigator">' \
+ "$details_html"
test::assert_contains "class='view details-photo" "$details_html"
test::assert_contains 'href="1-1.html">Image view</a>' "$details_html"
test::assert_contains '<title>Integration album</title>' "$top_index_html"
@@ -2506,7 +2510,7 @@ test_generate_sighup_cleans_staging_dir() {
PATH="$fake_bin:$PATH" \
TEST_BLOCKING_MAGICK_STARTED="$started_file" \
TEST_BLOCKING_MAGICK_RELEASE="$release_file" \
- "$TEST_PHOTOALBUM" --generate
+ exec "$TEST_PHOTOALBUM" --generate
) > "$output_file" 2>&1 &
generate_pid=$!
@@ -2554,6 +2558,91 @@ test_generate_sighup_cleans_staging_dir() {
test::teardown
}
+test_generate_sigint_terminates_imagemagick_jobs() {
+ local config_file
+ local fake_bin
+ local output_file
+ local release_file
+ local started_file
+ local terminated_file
+ local -i generate_pid=0
+ local -i release_pid=0
+ local -i status=0
+ local -i waited=0
+
+ test::setup
+ fake_bin="$TEST_TMPDIR/bin"
+ config_file="$TEST_TMPDIR/photoalbum.conf"
+ output_file="$TEST_TMPDIR/generate.out"
+ release_file="$TEST_TMPDIR/release-magick"
+ started_file="$TEST_TMPDIR/magick-started"
+ terminated_file="$TEST_TMPDIR/magick-terminated"
+
+ test::install_fake_imagemagick "$fake_bin"
+ PATH="$fake_bin:$PATH" \
+ test::generate_fixture_images "$TEST_TMPDIR/incoming"
+ test::install_blocking_imagemagick "$fake_bin"
+ mkdir -p "$TEST_TMPDIR/dist"
+ printf 'old dist\n' > "$TEST_TMPDIR/dist/index.html"
+ test::write_album_config \
+ "$config_file" "$TEST_TMPDIR/incoming" "$TEST_TMPDIR/dist" \
+ 'SIGINT album' 40
+
+ (
+ cd "$TEST_TMPDIR"
+ PATH="$fake_bin:$PATH" \
+ TEST_BLOCKING_MAGICK_STARTED="$started_file" \
+ TEST_BLOCKING_MAGICK_RELEASE="$release_file" \
+ TEST_BLOCKING_MAGICK_TERMINATED="$terminated_file" \
+ exec env --default-signal=INT "$TEST_PHOTOALBUM" --generate
+ ) > "$output_file" 2>&1 &
+ generate_pid=$!
+
+ while [ ! -f "$started_file" ] && kill -0 "$generate_pid" 2>/dev/null; do
+ if (( waited >= 100 )); then
+ touch "$release_file"
+ wait "$generate_pid" || true
+ echo 'FAIL: timed out waiting for fake ImageMagick to start' >&2
+ cat "$output_file" >&2
+ exit 1
+ fi
+ (( ++waited ))
+ sleep 0.05
+ done
+
+ if [ ! -f "$started_file" ]; then
+ touch "$release_file"
+ wait "$generate_pid" || true
+ echo 'FAIL: generate exited before fake ImageMagick started' >&2
+ cat "$output_file" >&2
+ exit 1
+ fi
+
+ ( sleep 5; touch "$release_file" ) &
+ release_pid=$!
+
+ kill -INT "$generate_pid"
+ set +e
+ wait "$generate_pid"
+ status=$?
+ set -e
+
+ touch "$release_file"
+ kill "$release_pid" 2>/dev/null || true
+ wait "$release_pid" 2>/dev/null || true
+
+ if (( status != 130 )); then
+ echo "FAIL: expected SIGINT exit status 130, got $status" >&2
+ cat "$output_file" >&2
+ exit 1
+ fi
+
+ test::assert_file_exists "$terminated_file"
+ test "$(<"$TEST_TMPDIR/dist/index.html")" = 'old dist'
+ test::assert_no_staging_dirs "$TEST_TMPDIR"
+ test::teardown
+}
+
test_generate_tar_timeout_preserves_dist() {
local config_file
local fake_bin
@@ -2622,7 +2711,7 @@ test_generate_template_failure_preserves_dist() {
test::capture_failure_output "$TEST_PHOTOALBUM" --generate
)
- test::assert_contains 'Generating' "$output"
+ test::assert_contains 'Rendering preview template into ' "$output"
test "$(<"$TEST_TMPDIR/dist/index.html")" = 'old index'
test::assert_path_absent "$TEST_TMPDIR/dist/photos/01-landscape.jpg"
test::assert_path_absent "$TEST_TMPDIR/dist/photoalbum.json"
@@ -3464,6 +3553,9 @@ main() {
'--generate SIGHUP cleans staging directory' \
test_generate_sighup_cleans_staging_dir
test::run_case \
+ '--generate SIGINT terminates ImageMagick jobs' \
+ test_generate_sigint_terminates_imagemagick_jobs
+ test::run_case \
'--generate tar timeout preserves final dist' \
test_generate_tar_timeout_preserves_dist
test::run_case \
diff --git a/tests/helpers.sh b/tests/helpers.sh
index 155cfc0..c8158bd 100755
--- a/tests/helpers.sh
+++ b/tests/helpers.sh
@@ -365,6 +365,11 @@ if [ "${1:-}" = identify ]; then
exit 0
fi
+if [ -n "${TEST_BLOCKING_MAGICK_TERMINATED:-}" ]; then
+ trap 'printf "terminated\n" > "$TEST_BLOCKING_MAGICK_TERMINATED"; exit 143' \
+ INT TERM HUP
+fi
+
printf 'started\n' > "${TEST_BLOCKING_MAGICK_STARTED:?}"
while [ ! -e "${TEST_BLOCKING_MAGICK_RELEASE:?}" ]; do
sleep 0.1