Merge branch 'master' into master

This commit is contained in:
Nicholas Ghobrial
2019-07-13 01:50:19 -04:00
committed by GitHub
230 changed files with 4823 additions and 887 deletions

View File

@@ -0,0 +1,5 @@
WAIT=2 # wait 2 seconds
TIMEOUT=5 # set timeout to 5 seconds
ATTEMPTS=2 # try 2 times
/ nodejs/express

View File

@@ -0,0 +1 @@
web=1

View File

@@ -0,0 +1,11 @@
FROM node:4
EXPOSE 3001/udp
EXPOSE 3000/tcp
EXPOSE 3003
COPY . /app
WORKDIR /app
RUN npm install
CMD npm start

View File

@@ -0,0 +1,8 @@
###############################
# DEVELOPMENT #
###############################
# Procfile for development using the new threaded worker (scheduler, twitter stream and delayed job)
cron: node worker.js
web: node web.js
worker: node worker.js

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -e
output="$(curl -s -S "$1")"
echo "$output"
test "$output" == "nodejs/express"

View File

@@ -0,0 +1,13 @@
{
"name": "node-example",
"version": "0.0.1",
"dependencies": {
"express": "2.5.x"
},
"engines": {
"node": "4.2.x"
},
"scripts": {
"start": "false"
}
}

View File

@@ -0,0 +1,12 @@
var express = require('express');
var app = express.createServer(express.logger());
app.get('/', function(request, response) {
response.send('nodejs/express');
});
var port = process.env.PORT || 5000;
app.listen(port, function() {
console.log("Listening on " + port);
});

View File

@@ -0,0 +1,6 @@
function worker() {
console.log('sleeping for 60 seconds');
setTimeout(worker, 60 * 1000);
}
worker();

View File

@@ -1,6 +1,6 @@
source "https://rubygems.org"
ruby '2.2.4'
ruby '2.6.2'
gem 'compass', ">= 1.0.1"
gem 'sass-globbing'

View File

@@ -6,6 +6,7 @@
# SC2029 - Note that, unescaped, this expands on the client side - https://github.com/koalaman/shellcheck/wiki/SC2029
# SC2034 - VAR appears unused - https://github.com/koalaman/shellcheck/wiki/SC2034
# SC2046 - Quote this to prevent word splitting - https://github.com/koalaman/shellcheck/wiki/SC2046
# SC2064 - Use single quotes, otherwise this expands now rather than when signalled.
# SC2068 - Double quote array expansions to avoid re-splitting elements - https://github.com/koalaman/shellcheck/wiki/SC2068
# SC2086 - Double quote to prevent globbing and word splitting - https://github.com/koalaman/shellcheck/wiki/SC2086
# SC2119 - Use 'function "$@"' if function's $1 should mean script's $1 - https://github.com/koalaman/shellcheck/wiki/SC2119

4
tests/unit/10_apps.bats Executable file → Normal file
View File

