diff --git a/tests/clean-image.sh b/tests/clean-image.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5f667a02e34ff00322fb82454c057b3bbe4a033d
--- /dev/null
+++ b/tests/clean-image.sh
@@ -0,0 +1,8 @@
+#!/bin/bash -eux
+
+image=$1
+
+/data/indiehosters/tests/runtime-clean-image.sh $image
+rm -rf /data/domains/$image.test
+
+ssh core@backup.dev "rm -rf $image.test"
diff --git a/tests/image.sh b/tests/image.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0f9701ae55d5a46c824b95849645787183b64bad
--- /dev/null
+++ b/tests/image.sh
@@ -0,0 +1,40 @@
+#!/bin/bash -eux
+
+cp /data/indiehosters/unit-files/* /etc/systemd/system && sudo systemctl daemon-reload
+
+image=$1
+
+# prepare data
+mkdir -p /data/import/$image.test/TLS
+cp /data/indiehosters/scripts/unsecure-certs/example.dev.pem /data/import/$image.test/TLS/$image.test.pem
+if [ "$image" == "static-git" ]; then
+  mkdir -p /data/import/$image.test/static-git
+  echo "https://github.com/indiehosters/website.git" > /data/import/$image.test/static-git/GITURL
+fi
+
+# start image from import
+systemctl start $image@$image.test
+
+if [ "$image" == "wordpress" ]; then
+  sleep 40
+else
+  sleep 10
+fi
+
+# tests
+systemctl list-units | grep "$image\.test" | grep -c failed | grep 0
+ip=`docker inspect --format {{.NetworkSettings.IPAddress}} $image-$image.test`
+curl -L $ip
+
+# start image from backup
+/data/indiehosters/tests/runtime-clean-image.sh $image
+if [ "$image" == "wordpress" ]; then
+  echo should fail until implementation of mysql backup importer
+fi
+systemctl start $image@$image.test
+sleep 10
+
+# tests
+systemctl list-units | grep "$image\.test" | grep -c failed | grep 0
+ip=`docker inspect --format {{.NetworkSettings.IPAddress}} $image-$image.test`
+curl $ip
diff --git a/tests/main.sh b/tests/main.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ec4a3035442b7aa197b2a812419e118234a069d4
--- /dev/null
+++ b/tests/main.sh
@@ -0,0 +1,19 @@
+#!/bin/bash -eux
+
+# testing static
+/data/indiehosters/tests/image.sh static
+
+# clean static tests
+/data/indiehosters/tests/clean-image.sh static
+
+# testing static-git
+/data/indiehosters/tests/image.sh static-git
+
+# clean static tests
+/data/indiehosters/tests/clean-image.sh static-git
+
+# testing wordpress
+/data/indiehosters/tests/image.sh wordpress
+
+# clean static tests
+/data/indiehosters/tests/clean-image.sh wordpress
diff --git a/tests/runtime-clean-image.sh b/tests/runtime-clean-image.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2766ebbedb9bfebada9fad882e0e92cf48588b3a
--- /dev/null
+++ b/tests/runtime-clean-image.sh
@@ -0,0 +1,10 @@
+#!/bin/bash -eux
+
+image=$1
+
+systemctl stop *@$image.test.timer
+systemctl stop *@$image.test
+systemctl reset-failed
+systemctl list-units | grep -c "$image\.test" | grep 0
+rm -rf /data/import/$image.test
+rm -rf /data/runtime/domains/$image.test