diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-06 08:59:47 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-06 08:59:47 +0300 |
| commit | ee380ce13969c3ea0a507d51fa6456e32d68d085 (patch) | |
| tree | 7f8dda5a7be10ab3e71d67f129710acfb694ff17 /tests | |
| parent | 8bb74397a084e4accb815a2d4b69ba1a8e3f7ed6 (diff) | |
Clarify render logs and interrupt cleanup
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/cli.sh | 102 | ||||
| -rwxr-xr-x | tests/helpers.sh | 5 |
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 |
