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)$