blob: f7d7c45ccd6baf6709a94a2337a6abbe23b0fd93 [file] [log] [blame]
Carlos Sanchez8cb67a02016-04-20 13:40:44 +02001#!/bin/bash
Thomas LEVEIL58695bb2015-09-04 21:51:10 +00002
3# check dependencies
4(
5 type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
6 type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
7)>&2
8
9# Assert that $1 is the outputof a command $2
10function assert {
11 local expected_output=$1
12 shift
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020013 local actual_output
14 actual_output=$("$@")
Carlos Sanchez2d68b192016-04-20 13:26:59 +020015 actual_output="${actual_output//[$'\t\r\n']}" # remove newlines
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000016 if ! [ "$actual_output" = "$expected_output" ]; then
Carlos Sanchezc24ef822016-02-29 12:10:31 +010017 echo "expected: \"$expected_output\""
18 echo "actual: \"$actual_output\""
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000019 false
20 fi
21}
22
23# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.
24function retry {
25 local attempts=$1
26 shift
27 local delay=$1
28 shift
29 local i
30
31 for ((i=0; i < attempts; i++)); do
32 run "$@"
33 if [ "$status" -eq 0 ]; then
34 return 0
35 fi
36 sleep $delay
37 done
38
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020039 echo "Command \"$*\" failed $attempts times. Status: $status. Output: $output" >&2
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000040 false
41}
42
43function get_jenkins_url {
Carlos Sanchezc24ef822016-02-29 12:10:31 +010044 if [ -z "${DOCKER_HOST}" ]; then
Carlos Sanchezc3e7a0c2016-04-20 16:39:04 +020045 if [ "$(uname)" == "Darwin" ]; then
46 DOCKER_IP=docker.local
47 else
48 DOCKER_IP=localhost
49 fi
Carlos Sanchezd1f26652015-09-11 18:54:47 +020050 else
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020051 DOCKER_IP=$(echo "$DOCKER_HOST" | sed -e 's|tcp://\(.*\):[0-9]*|\1|')
Carlos Sanchezd1f26652015-09-11 18:54:47 +020052 fi
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020053 echo "http://$DOCKER_IP:$(docker port "$SUT_CONTAINER" 8080 | cut -d: -f2)"
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000054}
55
Carlos Sanchez5a51d0a2016-04-21 13:50:25 +020056function get_jenkins_password {
57 docker logs "$SUT_CONTAINER" 2>&1 | grep -A 2 "Please use the following password to proceed to installation" | tail -n 1
58}
59
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000060function test_url {
Carlos Sanchez5a51d0a2016-04-21 13:50:25 +020061 run curl --user "admin:$(get_jenkins_password)" --output /dev/null --silent --head --fail --connect-timeout 30 --max-time 60 "$(get_jenkins_url)$1"
Thomas LEVEIL58695bb2015-09-04 21:51:10 +000062 if [ "$status" -eq 0 ]; then
63 true
64 else
65 echo "URL $(get_jenkins_url)$1 failed" >&2
66 echo "output: $output" >&2
67 false
68 fi
69}
Carlos Sanchez5fc9cd02016-02-28 15:25:18 +010070
71function cleanup {
Carlos Sanchez8cb67a02016-04-20 13:40:44 +020072 docker kill "$1" &>/dev/null ||:
73 docker rm -fv "$1" &>/dev/null ||:
Carlos Sanchez5fc9cd02016-02-28 15:25:18 +010074}