diff --git a/plugins/common/docker.go b/plugins/common/docker.go index e99fca680..18c90b41e 100644 --- a/plugins/common/docker.go +++ b/plugins/common/docker.go @@ -3,6 +3,7 @@ package common import ( "fmt" "os" + "strconv" "strings" "time" ) @@ -64,6 +65,17 @@ func ContainerWait(containerID string) bool { if err != nil { return false } + + stdout := result.StdoutContents() + if stdout != "0" { + exitCode, err := strconv.Atoi(stdout) + if err != nil { + return false + } + + return exitCode == 0 + } + return result.ExitCode == 0 } diff --git a/tests/unit/app-json-4.bats b/tests/unit/app-json-4.bats new file mode 100644 index 000000000..283d88034 --- /dev/null +++ b/tests/unit/app-json-4.bats @@ -0,0 +1,125 @@ +#!/usr/bin/env bats +load test_helper + +setup_file() { + install_pack +} + +setup() { + global_setup + create_app +} + +teardown() { + destroy_app + global_teardown +} + +@test "(app-json) app.json failing dokku.predeploy" { + run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_dokku_predeploy + echo "output: $output" + echo "status: $status" + assert_output_contains "Execution of predeploy task failed" + assert_failure +} + +@test "(app-json) app.json failing dokku.postdeploy" { + run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_dokku_postdeploy + echo "output: $output" + echo "status: $status" + assert_output_contains "Execution of postdeploy task failed" + assert_failure +} + +@test "(app-json) app.json failing postdeploy" { + run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_postdeploy + echo "output: $output" + echo "status: $status" + assert_output_contains "Execution of first deploy postdeploy task failed" + assert_failure +} + +@test "(app-json) app.json failing release" { + run /bin/bash -c "dokku builder-herokuish:set $TEST_APP allowed true" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_failing_release + echo "output: $output" + echo "status: $status" + assert_output_contains "Execution of release task failed" + assert_failure +} + +add_failing_dokku_predeploy() { + local APP="$1" + local APP_REPO_DIR="$2" + [[ -z "$APP" ]] && local APP="$TEST_APP" + + cat >"$APP_REPO_DIR/app.json" <"$APP_REPO_DIR/app.json" <"$APP_REPO_DIR/app.json" <"$APP_REPO_DIR/Procfile" <>"$APP_REPO_DIR/requirements.txt" } +add_requirements_txt_cnb() { + local APP="$1" + local APP_REPO_DIR="$2" + [[ -z "$APP" ]] && local APP="$TEST_APP" + + mv "$APP_REPO_DIR/app-cnb.json" "$APP_REPO_DIR/app.json" + add_requirements_txt "$APP" "$APP_REPO_DIR" +} + create_network() { local NETWORK_NAME="${1:-$TEST_NETWORK}"