The `post-app-rename-setup` trigger redirected `sed` output to the new app's VHOST file inside a loop over global vhosts, so each iteration clobbered the previous one and only the last global subdomain was rewritten. When no global vhost was set, the loop never ran and the new app's VHOST file was never written, leaving the renamed app with no domains. Copy the old app's VHOST file once as a baseline, then apply `sed -i` in place for each global vhost so substitutions accumulate. Guard against a missing global VHOST file and skip blank lines.
491 lines
14 KiB
Bash
491 lines
14 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load test_helper
|
|
|
|
setup() {
|
|
global_setup
|
|
[[ -f "$DOKKU_ROOT/VHOST" ]] && cp -fp "$DOKKU_ROOT/VHOST" "$DOKKU_ROOT/VHOST.bak"
|
|
create_app
|
|
}
|
|
|
|
teardown() {
|
|
destroy_app
|
|
[[ -f "$DOKKU_ROOT/VHOST.bak" ]] && mv "$DOKKU_ROOT/VHOST.bak" "$DOKKU_ROOT/VHOST" && chown dokku:dokku "$DOKKU_ROOT/VHOST"
|
|
global_teardown
|
|
}
|
|
|
|
@test "(domains) domains:help" {
|
|
run /bin/bash -c "dokku domains"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_output_contains "Manage domains used by the proxy"
|
|
help_output="$output"
|
|
|
|
run /bin/bash -c "dokku domains:help"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_output_contains "Manage domains used by the proxy"
|
|
assert_output "$help_output"
|
|
}
|
|
|
|
@test "(domains) domains" {
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null | grep ${TEST_APP}.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_output_contains "${TEST_APP}.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains:add" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP www.test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add $TEST_APP 2.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add $TEST_APP a--domain.with--hyphens"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add $TEST_APP .${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add $TEST_APP _"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "www.test.app.${DOKKU_DOMAIN}"
|
|
assert_output_contains "2.app.${DOKKU_DOMAIN}"
|
|
assert_output_contains a--domain.with--hyphens
|
|
assert_output_contains _
|
|
}
|
|
|
|
@test "(domains) domains:add (multiple)" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP www.test.app.${DOKKU_DOMAIN} 2.app.${DOKKU_DOMAIN} a--domain.with--hyphens"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "www.test.app.${DOKKU_DOMAIN}"
|
|
assert_output_contains "2.app.${DOKKU_DOMAIN}"
|
|
assert_output_contains a--domain.with--hyphens
|
|
}
|
|
|
|
@test "(domains) domains:add (duplicate)" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add $TEST_APP test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) domains:add (invalid)" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP http://test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
}
|
|
|
|
@test "(domains) domains:remove" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:remove $TEST_APP test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "test.app.${DOKKU_DOMAIN}" 0
|
|
}
|
|
|
|
@test "(domains) domains:remove (multiple)" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP www.test.app.${DOKKU_DOMAIN} test.app.${DOKKU_DOMAIN} 2.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:remove $TEST_APP www.test.app.${DOKKU_DOMAIN} test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "www.test.app.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "test.app.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "2.app.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains:remove (wildcard domain)" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP '*.${DOKKU_DOMAIN}'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$TEST_APP.${DOKKU_DOMAIN} *.${DOKKU_DOMAIN}"
|
|
|
|
run /bin/bash -c "dokku domains:remove $TEST_APP '*.${DOKKU_DOMAIN}'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$TEST_APP.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains:set" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP www.test.app.${DOKKU_DOMAIN} test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:set $TEST_APP 2.app.${DOKKU_DOMAIN} a--domain.with--hyphens"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "www.test.app.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "test.app.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "2.app.${DOKKU_DOMAIN}"
|
|
assert_output_contains a--domain.with--hyphens
|
|
}
|
|
|
|
@test "(domains) domains:reset" {
|
|
run /bin/bash -c "dokku domains:add $TEST_APP test.app.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:reset $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "test.app.${DOKKU_DOMAIN}" 0
|
|
}
|
|
|
|
@test "(domains) domains:add-global" {
|
|
run /bin/bash -c "dokku domains:add-global global.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report --global"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report 2>/dev/null | grep -qw 'global.${DOKKU_DOMAIN}'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) domains:add-global (multiple)" {
|
|
run /bin/bash -c "dokku domains:add-global global1.${DOKKU_DOMAIN} global2.${DOKKU_DOMAIN} global3.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report 2>/dev/null | grep -q global1.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report 2>/dev/null | grep -q global2.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report 2>/dev/null | grep -q global3.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) domains:clear-global" {
|
|
run /bin/bash -c "dokku domains:add-global global.dokku.invalid"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:add-global global.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:clear-global"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
refute_line "global.dokku.invalid"
|
|
refute_line "global.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains:remove-global" {
|
|
run /bin/bash -c "dokku domains:add-global global.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:remove-global global.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
refute_line "global.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains (multiple global domains)" {
|
|
run /bin/bash -c "dokku domains:add-global global1.${DOKKU_DOMAIN} global2.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run destroy_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run create_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "${TEST_APP}.global1.${DOKKU_DOMAIN}"
|
|
assert_output_contains "${TEST_APP}.global2.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) domains:set-global" {
|
|
run /bin/bash -c "dokku domains:add-global global1.${DOKKU_DOMAIN} global2.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:set-global global3.${DOKKU_DOMAIN} global4.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run destroy_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run create_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report $TEST_APP 2>/dev/null"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "${TEST_APP}.global1.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "${TEST_APP}.global2.${DOKKU_DOMAIN}" 0
|
|
assert_output_contains "${TEST_APP}.global3.${DOKKU_DOMAIN}"
|
|
assert_output_contains "${TEST_APP}.global4.${DOKKU_DOMAIN}"
|
|
}
|
|
|
|
@test "(domains) app name overlaps with global domain.tld" {
|
|
run /bin/bash -c "dokku domains:set-global dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku --quiet apps:create test.dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
# run domains:reset in order to invoke default vhost creation
|
|
run /bin/bash -c "dokku --quiet domains:reset test.dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report test.dokku.test --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "test.dokku.test"
|
|
|
|
run /bin/bash -c "dokku --force apps:destroy test.dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) app rename only renames domains associated with global domains" {
|
|
run /bin/bash -c "dokku domains:set-global ${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.${DOKKU_DOMAIN} $TEST_APP.dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku apps:rename $TEST_APP other-name"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report other-name --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "other-name.${DOKKU_DOMAIN} $TEST_APP.dokku.test"
|
|
|
|
run /bin/bash -c "dokku apps:rename other-name $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) app rename preserves all subdomains across multiple global vhosts" {
|
|
run /bin/bash -c "dokku domains:set-global ${DOKKU_DOMAIN} dokku.test"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.${DOKKU_DOMAIN} $TEST_APP.dokku.test custom.example.com"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku apps:rename $TEST_APP other-name"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report other-name --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "other-name.${DOKKU_DOMAIN} other-name.dokku.test custom.example.com"
|
|
|
|
run /bin/bash -c "dokku apps:rename other-name $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) app rename preserves custom domains when no global vhost is set" {
|
|
run /bin/bash -c "dokku domains:clear-global"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:set $TEST_APP custom.example.com other.example.org"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku apps:rename $TEST_APP other-name"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku domains:report other-name --domains-app-vhosts"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "custom.example.com other.example.org"
|
|
|
|
run /bin/bash -c "dokku apps:rename other-name $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(domains) verify warning on ipv4/ipv6 domain name" {
|
|
touch /etc/nginx/sites-enabled/default
|
|
rm "$DOKKU_ROOT/VHOST"
|
|
echo "127.0.0.1" >"$DOKKU_ROOT/VHOST"
|
|
run deploy_app
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Detected IPv4 domain name with nginx proxy enabled."
|
|
|
|
rm -f /etc/nginx/sites-enabled/default
|
|
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "Detected IPv4 domain name with nginx proxy enabled." 0
|
|
}
|
|
|
|
@test "(domains) https:443" {
|
|
run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.${DOKKU_DOMAIN}"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
run /bin/bash -c "dokku git:from-image $TEST_APP cockpithq/cockpit:core-latest"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}" 2
|
|
assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}:2019"
|
|
assert_output_contains "udp://$TEST_APP.${DOKKU_DOMAIN}:443"
|
|
assert_output_contains "http://$TEST_APP.${DOKKU_DOMAIN}:443" 0
|
|
|
|
run /bin/bash -c "dokku ports:report $TEST_APP --ports-map-detected"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "http:2019:2019 http:80:80 https:443:443 udp:443:443"
|
|
}
|