diff --git a/README.md b/README.md index 1783870953ec3ffd9d7e43b84cdd750b521eded4..fa3a7e5875410c03c067effcfaada4eed4e1580c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ -# tumbler-thumbnailing +tumbler-thumbnailing test +Debug output variables: + +* DEBUG=1 will enable all output, stdout and stderr (disabled by default) diff --git a/config.sh b/config.sh new file mode 100644 index 0000000000000000000000000000000000000000..2f61bbd497c2b276672e04e8d39326257c1474c6 --- /dev/null +++ b/config.sh @@ -0,0 +1 @@ +. "${TESTDIR}/common/inherit-config.sh" diff --git a/resources/media/documents/lorem_ipsum.pdf b/resources/media/documents/lorem_ipsum.pdf new file mode 100644 index 0000000000000000000000000000000000000000..619776ef3f8f043cba6c6bbae2672e8309823c58 Binary files /dev/null and b/resources/media/documents/lorem_ipsum.pdf differ diff --git a/resources/media/documents/lorem_presentation.odp b/resources/media/documents/lorem_presentation.odp new file mode 100644 index 0000000000000000000000000000000000000000..b4df0bc3b10ba542b4a7912c8e1d7036eddd35fc Binary files /dev/null and b/resources/media/documents/lorem_presentation.odp differ diff --git a/resources/media/documents/lorem_spreadsheet.ods b/resources/media/documents/lorem_spreadsheet.ods new file mode 100644 index 0000000000000000000000000000000000000000..9a5833a8db3e2a92d04d3e4220cad5053f7d43cf Binary files /dev/null and b/resources/media/documents/lorem_spreadsheet.ods differ diff --git a/resources/media/documents/lorem_text.txt b/resources/media/documents/lorem_text.txt new file mode 100644 index 0000000000000000000000000000000000000000..a8245a605d4972ef13111e20109c15e6560e7911 --- /dev/null +++ b/resources/media/documents/lorem_text.txt @@ -0,0 +1,11 @@ +Sed quis felis ac enim condimentum tempus. Suspendisse imperdiet consequat urna +a ultrices. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices +posuere cubilia Curae; Vestibulum faucibus sem et sem placerat dapibus. In +dictum elit in dolor porta ullamcorper. Nulla facilisi. Etiam ac neque nunc. +Donec scelerisque pulvinar feugiat. Nulla congue varius diam rhoncus dapibus. +Ut metus libero, porttitor vitae vestibulum sed, interdum quis dui. Suspendisse +sagittis dui at ante semper at semper erat tincidunt. Nullam sed dolor semper +turpis suscipit congue. Nulla diam ipsum, elementum id fringilla eu, tincidunt +fringilla lorem. Ut nec est id arcu facilisis bibendum sed vel nisl. Nullam +venenatis, nisi et ornare scelerisque, enim ligula blandit nunc, a porttitor +elit tellus eleifend sapien. diff --git a/resources/media/documents/more_lorem_ipsum.odt b/resources/media/documents/more_lorem_ipsum.odt new file mode 100644 index 0000000000000000000000000000000000000000..fa38dd13d149656873667d5666f9166d646d05dd Binary files /dev/null and b/resources/media/documents/more_lorem_ipsum.odt differ diff --git a/resources/media/images/320px-European_Common_Frog_Rana_temporaria.jpg b/resources/media/images/320px-European_Common_Frog_Rana_temporaria.jpg new file mode 100644 index 0000000000000000000000000000000000000000..105bb39903ba68b2a047bc93fb5c78a49eca14ad Binary files /dev/null and b/resources/media/images/320px-European_Common_Frog_Rana_temporaria.jpg differ diff --git a/resources/media/images/collabora-logo-big.png b/resources/media/images/collabora-logo-big.png new file mode 100644 index 0000000000000000000000000000000000000000..8de06b5e720431f0217910eedc2c049360372bcd Binary files /dev/null and b/resources/media/images/collabora-logo-big.png differ diff --git a/resources/media/videos/big_buck_bunny_smaller.ogv b/resources/media/videos/big_buck_bunny_smaller.ogv new file mode 100644 index 0000000000000000000000000000000000000000..010216c906fb2363e600b2c7293e979431c52314 Binary files /dev/null and b/resources/media/videos/big_buck_bunny_smaller.ogv differ diff --git a/run-test.sh b/run-test.sh new file mode 100755 index 0000000000000000000000000000000000000000..c393b28dab907f0866a471e80274b9b5bb45cace --- /dev/null +++ b/run-test.sh @@ -0,0 +1,164 @@ +#!/bin/bash +# vim: set sts=4 sw=4 et tw=0 : + +set -e + +TESTDIR=$(cd $(dirname $0); pwd; cd - >/dev/null 2>&1) +. "${TESTDIR}/config.sh" + +. "${TESTDIR}/common/update-test-path" + +MEDIA_RESOURCE_DIR="$(cd "${TESTDIR}/resources/media" && pwd)" + +######### +# Setup # +######### +trap "setup_failure" EXIT + +set -x +# Need a DBus session for this test +ensure_dbus_session +set +x + +setup_success + +########### +# Execute # +########### +_launch_monitor() { + # Launch tumblerd manually to allow LD_PRELOAD to work for + # chaiwala-apparmor-tumbler-tests + pkill tumblerd || true + /usr/lib/*-linux-gnu*/tumbler-1/tumblerd & + TUMBLERD_PID=$! + sleep 5 + # Launch and monitor the thumbnailer + ${GDBUS} monitor --session --dest "${addr}" --object-path "${obj_path}" >"${logfile}" & + GDBUS_MONITOR_PID=$! +} + +_kill_monitor_return() { + kill -s TERM $GDBUS_MONITOR_PID || true + kill -s TERM $TUMBLERD_PID || true + return $1 +} + +bash_arrays_to_gvariant_as() { + local i converted="['$1'" + shift + for i in "$@"; do + converted+=", '$i'" + done + converted+="]" + echo "${converted}" +} + +_check_uris_have_thumbnail() { + local size=$1 + local uris=$2 + for i in "${uris[@]}"; do + local thumb="${HOME}/.cache/thumbnails/${size}/$(echo -n "${i}" | md5sum | cut -f1 -d\ ).png" + say $thumb + if [[ ! -f "${thumb}" ]]; then + whine "Couldn't find thumbnail $thumb, file $i didn't get thumbnailed!?" + ret=1 + fi + done +} + +_generate_thumbnails() { + set -x + local i ret files logfile addr obj_path method uris filetypes + local copy + ret=0 + local size="$1" + local special_dir="$2" + shift 2 + files=("$@") + logfile="${WORKDIR}/monitor-tumblerd.log" + addr="org.freedesktop.thumbnails.Thumbnailer1" + obj_path="/org/freedesktop/thumbnails/Thumbnailer1" + method="org.freedesktop.thumbnails.Thumbnailer1.Queue" + uris=() + filetypes=() + + for i in "${files[@]}"; do + # Tumbler's AppArmor profile doesn't necessarily let it read the + # apertis-tests directory if we're running uninstalled. Copy the + # file to a more realistic location, which exercises the AppArmor + # profile better anyway. + if [ $(( $RANDOM % 2 )) = 0 ] && [ -e "/home/shared/$special_dir" ]; then + copy="/home/shared/$special_dir/apertis-tests__$(basename "$i")" + else + copy="$HOME/$special_dir/apertis-tests__$(basename "$i")" + fi + + cp -v "$i" "$copy" + + # Need path relative to / + # FIXME: This doesn't do whitespace/special character escaping, etc + uris+=("file://$copy") + filetypes+=($(file --mime-type "$copy" | cut -d ":" -f 2 | tr -d ' ')) + done + + # Clear out old thumbnails. + rm -rf ${HOME}/.cache/thumbnails/ + + _launch_monitor + + # Files to thumbnail + ${GDBUS} call --session --dest "${addr}" --object-path "${obj_path}" \ + --method "${method}" \ + "$(bash_arrays_to_gvariant_as "${uris[@]}")" \ + "$(bash_arrays_to_gvariant_as "${filetypes[@]}")" \ + "${size}" foreground 0 + + # Wait for thumbnailing to finish + # FIXME: Race condition! Fix me to loop on the monitor log file. + _sleep 2 + _check_uris_have_thumbnail $size $uris || ret=1 + + rm -f "/home/shared/$special_dir"/apertis-tests__* + rm -f "${HOME}/$special_dir"/apertis-tests__* + + _kill_monitor_return $ret + set +x +} + +test_image_normal_thumbnail_generation() { + _generate_thumbnails normal Pictures "${MEDIA_RESOURCE_DIR}/images"/* +} + +test_image_large_thumbnail_generation() { + _generate_thumbnails large Pictures "${MEDIA_RESOURCE_DIR}/images"/* +} + +test_video_normal_thumbnail_generation() { + _generate_thumbnails normal Videos "${MEDIA_RESOURCE_DIR}/videos"/* +} + +test_video_large_thumbnail_generation() { + _generate_thumbnails large Videos "${MEDIA_RESOURCE_DIR}/videos"/* +} + +test_document_normal_thumbnail_generation() { + _generate_thumbnails normal Documents "${MEDIA_RESOURCE_DIR}/documents"/*.{pdf,odt} +} + +test_document_large_thumbnail_generation() { + _generate_thumbnails large Documents "${MEDIA_RESOURCE_DIR}/documents"/*.{pdf,odt} +} + +trap "test_failure" EXIT + +# NOTE: Tumbler cannot thumbnail audio files +src_test_pass <<-EOF +test_image_normal_thumbnail_generation +test_image_large_thumbnail_generation +test_document_normal_thumbnail_generation +test_document_large_thumbnail_generation +test_video_normal_thumbnail_generation +test_video_large_thumbnail_generation +EOF + +test_success diff --git a/tumbler-thumbnailing.yaml b/tumbler-thumbnailing.yaml new file mode 100644 index 0000000000000000000000000000000000000000..88a5746cacf64cf8428bec492e4c3fca445aa54e --- /dev/null +++ b/tumbler-thumbnailing.yaml @@ -0,0 +1,19 @@ +metadata: + name: tumbler-thumbnailing + format: "Lava-Test-Shell Test Definition 1.0" + description: "Check that all thumbnailing features of tumbler are + working properly (large, small, videos, documents, images)." + maintainer: "luis.araujo@collabora.co.uk" + scope: + - functional + devices: + - i386 + environment: + - lava-test-shell + +run: + steps: + - common/run-test-in-systemd --timeout=900 --user=user --name=run-test env DEBUG=2 ./run-test.sh + +parse: + pattern: ^(?P<test_case_id>[a-zA-Z0-9_\-\./]+):\s*(?P<result>pass|fail|skip|unknown)$