The bats coverage for plugin :report keys has been uneven since the raw/global/computed split landed in PR #8640. This commit adds a single combined triplet test per settable property across app-json, builder, builder-dockerfile, builder-herokuish, builder-lambda, builder-nixpacks, builder-pack, builder-railpack, buildpacks, cron (maintenance), git (keep-git-dir, rev-env-var, source-image), logs (vector-sink, vector-global-image, vector-global-networks), network (attach-post-create, attach-post-deploy, initial-network), proxy (per-app type), ps (stop-timeout-seconds), registry (image-repo, push-on-release, push-extra-tags), storage (build/deploy/run mounts), and adds a new tests/unit/scheduler.bats and tests/unit/nginx-vhosts_properties.bats. Brings ps `procfile-path` and `stop-timeout-seconds` global getters in line with the #8640 convention (raw global, default resolved in computed). Documents the read-only and internal properties that surface in `:report` (or are written by Dokku) but cannot be managed by `:set` in a new `## Internal properties` section appended to each affected plugin's docs page.
372 lines
11 KiB
Bash
372 lines
11 KiB
Bash
#!/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 scripts" {
|
|
run deploy_app python
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing predeploy task from app.json: touch /app/predeploy.test"
|
|
assert_output_contains "Executing postdeploy task from app.json in ephemeral container: touch /app/postdeploy.test"
|
|
assert_output_contains "Executing prebuild task from app.json in ephemeral container: touch /app/prebuild.test" 0
|
|
|
|
run docker inspect "${TEST_APP}.web.1" --format "{{json .Config.Cmd}}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output '["/start","web"]'
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/prebuild.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/predeploy.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku run $TEST_APP ls /app/postdeploy.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
}
|
|
|
|
@test "(app-json) app.json scripts postdeploy" {
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app-heroku-postdeploy.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/heroku-postdeploy.test"
|
|
assert_output_contains "python3 -u release.py"
|
|
}
|
|
|
|
@test "(app-json) app.json scripts missing" {
|
|
run deploy_app nodejs-express-noappjson
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(app-json) app.json herokuish release" {
|
|
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing release task from Procfile"
|
|
assert_output_contains "SECRET_KEY: fjdkslafjdk"
|
|
|
|
run /bin/bash -c "curl $(dokku url $TEST_APP)/env"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"'
|
|
assert_output_contains '"SECRET_KEY": "fjdkslafjdk"'
|
|
}
|
|
|
|
@test "(app-json) app.json cnb release" {
|
|
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP selected pack"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Executing release task from Procfile"
|
|
assert_output_contains "SECRET_KEY: fjdkslafjdk"
|
|
|
|
run /bin/bash -c "curl $(dokku url $TEST_APP)/env"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains '"GLOBAL_SECRET": "fjdkslafjdk"'
|
|
assert_output_contains '"SECRET_KEY": "fjdkslafjdk"'
|
|
}
|
|
|
|
@test "(app-json) tini test" {
|
|
if ! dokku plugin:installed postgres; then
|
|
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-postgres.git"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
fi
|
|
|
|
if ! dokku plugin:installed redis; then
|
|
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-redis.git"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
fi
|
|
|
|
run /bin/bash -c "dokku config:set $TEST_APP SECRET_KEY_BASE=derp OTP_SECRET=1234 LOCAL_DOMAIN=dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:create $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:link $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:create $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:link $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku git:from-image $TEST_APP tootsuite/mastodon:v3.3.0"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku postgres:unlink $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku redis:unlink $TEST_APP $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku --force postgres:destroy $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku --force redis:destroy $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(app-json:set)" {
|
|
run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP copy_app_json_to_sub_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app-nonexistent.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app2.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/predeploy2.test"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/predeploy.test"
|
|
assert_output_contains "touch /app/predeploy2.test" 0
|
|
|
|
run /bin/bash -c "dokku builder:set $TEST_APP build-dir sub-app"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
assert_output_contains "touch /app/predeploy2.test"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app3.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "touch /app/predeploy.test" 0
|
|
assert_output_contains "touch /app/predeploy2.test" 0
|
|
assert_output_contains "touch /app/predeploy3.test"
|
|
}
|
|
|
|
@test "(app-json:report) appjson-path round-trip" {
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app2.json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app2.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app2.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output ""
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --format json"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains '"app-json-appjson-path":"app2.json"'
|
|
assert_output_contains '"app-json-computed-appjson-path":"app2.json"'
|
|
assert_output_contains '"app-json-global-appjson-path":""'
|
|
assert_output_contains "app-json-selected" 0
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-selected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
assert_output_contains "Invalid flag passed"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output ""
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "app.json"
|
|
}
|
|
|
|
@test "(app-json:report) appjson-path raw vs computed vs global" {
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output_not_exists
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path app.global.json"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path app.app.json"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-appjson-path"
|
|
assert_success
|
|
assert_output "app.app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-global-appjson-path"
|
|
assert_success
|
|
assert_output "app.global.json"
|
|
|
|
run /bin/bash -c "dokku app-json:report $TEST_APP --app-json-computed-appjson-path"
|
|
assert_success
|
|
assert_output "app.app.json"
|
|
|
|
run /bin/bash -c "dokku app-json:set $TEST_APP appjson-path"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku app-json:set --global appjson-path"
|
|
assert_success
|
|
}
|
|
|
|
copy_app_json_to_sub_app() {
|
|
local APP="$1"
|
|
local APP_REPO_DIR="$2"
|
|
[[ -z "$APP" ]] && local APP="$TEST_APP"
|
|
cp "$APP_REPO_DIR/app2.json" "$APP_REPO_DIR/sub-app/app.json"
|
|
cp "$APP_REPO_DIR/app3.json" "$APP_REPO_DIR/sub-app/app3.json"
|
|
}
|