[tests] Add test suite
diff --git a/tests/test_helpers.bash b/tests/test_helpers.bash
new file mode 100644
index 0000000..791710e
--- /dev/null
+++ b/tests/test_helpers.bash
@@ -0,0 +1,52 @@
+
+# check dependencies
+(
+    type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
+    type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
+)>&2
+
+# Assert that $1 is the outputof a command $2
+function assert {
+    local expected_output=$1
+    shift
+    actual_output=$("$@")
+    if ! [ "$actual_output" = "$expected_output" ]; then
+        echo "expected: \"$expected_output\", actual: \"$actual_output\""
+        false
+    fi
+}
+
+# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.
+function retry {
+    local attempts=$1
+    shift
+    local delay=$1
+    shift
+    local i
+
+    for ((i=0; i < attempts; i++)); do
+        run "$@"
+        if [ "$status" -eq 0 ]; then
+            return 0
+        fi
+        sleep $delay
+    done
+
+    echo "Command \"$@\" failed $attempts times. Status: $status. Output: $output" >&2
+    false
+}
+
+function get_jenkins_url {
+    echo "http://localhost:$(docker port $SUT_CONTAINER 8080 | cut -d: -f2)"
+}
+
+function test_url {
+    run curl --output /dev/null --silent --head --fail --connect-timeout 30 --max-time 60 $(get_jenkins_url)$1
+    if [ "$status" -eq 0 ]; then
+        true
+    else
+        echo "URL $(get_jenkins_url)$1 failed" >&2
+        echo "output: $output" >&2
+        false
+    fi
+}