When setting the `--app` flag, there was a special case for the config plugin. This plugin used to take the `--no-restart` flag as the first argument - and still did until this change - resulting in an invalid call to the plugin subcommands. What is worse is that this functionality carried over to all other plugins as they were rewritten in golang, and thus the issue spread without us knowing. The fix is to support GNU flag parsing rules, which Golang does not do by default (Because Of Reasons™). Switching to `github.com/spf13/pflag` fixes this issue, and also allows positional arguments to be placed wherever, even in the middle of flags. Closes #4255
220 lines
6.9 KiB
Bash
220 lines
6.9 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load test_helper
|
|
|
|
setup() {
|
|
global_setup
|
|
export DOKKU_HOST=dokku.me
|
|
create_app
|
|
}
|
|
|
|
teardown() {
|
|
destroy_app
|
|
unset DOKKU_HOST
|
|
global_teardown
|
|
}
|
|
|
|
@test "(client) unconfigured DOKKU_HOST" {
|
|
unset DOKKU_HOST
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_exit_status 20
|
|
}
|
|
|
|
@test "(client) no args should print help" {
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh | head -1 | grep -E 'Usage: dokku \[.+\] COMMAND <app>.*'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(client) arg parsing" {
|
|
run /bin/bash -c "dokku config:set --global GLOBAL_KEY=VALUE"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
|
|
run /bin/bash -c "dokku config:set $TEST_APP GLOBAL_KEY=VALUE"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:export --merged --format shell"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
|
|
common_output="$output"
|
|
run /bin/bash -c "dokku config:export $TEST_APP --merged --format shell"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$common_output"
|
|
|
|
run /bin/bash -c "dokku config:export --merged $TEST_APP --format shell"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$common_output"
|
|
|
|
run /bin/bash -c "dokku config:export --merged --format shell $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$common_output"
|
|
|
|
run /bin/bash -c "dokku --app $TEST_APP config:export --merged --format shell"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
assert_output "$common_output"
|
|
}
|
|
|
|
@test "(client) apps:create AND apps:destroy with random name" {
|
|
setup_client_repo
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:create"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
git remote | grep dokku
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:destroy --force"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(client) apps:create AND apps:destroy with name" {
|
|
setup_client_repo
|
|
local test_app_name=test-apps-create-with-name
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:create $test_app_name"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
git remote | grep dokku
|
|
git remote -v | grep $test_app_name
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh apps:destroy --force"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(client) config:set" {
|
|
run ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:set $TEST_APP test_var=true test_var2=\"hello world\"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:get $TEST_APP test_var2 | grep -q 'hello world'"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(client) config:unset" {
|
|
run ${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:set $TEST_APP test_var=true test_var2=\"hello world\"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:get $TEST_APP test_var"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:unset $TEST_APP test_var"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh config:get $TEST_APP test_var | grep test_var"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
}
|
|
|
|
@test "(client) domains:add" {
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:add $TEST_APP www.test.app.dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:add $TEST_APP test.app.dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
@test "(client) domains:remove" {
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:add $TEST_APP test.app.dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:remove $TEST_APP test.app.dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
refute_line "test.app.dokku.me"
|
|
}
|
|
|
|
@test "(client) domains:clear" {
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:add $TEST_APP test.app.dokku.me"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh domains:clear $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
}
|
|
|
|
# @test "(client) ps" {
|
|
# # CI support: 'Ah. I just spoke with our Docker expert --
|
|
# # looks like docker exec is built to work with docker-under-libcontainer,
|
|
# # but we're using docker-under-lxc. I don't have an estimated time for the fix, sorry
|
|
# skip "circleci does not support docker exec at the moment."
|
|
# deploy_app
|
|
# run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh ps $TEST_APP | grep -q 'node web.js'"
|
|
# echo "output: $output"
|
|
# echo "status: $status"
|
|
# assert_success
|
|
# }
|
|
|
|
@test "(client) ps:start" {
|
|
deploy_app
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh ps:stop $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh ps:start $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
for CID_FILE in $DOKKU_ROOT/$TEST_APP/CONTAINER.*; do
|
|
run /bin/bash -c "docker ps -q --no-trunc | grep -q $(< $CID_FILE)"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
done
|
|
}
|
|
|
|
@test "(client) ps:stop" {
|
|
deploy_app
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh ps:stop $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
for CID_FILE in $DOKKU_ROOT/$TEST_APP/CONTAINER.*; do
|
|
run /bin/bash -c "docker ps -q --no-trunc | grep -q $(< $CID_FILE)"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_failure
|
|
done
|
|
}
|
|
|
|
@test "(client) ps:restart" {
|
|
deploy_app
|
|
run /bin/bash -c "${BATS_TEST_DIRNAME}/../../contrib/dokku_client.sh ps:restart $TEST_APP"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
for CID_FILE in $DOKKU_ROOT/$TEST_APP/CONTAINER.*; do
|
|
run /bin/bash -c "docker ps -q --no-trunc | grep -q $(< $CID_FILE)"
|
|
echo "output: $output"
|
|
echo "status: $status"
|
|
assert_success
|
|
done
|
|
}
|