@@ -2,11 +2,11 @@
load test_helper
setup () {
setup() {
global_setup
}
teardown () {
teardown() {
global_teardown
}

View File

@@ -134,6 +134,35 @@ teardown() {
assert_success
}
@test "(ps:scale) dockerfile dokku-scale" {
run /bin/bash -c "dokku ps:scale $TEST_APP web=2"
echo "output: $output"
echo "status: $status"
assert_success
deploy_app dockerfile-dokku-scale
CIDS=""
for CID_FILE in $DOKKU_ROOT/$TEST_APP/CONTAINER.web.*; do
CIDS+=$(< $CID_FILE)
CIDS+=" "
done
CIDS_PATTERN=$(echo $CIDS | sed -e "s: :|:g")
run /bin/bash -c "docker ps -q --no-trunc | egrep \"$CIDS_PATTERN\" | wc -l | grep 1"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:scale $TEST_APP web=1"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku ps:report $TEST_APP --ps-can-scale"
echo "output: $output"
echo "status: $status"
assert_output "false"
}
@test "(ps) dockerfile with procfile" {
deploy_app dockerfile-procfile
run /bin/bash -c "dokku ps:stop $TEST_APP"

View File

@@ -13,6 +13,7 @@ teardown() {
}
@test "(ps) ps:inspect" {
dokku config:set "$TEST_APP" key=value key=value=value
deploy_app dockerfile
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)

View File

@@ -109,11 +109,11 @@ teardown() {
assert_success
done
run /bin/bash -c "dokku ps:scale $TEST_APP web=0 worker=0"
run /bin/bash -c "dokku ps:scale $TEST_APP web=0 worker=0 invalid-process=0"
echo "output: $output"
echo "status: $status"
assert_success
for PROC_TYPE in web worker; do
for PROC_TYPE in web worker invalid-process; do
CIDS=""
shopt -s nullglob
for CID_FILE in $DOKKU_ROOT/$TEST_APP/CONTAINER.$PROC_TYPE.*; do

View File

@@ -155,6 +155,32 @@ teardown() {
run /bin/bash -c "dokku --app $TEST_APP config:show"
echo "output: $output"
echo "status: "$stat
assert_output "=====> $TEST_APP env vars"$'\nBKEY: true\naKey: true\nbKey: true\nzKey: true'
}
@test "(config) config:export" {
run /bin/bash -c "dokku --app $TEST_APP config:set zKey=true bKey=true BKEY=true aKey=true"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku config:export --format docker-args $TEST_APP"
echo "output: $output"
echo "status: "$stat
assert_output "--env=BKEY='true' --env=aKey='true' --env=bKey='true' --env=zKey='true'"
run /bin/bash -c "dokku config:export --format shell $TEST_APP"
echo "output: $output"
echo "status: "$stat
assert_output "BKEY='true' aKey='true' bKey='true' zKey='true' "
run /bin/bash -c "dokku config:export --format json $TEST_APP"
echo "output: $output"
echo "status: "$stat
assert_output '{"BKEY":"true","aKey":"true","bKey":"true","zKey":"true"}'
run /bin/bash -c "dokku config:export --format json-list $TEST_APP"
echo "output: $output"
echo "status: "$stat
assert_output '[{"name":"BKEY","value":"true"},{"name":"aKey","value":"true"},{"name":"bKey","value":"true"},{"name":"zKey","value":"true"}]'
}

View File

@@ -45,6 +45,11 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku domains:add $TEST_APP .dokku.me"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku domains $TEST_APP 2>/dev/null"
echo "output: $output"
echo "status: $status"
@@ -173,6 +178,11 @@ teardown() {
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:clear $TEST_APP"
echo "output: $output"
echo "status: $status"
@@ -183,6 +193,11 @@ teardown() {
echo "status: $status"
assert_success
refute_line test.app.dokku.me
run /bin/bash -c "dokku domains:report $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(domains) domains:add-global" {
@@ -191,6 +206,11 @@ teardown() {
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 2>/dev/null | egrep -qw '^global.dokku.me\$'"
echo "output: $output"
echo "status: $status"
@@ -219,6 +239,25 @@ teardown() {
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.me"
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.me"
}
@test "(domains) domains:remove-global" {
run /bin/bash -c "dokku domains:add-global global.dokku.me"
echo "output: $output"
@@ -269,3 +308,22 @@ teardown() {
assert_line ${TEST_APP}.global3.dokku.me
assert_line ${TEST_APP}.global4.dokku.me
}
@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 domains:clear in order to invoke default vhost creation
dokku --quiet apps:create test.dokku.test
dokku --quiet domains:clear test.dokku.test
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"
dokku --force apps:destroy test.dokku.test
}

View File

@@ -136,7 +136,7 @@ teardown() {
deploy_app
create_attach_network
run dokku nginx:build-config "$TEST_APP"
run /bin/bash -c "dokku nginx:build-config $TEST_APP"
echo "output: "$output
echo "status: "$status
assert_success

194
tests/unit/20_resource.bats Normal file
View File

@@ -0,0 +1,194 @@
#!/usr/bin/env bats
load test_helper
setup() {
global_setup
create_app
}
teardown() {
destroy_app
global_teardown
}
@test "(resource) resource:limit" {
run /bin/bash -c "dokku resource:limit $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_contains "resource limits $TEST_APP information"
deploy_app
run /bin/bash -c "dokku resource:limit --memory 512MB $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "0"
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:limit --memory 1024MB --process-type worker $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:limit-clear --process-type worker $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:limit-clear --process-type web $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:limit-clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.Memory}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "0"
}
@test "(resource) resource:reserve" {
run /bin/bash -c "dokku resource:reserve $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_contains "resource reservation $TEST_APP information"
deploy_app
run /bin/bash -c "dokku resource:reserve --memory 512MB $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "0"
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:reserve --memory 1024MB --process-type worker $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku resource:reserve --cpu 0.5 --process-type worker $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
# run /bin/bash -c "docker inspect --format '{{.HostConfig.NanoCpus}}' $CID"
# echo "output: $output"
# echo "status: $status"
# assert_output "500000000"
run /bin/bash -c "dokku resource:reserve-clear --process-type worker $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:reserve-clear --process-type web $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "536870912"
run /bin/bash -c "dokku resource:reserve-clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
dokku ps:rebuild "$TEST_APP"
CID=$(< $DOKKU_ROOT/$TEST_APP/CONTAINER.web.1)
run /bin/bash -c "docker inspect --format '{{.HostConfig.MemoryReservation}}' $CID"
echo "output: $output"
echo "status: $status"
assert_output "0"
}
@test "(resource) resource:limit-clear" {
run /bin/bash -c "dokku resource:limit-clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku resource:limit-clear --process-type web $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(resource) resource:reserve-clear" {
run /bin/bash -c "dokku resource:reserve-clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku resource:reserve-clear --process-type web $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}

View File

@@ -209,3 +209,25 @@ teardown() {
echo "status: $status"
assert_output_not_exists
}
@test "(buildpacks) buildpacks deploy" {
destroy_app
echo "output: $output"
echo "status: $status"
assert_success
create_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:set $TEST_APP https://github.com/heroku/heroku-buildpack-nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app
echo "output: $output"
echo "status: $status"
assert_success
}

View File

@@ -13,6 +13,9 @@ setup() {
# now create key that will be really used
create_key
# Test key without a trailing newline
echo -n "$KEY" > /tmp/testkey-no-newline.pub
# the temporary key is useful for adding in the file with two keys
# useful for a negative test
{ cat /tmp/testkey.pub ; echo "$KEY" ; } > /tmp/testkey-double.pub
@@ -50,6 +53,15 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c 'echo "" >> "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys"'
run /bin/bash -c 'echo "" >> "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys"'
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ssh-keys:list"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ssh-keys:list | grep name1"
echo "output: $output"
echo "status: $status"
@@ -70,6 +82,10 @@ teardown() {
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ssh-keys:add name5 /tmp/testkey-no-newline.pub"
echo "output: $output"
echo "status: $status"
assert_success
# leave this as the last test in the sequence! It introduces an error in authorized_keys
run /bin/bash -c 'echo invalid >> "${DOKKU_ROOT:-/home/dokku}/.ssh/authorized_keys"'

View File

@@ -39,6 +39,18 @@ assert_url() {
assert_success
}
@test "(core) run (with --env / -e)" {
deploy_app
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | egrep '^TEST=testvalue'"
echo "output: $output"
echo "status: $status"
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | egrep '^TEST2=testvalue2'"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(core) unknown command" {
run /bin/bash -c "dokku fakecommand"
echo "output: $output"

View File

@@ -3,13 +3,20 @@
load test_helper
TEST_PLUGIN_NAME=smoke-test-plugin
TEST_PLUGIN_GIT_REPO=https://github.com/dokku/${TEST_PLUGIN_NAME}.git
TEST_PLUGIN_LOCAL_REPO="$(mktemp -d)/$TEST_PLUGIN_NAME"
clone_test_plugin() {
git clone "$TEST_PLUGIN_GIT_REPO" "$TEST_PLUGIN_LOCAL_REPO"
}
setup() {
global_setup
clone_test_plugin
}
remove_test_plugin() {
rm -rf $PLUGIN_ENABLED_PATH/$TEST_PLUGIN_NAME $PLUGIN_AVAILABLE_PATH/$TEST_PLUGIN_NAME
rm -rf $TEST_PLUGIN_LOCAL_REPO
}
teardown() {
@@ -59,6 +66,48 @@ teardown() {
assert_failure
}
@test "(plugin) plugin:install, plugin:disable, plugin:update plugin:uninstall (with file://)" {
run /bin/bash -c "dokku plugin:install file://$TEST_PLUGIN_LOCAL_REPO --name $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:update $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin | grep enabled | grep $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "sudo -E -u nobody dokku plugin:uninstall $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku plugin:disable $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin | grep disabled | grep $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:uninstall $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin | grep $TEST_PLUGIN_NAME"
echo "output: $output"
echo "status: $status"
assert_failure
}
@test "(plugin) plugin:install plugin:update (with tag)" {
run /bin/bash -c "dokku plugin:install $TEST_PLUGIN_GIT_REPO --committish v0.2.0 --name $TEST_PLUGIN_NAME"
echo "output: $output"

80
tests/unit/40_report.bats Normal file
View File

@@ -0,0 +1,80 @@
#!/usr/bin/env bats
load test_helper
setup() {
global_setup
deploy_app
rm -f /tmp/fake-docker-bin
}
teardown() {
rm -f /tmp/fake-docker-bin
destroy_app
global_teardown
}
@test "(report) report" {
run /bin/bash -c "dokku report"
echo "output: $output"
echo "status: $status"
assert_output_contains "herokuish version:"
assert_success
run /bin/bash -c "dokku report $TEST_APP 2>&1"
echo "output: $output"
echo "status: $status"
assert_output_contains "herokuish version:"
assert_output_contains "not deployed" "0"
assert_success
run /bin/bash -c "dokku report fake-app-name"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku report fake-app-name 2>&1"
echo "output: $output"
echo "status: $status"
assert_output_contains "App fake-app-name does not exist"
assert_failure
dokku apps:create "${TEST_APP}-2"
run /bin/bash -c "dokku report ${TEST_APP}-2 2>&1"
echo "output: $output"
echo "status: $status"
assert_output_contains "not deployed"
assert_success
dokku --force apps:destroy "${TEST_APP}-2"
}
@test "(report) custom docker bin" {
export DOCKER_BIN="docker"
run /bin/bash -c "dokku report"
echo "output: $output"
echo "status: $status"
assert_output_contains "herokuish version:"
assert_success
export DOCKER_BIN="/usr/bin/docker"
run /bin/bash -c "dokku report"
echo "output: $output"
echo "status: $status"
assert_output_contains "herokuish version:"
assert_success
touch /tmp/fake-docker-bin
echo '#!/usr/bin/env bash' >/tmp/fake-docker-bin
echo '/usr/bin/docker "$@"' >>/tmp/fake-docker-bin
chmod +x /tmp/fake-docker-bin
export DOCKER_BIN="/tmp/fake-docker-bin"
run /bin/bash -c "dokku report"
echo "output: $output"
echo "status: $status"
assert_output_contains "herokuish version:"
assert_success
unset DOCKER_BIN
}

62
tests/unit/40_trace.bats Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env bats
load test_helper
setup() {
global_setup
rm -f "$DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
}
teardown() {
rm -f "$DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
global_teardown
}
@test "(trace) trace:on" {
run /bin/bash -c "dokku trace:on"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "test -f $DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(trace) trace on" {
run /bin/bash -c "dokku trace on"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "test -f $DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(trace) trace:off, trace off" {
touch "$DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
run /bin/bash -c "dokku trace:off"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "test -f $DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
echo "output: $output"
echo "status: $status"
assert_failure
touch "$DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
run /bin/bash -c "dokku trace off"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "test -f $DOKKU_ROOT/.dokkurc/DOKKU_TRACE"
echo "output: $output"
echo "status: $status"
assert_failure
}