diff --git a/test/run b/test/run index b895f60c7e5dfd95dcb1f49fe3e8a653164fb4cf..ba9a50297f142096851a3bc0a9c128cadd6a7abe 100755 --- a/test/run +++ b/test/run @@ -12,15 +12,23 @@ if [ $# -eq 0 ]; then echo "ERROR: No test project name has been passed." exit 1 fi + +# Determining system utility executables (darwin compatibility check) +READLINK_EXEC="readlink" +MKTEMP_EXEC="mktemp" +if (echo "$OSTYPE" | egrep -qs 'darwin'); then + ! type -a "greadlink" &>"/dev/null" || READLINK_EXEC="greadlink" + ! type -a "gmktemp" &>"/dev/null" || MKTEMP_EXEC="gmktemp" +fi test_project=${1} -test_dir="$(readlink -zf $(dirname "${BASH_SOURCE[0]}"))" -image_dir=$(readlink -zf ${test_dir}/..) +test_dir="$($READLINK_EXEC -zf $(dirname "${BASH_SOURCE[0]}"))" +image_dir=$($READLINK_EXEC -zf ${test_dir}/..) scripts_url="file://${image_dir}/.sti/bin" -cid_file=$(mktemp -u --suffix=.cid) +cid_file=$($MKTEMP_EXEC -u --suffix=.cid) -# Since we built the candidate image locally, we don't want S2I attempt to pull +# Since we built the candidate image locally, we don't want S2I to attempt to pull # it from Docker hub -s2i_args="--force-pull=false" +s2i_args="--force-pull=false --loglevel=2" # Read exposed port from image meta data test_port="$(docker inspect --format='{{range $key, $value := .ContainerConfig.ExposedPorts }}{{$key}}{{end}}' ${IMAGE_NAME} | sed 's/\/.*//')" @@ -38,11 +46,15 @@ container_exists() { } container_ip() { - docker inspect --format="{{ .NetworkSettings.IPAddress }}" $(cat $cid_file) + if (echo "$OSTYPE" | egrep -qs 'darwin'); then + docker-machine ip + else + docker inspect --format="{{ .NetworkSettings.IPAddress }}" $(cat $cid_file) + fi } run_s2i_build() { - s2i build ${sti_args} file://${test_dir}/${test_project} ${IMAGE_NAME} ${IMAGE_NAME}-${test_project} + s2i build --incremental=true ${sti_args} file://${test_dir}/${test_project} ${IMAGE_NAME} ${IMAGE_NAME}-${test_project} } prepare() { @@ -58,6 +70,7 @@ prepare() { git config user.email "build@localhost" && git config user.name "builder" git add -A && git commit -m "Sample commit" popd >/dev/null + run_s2i_build } run_test_application() { @@ -80,7 +93,7 @@ cleanup() { check_result() { local result="$1" if [[ "$result" != "0" ]]; then - info "TEST FAILED for ${test_project} (${result})" + info "TEST FAILED for ${test_project} (exit code: ${result})" cleanup exit $result fi @@ -116,6 +129,12 @@ test_connection() { local attempt=1 local result=1 while [ $attempt -le $max_attempts ]; do + echo "Sending GET request to http://$(container_ip):${test_port}/" + if (echo "$OSTYPE" | egrep -qs 'darwin'); then + echo "Warning for OSX users: if you can't access the container's IP ${container_ip} directly (because you use boot2docker for example)" + echo "you should run the curl command in a container, for example using:" + echo "docker run --rm -it sequenceiq/alpine-curl curl -s -w %{http_code} -o /dev/null http://$(container_ip):${test_port}/" + fi response_code=$(curl -s -w %{http_code} -o /dev/null http://$(container_ip):${test_port}/) status=$? if [ $status -eq 0 ]; then