feat: Real docker-based testing
This pull request switches testing to use an actual docker daemon, vs mocking everything out. It may also catch actual breaking issues in our tests, which is great!
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,5 +1,3 @@
|
||||
tests/dokku
|
||||
tests/fixtures
|
||||
tests/bin/plugn
|
||||
tests/bin/readlink
|
||||
/tmp
|
||||
/test-results
|
||||
.vagrant
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
dist: trusty
|
||||
language: bash
|
||||
env:
|
||||
- DOKKU_VERSION=master DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.14.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=v0.12.0 DOKKU_SYSTEM_GROUP=travis DOKKU_SYSTEM_USER=travis
|
||||
- DOKKU_VERSION=master
|
||||
- DOKKU_VERSION=v0.14.0
|
||||
- DOKKU_VERSION=v0.12.0
|
||||
install: make setup
|
||||
script: make test
|
||||
|
||||
50
Makefile
50
Makefile
@@ -1,22 +1,35 @@
|
||||
SYSTEM := $(shell sh -c 'uname -s 2>/dev/null')
|
||||
|
||||
bats:
|
||||
ifeq ($(SYSTEM),Darwin)
|
||||
ifneq ($(shell bats --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
brew install bats-core
|
||||
endif
|
||||
else
|
||||
git clone https://github.com/josegonzalez/bats-core.git /tmp/bats
|
||||
cd /tmp/bats && sudo ./install.sh /usr/local
|
||||
rm -rf /tmp/bats
|
||||
endif
|
||||
|
||||
shellcheck:
|
||||
ifeq ($(shell shellcheck > /dev/null 2>&1 ; echo $$?),127)
|
||||
ifeq ($(shell uname),Darwin)
|
||||
ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(SYSTEM),Darwin)
|
||||
brew install shellcheck
|
||||
else
|
||||
sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse'
|
||||
sudo rm -rf /var/lib/apt/lists/* && sudo apt-get clean
|
||||
sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck
|
||||
endif
|
||||
endif
|
||||
|
||||
bats:
|
||||
ifeq ($(shell bats > /dev/null 2>&1 ; echo $$?),127)
|
||||
ifeq ($(shell uname),Darwin)
|
||||
git clone https://github.com/sstephenson/bats.git /tmp/bats
|
||||
cd /tmp/bats && sudo ./install.sh /usr/local
|
||||
rm -rf /tmp/bats
|
||||
shfmt:
|
||||
ifneq ($(shell shfmt --version >/dev/null 2>&1 ; echo $$?),0)
|
||||
ifeq ($(shfmt),Darwin)
|
||||
brew install shfmt
|
||||
else
|
||||
sudo add-apt-repository ppa:duggan/bats --yes
|
||||
sudo apt-get update -qq && sudo apt-get install -qq -y bats
|
||||
wget -qO /tmp/shfmt https://github.com/mvdan/sh/releases/download/v2.6.2/shfmt_v2.6.2_linux_amd64
|
||||
chmod +x /tmp/shfmt
|
||||
sudo mv /tmp/shfmt /usr/local/bin/shfmt
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -30,17 +43,22 @@ endif
|
||||
|
||||
ci-dependencies: shellcheck bats readlink
|
||||
|
||||
lint:
|
||||
lint-setup:
|
||||
@mkdir -p test-results/shellcheck tmp/shellcheck
|
||||
@find . -not -path '*/\.*' -type f | xargs file | grep text | awk -F ':' '{ print $$1 }' | xargs head -n1 | egrep -B1 "bash" | grep "==>" | awk '{ print $$2 }' > tmp/shellcheck/test-files
|
||||
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p' | cut -d' ' -f2 | paste -d, -s - > tmp/shellcheck/exclude
|
||||
|
||||
lint: lint-setup
|
||||
# these are disabled due to their expansive existence in the codebase. we should clean it up though
|
||||
# SC1090: Can't follow non-constant source. Use a directive to specify location.
|
||||
# SC2034: Variable appears unused. Verify it or export it.
|
||||
# SC2155: Declare and assign separately to avoid masking return values.
|
||||
@cat tests/shellcheck-exclude | sed -n -e '/^# SC/p'
|
||||
@echo linting...
|
||||
@$(QUIET) find ./ -maxdepth 1 -not -path '*/\.*' | xargs file | egrep "shell|bash" | awk '{ print $$1 }' | sed 's/://g' | xargs shellcheck -e SC1090,SC2034,SC2155
|
||||
@cat tmp/shellcheck/test-files | xargs shellcheck -e $(shell cat tmp/shellcheck/exclude) | tests/shellcheck-to-junit --output test-results/shellcheck/results.xml --files tmp/shellcheck/test-files --exclude $(shell cat tmp/shellcheck/exclude)
|
||||
|
||||
unit-tests:
|
||||
@echo running unit tests...
|
||||
@$(QUIET) bats tests
|
||||
@mkdir -p test-results/bats
|
||||
@cd tests && echo "executing tests: $(shell cd tests ; ls *.bats | xargs)"
|
||||
cd tests && bats --formatter bats-format-junit -e -T -o ../test-results/bats *.bats
|
||||
|
||||
setup:
|
||||
bash tests/setup.sh
|
||||
|
||||
@@ -89,8 +89,10 @@ remove_from_links_file() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
if [[ ! -f "$LINKS_FILE" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
sed -i.bak "/^$APP\$/d" "$LINKS_FILE" && rm "$LINKS_FILE.bak"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
}
|
||||
@@ -191,7 +193,7 @@ service_backup_auth() {
|
||||
declare SERVICE="$1" AWS_ACCESS_KEY_ID="$2" AWS_SECRET_ACCESS_KEY="$3" AWS_DEFAULT_REGION="$4" AWS_SIGNATURE_VERSION="$5" ENDPOINT_URL="$6"
|
||||
local SERVICE_BACKUP_ROOT="$PLUGIN_DATA_ROOT/$SERVICE/backup"
|
||||
|
||||
mkdir -p "$SERVICE_BACKUP_ROOT"
|
||||
mkdir "$SERVICE_BACKUP_ROOT"
|
||||
echo "$AWS_ACCESS_KEY_ID" > "$SERVICE_BACKUP_ROOT/AWS_ACCESS_KEY_ID"
|
||||
echo "$AWS_SECRET_ACCESS_KEY" > "$SERVICE_BACKUP_ROOT/AWS_SECRET_ACCESS_KEY"
|
||||
|
||||
@@ -260,7 +262,7 @@ service_backup_set_encryption() {
|
||||
local SERVICE_ROOT="${PLUGIN_DATA_ROOT}/${SERVICE}"
|
||||
local SERVICE_BACKUP_ENCRYPTION_ROOT="${SERVICE_ROOT}/backup-encryption/"
|
||||
|
||||
mkdir -p "$SERVICE_BACKUP_ENCRYPTION_ROOT"
|
||||
mkdir "$SERVICE_BACKUP_ENCRYPTION_ROOT"
|
||||
echo "$ENCRYPTION_KEY" > "${SERVICE_BACKUP_ENCRYPTION_ROOT}/ENCRYPTION_KEY"
|
||||
}
|
||||
|
||||
@@ -280,7 +282,7 @@ service_container_rm() {
|
||||
local ID
|
||||
|
||||
service_stop "$SERVICE"
|
||||
ID=$(docker ps -a --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
# this may be 'true' in tests...
|
||||
if [[ -z "$ID" ]] || [[ "$ID" == "true" ]]; then
|
||||
return 0
|
||||
@@ -411,7 +413,6 @@ service_link() {
|
||||
fi
|
||||
|
||||
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
echo "$APP" >> "$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
@@ -643,7 +644,6 @@ service_set_alias() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ALIAS_FILE="$SERVICE_ROOT/ALIAS"
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$ALIAS_FILE"
|
||||
echo "$ALIAS" > "$ALIAS_FILE"
|
||||
}
|
||||
@@ -671,7 +671,7 @@ service_stop() {
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE";
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local ID=$(docker ps -f status=running --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
local ID=$(docker ps -aq --no-trunc --filter "name=^/$SERVICE_NAME$" --format '{{ .ID }}') || true
|
||||
[[ -z $ID ]] && dokku_log_warn "Service is already stopped" && return 0
|
||||
|
||||
if [[ -n $ID ]]; then
|
||||
@@ -727,7 +727,7 @@ update_plugin_scheme_for_app() {
|
||||
verify_service_name() {
|
||||
declare desc="Verifies that a service exists"
|
||||
declare SERVICE="$1"
|
||||
[[ ! -n "$SERVICE" ]] && dokku_log_fail "(verify_service_name) SERVICE must not be null"
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "(verify_service_name) SERVICE must not be null"
|
||||
[[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] && dokku_log_fail "$PLUGIN_SERVICE service $SERVICE does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
2
config
2
config
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
export MYSQL_IMAGE=${MYSQL_IMAGE:="mysql"}
|
||||
export MYSQL_IMAGE_VERSION=${MYSQL_IMAGE_VERSION:="5.7.12"}
|
||||
export MYSQL_ROOT=${MYSQL_ROOT:="/var/lib/dokku/services/mysql"}
|
||||
export MYSQL_ROOT=${MYSQL_ROOT:="$DOKKU_LIB_ROOT/services/mysql"}
|
||||
export MYSQL_HOST_ROOT=${MYSQL_HOST_ROOT:=$MYSQL_ROOT}
|
||||
|
||||
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
|
||||
|
||||
@@ -41,7 +41,7 @@ fn-help-all() {
|
||||
return "$?"
|
||||
fi
|
||||
|
||||
echo -e "${BOLD}usage${NORMAL}: dokku $PLUGIN_COMMAND_PREFIX[:COMMAND]"
|
||||
echo -e "${BOLD}usage${NORMAL}: dokku ${PLUGIN_COMMAND_PREFIX}[:COMMAND]"
|
||||
echo ''
|
||||
echo -e "${BOLD}List your $PLUGIN_COMMAND_PREFIX services.${NORMAL}"
|
||||
echo ''
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
PLUGIN_BASE_PATH="$PLUGIN_PATH"
|
||||
@@ -10,7 +11,10 @@ source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/functions"
|
||||
|
||||
APP="$1"
|
||||
for SERVICE in "$PLUGIN_DATA_ROOT"/*; do
|
||||
pushd "$PLUGIN_DATA_ROOT" > /dev/null
|
||||
for SERVICE in *; do
|
||||
dokku_log_verbose_quiet "Unlinking from $SERVICE"
|
||||
remove_from_links_file "$(basename "$SERVICE")" "$APP"
|
||||
done
|
||||
popd >/dev/null 2>&1 || pushd "/tmp" >/dev/null
|
||||
exit 0
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $TRACE ]] && set -x
|
||||
|
||||
semver-parse-into() {
|
||||
declare VERSION="$1"
|
||||
local RE='[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)'
|
||||
local MAJOR="$(echo "$VERSION" | sed -e "s#$RE#\1#")"
|
||||
local MINOR="$(echo "$VERSION" | sed -e "s#$RE#\2#")"
|
||||
local PATCH="$(echo "$VERSION" | sed -e "s#$RE#\3#")"
|
||||
echo "${MAJOR} ${MINOR} ${PATCH}"
|
||||
}
|
||||
|
||||
main() {
|
||||
declare MIN_VERSION="$1" CHECK_VERSION="$2"
|
||||
local IS_AT_LEAST_VERSION=false
|
||||
local MAJOR_MIN MINOR_MIN PATCH_MIN MAJOR_CHECK MINOR_CHECK PATCH_CHECK PARSED_MIN PARSED_CHECK
|
||||
|
||||
PARSED_MIN="$(semver-parse-into "$MIN_VERSION")"
|
||||
PARSED_CHECK="$(semver-parse-into "$CHECK_VERSION")"
|
||||
MAJOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f1)"
|
||||
MINOR_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f2)"
|
||||
PATCH_MIN="$(echo "$PARSED_MIN" | cut -d' ' -f3)"
|
||||
MAJOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f1)"
|
||||
MINOR_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f2)"
|
||||
PATCH_CHECK="$(echo "$PARSED_CHECK" | cut -d' ' -f3)"
|
||||
|
||||
if [[ "$MAJOR_CHECK" -gt "$MAJOR_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -gt "$MINOR_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
elif [[ "$MAJOR_CHECK" -eq "$MAJOR_MIN" ]] && [[ "$MINOR_CHECK" -eq "$MINOR_MIN" ]] && [[ "$PATCH_CHECK" -ge "$PATCH_MIN" ]]; then
|
||||
IS_AT_LEAST_VERSION=true
|
||||
fi
|
||||
|
||||
echo "$IS_AT_LEAST_VERSION"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
101
tests/bin/docker
101
tests/bin/docker
@@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck source=../../config
|
||||
# shellcheck disable=SC1091
|
||||
source "$(dirname "$0")/../../config"
|
||||
|
||||
if [[ $ECHO_DOCKER_COMMAND == "true" ]]; then
|
||||
echo "$(basename "$0") $*"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
exec)
|
||||
echo "exec called with $@"
|
||||
;;
|
||||
images)
|
||||
echo "REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE"
|
||||
echo "elasticsearch 2.3.5 89ed89918502 2 days ago 522.1 MB"
|
||||
echo "frodenas/couchdb 1.6 cb9a62e007eb 2 days ago 537 MB"
|
||||
echo "dokkupaas/docker-grafana-graphite 3.0.1 75dcd48a5eef 2 days ago 936.4 MB"
|
||||
echo "mariadb 10.1.16 f2485761e714 2 days ago 302.2 MB"
|
||||
echo "memcached 1.4.31 8a05b51f8876 2 days ago 132.4 MB"
|
||||
echo "mongo 3.2.9 12eadb136159 2 days ago 291.1 MB"
|
||||
echo "mysql 5.7.12 57d56ac47bed 2 days ago 321.3 MB"
|
||||
echo "nats 0.9.4 9216d5a4eec8 2 days ago 109.3 MB"
|
||||
echo "postgres 9.5.4 6412eb70175e 2 days ago 265.7 MB"
|
||||
echo "rabbitmq 3.6.5-management 327b803301e9 2 days ago 143.5 MB"
|
||||
echo "redis 3.2.3 9216d5a4eec8 2 days ago 109.3 MB"
|
||||
echo "rethinkdb 2.3.4 f27010a550ec 2 days ago 196.3 MB"
|
||||
echo "svendowideit/ambassador latest 0d2200edc53e 2 days ago 7.241 MB"
|
||||
;;
|
||||
inspect)
|
||||
if [[ $@ = *"IPAddress"* ]]; then
|
||||
echo "172.17.0.34"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ $@ =~ \{\{.Config.Image\}\} ]]; then
|
||||
echo "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ $@ =~ \{\{\.State\..*\}\} ]]; then
|
||||
if [[ $@ =~ \{\{\.State\.Running\}\} ]]; then
|
||||
echo "true"
|
||||
else
|
||||
echo "false"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# running
|
||||
echo "true"
|
||||
;;
|
||||
kill)
|
||||
echo "testid"
|
||||
;;
|
||||
logs)
|
||||
echo "$PLUGIN_SERVICE $PLUGIN_IMAGE_VERSION"
|
||||
;;
|
||||
ps)
|
||||
if [[ $@ = *"no-trunc"* ]]; then
|
||||
echo "1479bbd60ade8a92617d2aeb4935bd3ff3179bd0fd71c22c3102c421f4bc221f"
|
||||
exit 0
|
||||
else
|
||||
echo 'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES'
|
||||
echo '4eeaae231d5e elasticsearch:2.3.5 "/docker-entrypoint." 11 seconds ago Up 10 seconds 9200/tcp, 9300/tcp dokku.elasticsearch.l'
|
||||
echo '2b20a383226d frodenas/couchdb:1.6 "/scripts/run.sh" 11 seconds ago Up 10 seconds 5984/tcp dokku.couchdb.l'
|
||||
echo '76a0e7154483 dokkupaas/docker-grafana-graphite:3.0.1 "/usr/bin/supervisor" 11 seconds ago Up 10 seconds 80/tcp, 2003/tcp, 8126/tcp, 8125/udp dokku.graphite.l'
|
||||
echo '94df08fe5550 mariadb:10.1.16 "/docker-entrypoint." 11 seconds ago Up 10 seconds 3306/tcp dokku.mariadb.l'
|
||||
echo 'ef27fec191ba memcached:1.4.31 "/entrypoint.sh memc" 11 seconds ago Up 10 seconds 11211/tcp dokku.memcached.l'
|
||||
echo 'c0f74fc90377 mongo:3.2.9 "/entrypoint.sh mong" 11 seconds ago Up 10 seconds 27017/tcp dokku.mongo.l'
|
||||
echo '0f33b1c86da9 mysql:5.7.12 "/entrypoint.sh mysq" 11 seconds ago Up 10 seconds 3306/tcp dokku.mysql.l'
|
||||
echo '9f10b6dc12d5 nats:0.9.4 "/entrypoint.sh redi" 11 seconds ago Up 10 seconds 4222/tcp dokku.nats.l'
|
||||
echo '7f899b723c08 postgres:9.5.4 "/docker-entrypoint." 11 seconds ago Up 10 seconds 5432/tcp dokku.postgres.l'
|
||||
echo '5e50a462661e rabbitmq:3.6.5-management "/docker-entrypoint." 11 seconds ago Up 10 seconds 5672/tcp, 15672/tcp dokku.rabbitmq.l'
|
||||
echo 'c39ca00fa3c6 redis:3.2.3 "/entrypoint.sh redi" 11 seconds ago Up 10 seconds 6379/tcp dokku.redis.l'
|
||||
echo 'dc98c2939a80 rethinkdb:2.3.4 "rethinkdb --bind al" 11 seconds ago Up 10 seconds 8080/tcp, 28015/tcp, 29015/tcp dokku.rethinkdb.l'
|
||||
fi
|
||||
;;
|
||||
pull)
|
||||
exit 0
|
||||
;;
|
||||
restart)
|
||||
echo "testid"
|
||||
;;
|
||||
rm)
|
||||
echo "testid"
|
||||
;;
|
||||
run)
|
||||
echo "testid"
|
||||
;;
|
||||
start)
|
||||
echo "testid"
|
||||
;;
|
||||
stop)
|
||||
echo "testid"
|
||||
;;
|
||||
*)
|
||||
exit "$DOKKU_NOT_IMPLEMENTED_EXIT"
|
||||
;;
|
||||
esac
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
echo "dokku"
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
echo "Darwin"
|
||||
else
|
||||
echo "Ubuntu"
|
||||
fi
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
exit 0
|
||||
@@ -2,15 +2,14 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:hook:pre-delete) removes app from links file when destroying app" {
|
||||
|
||||
@@ -2,34 +2,37 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" not_existing_service new_service
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when new service isn't provided" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" l
|
||||
assert_contains "${lines[*]}" "Please specify a name for the new service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:clone) error when new service already exists" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" new_service
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:clone" l new_service
|
||||
assert_contains "${lines[*]}" "service new_service already exists"
|
||||
assert_failure
|
||||
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service
|
||||
}
|
||||
|
||||
@@ -38,5 +41,7 @@ teardown() {
|
||||
[[ -f $PLUGIN_DATA_ROOT/new_service/ID ]]
|
||||
assert_contains "${lines[*]}" "Copying data from l to new_service"
|
||||
assert_contains "${lines[*]}" "Done"
|
||||
}
|
||||
assert_success
|
||||
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" new_service
|
||||
}
|
||||
|
||||
@@ -2,13 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:connect) error when there are no arguments" {
|
||||
@@ -22,9 +20,8 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:connect) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:connect" l
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_output "docker exec -i -t dokku.mysql.l mysql --user=mysql --password=$password --database=l"
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ load test_helper
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
assert_contains "${lines[*]}" "container created: l"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:create) error when there are no arguments" {
|
||||
|
||||
@@ -21,7 +21,10 @@ load test_helper
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku apps:create app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
run dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
assert_contains "${lines[*]}" "Cannot delete linked service"
|
||||
rm -rf "$DOKKU_ROOT/app"
|
||||
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l app
|
||||
run dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
assert_contains "${lines[*]}" "container deleted: l"
|
||||
}
|
||||
|
||||
@@ -2,13 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) error when there are no arguments" {
|
||||
@@ -22,23 +20,17 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) success with SSH_TTY" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
export SSH_TTY=`tty`
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" l
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_exit_status 0
|
||||
assert_output "docker exec dokku.mysql.l bash -c printf '[client]\npassword=$password\n' > /root/credentials.cnf
|
||||
docker exec dokku.mysql.l mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql l
|
||||
docker exec dokku.mysql.l rm /root/credentials.cnf"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:export) success without SSH_TTY" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
unset SSH_TTY
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:export" l
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_exit_status 0
|
||||
assert_output "docker exec dokku.mysql.l bash -c printf '[client]\npassword=$password\n' > /root/credentials.cnf
|
||||
docker exec dokku.mysql.l mysqldump --defaults-extra-file=/root/credentials.cnf --user=mysql l
|
||||
docker exec dokku.mysql.l rm /root/credentials.cnf"
|
||||
}
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) error when there are no arguments" {
|
||||
@@ -19,12 +19,12 @@ teardown() {
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing a custom port" {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when not providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l
|
||||
[[ "${lines[*]}" =~ exposed\ on\ port\(s\)\ \[container\-\>host\]\:\ [[:digit:]]+ ]]
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing a custom port" {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:expose) success when providing custom ports" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:expose" l 4242
|
||||
assert_contains "${lines[*]}" "exposed on port(s) [container->host]: 3306->4242"
|
||||
}
|
||||
|
||||
@@ -2,36 +2,36 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
echo "data" > "$PLUGIN_DATA_ROOT/fake.sql"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
echo "data" | tee "/tmp/fake.sql"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -f "$PLUGIN_DATA_ROOT/fake.sql"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
rm -f "/tmp/fake.sql"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" not_existing_service
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) error when data is not provided" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l
|
||||
assert_contains "${lines[*]}" "No data provided on stdin"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:import) success" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.sql"
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/ROOTPASSWORD")"
|
||||
assert_output "docker exec -i dokku.mysql.l mysql --user=root --password=$password l"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "/tmp/fake.sql"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
}
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) error when there are no arguments" {
|
||||
@@ -21,21 +21,21 @@ teardown() {
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "${lines[*]}" "mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) replaces underscores by dash in hostname" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" test_with_underscores
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" test_with_underscores
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/test_with_underscores/PASSWORD")"
|
||||
assert_contains "${lines[*]}" "mysql://mysql:$password@dokku-mysql-test-with-underscores:3306/test_with_underscores"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" test_with_underscores
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) success with flag" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --dsn
|
||||
local password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
local password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_output "mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l --config-dir
|
||||
|
||||
@@ -2,46 +2,66 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku apps:create my_app
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Please specify a valid name for the service"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app argument is missing" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Please specify an app to run the command on"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the app does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l not_existing_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "App not_existing_app does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" not_existing_service my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service is already linked to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_contains "${lines[*]}" "Already linked as DATABASE_URL"
|
||||
assert_failure
|
||||
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) exports DATABASE_URL to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -50,6 +70,7 @@ teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_MYSQL_"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -57,6 +78,7 @@ teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku docker-options my_app
|
||||
assert_contains "${lines[*]}" "--link dokku.mysql.l:dokku-mysql-l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -64,8 +86,9 @@ teardown() {
|
||||
dokku config:set my_app MYSQL_DATABASE_SCHEME=mysql2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "mysql2://mysql:$password@dokku-mysql-l:3306/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -73,13 +96,15 @@ teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --querystring "pool=5"
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
assert_contains "$url" "?pool=5"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) uses a specified config url when alias is specified" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --alias "ALIAS"
|
||||
url=$(dokku config:get my_app ALIAS_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
assert_success
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) with no exposed ports, no linked apps" {
|
||||
@@ -29,8 +29,8 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:list) when there are no services" {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:list"
|
||||
assert_contains "${lines[*]}" "There are no MySQL services"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
@@ -2,13 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
export ECHO_DOCKER_COMMAND="false"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) error when there are no arguments" {
|
||||
@@ -22,13 +20,11 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when not tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l
|
||||
assert_contains "docker logs --tail 100 testid"
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l -t
|
||||
assert_contains "docker logs --follow testid"
|
||||
}
|
||||
# @test "($PLUGIN_COMMAND_PREFIX:logs) success when tailing" {
|
||||
# run dokku "$PLUGIN_COMMAND_PREFIX:logs" l -t
|
||||
# assert_contains "docker logs --follow testid"
|
||||
# }
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when there are no arguments" {
|
||||
@@ -39,7 +39,7 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) changes DATABASE_URL" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "DATABASE_URL=mysql://u:p@host:3306/db" "DOKKU_MYSQL_BLUE_URL=mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
@@ -47,7 +47,7 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) creates new config url when needed" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "DATABASE_URL=mysql://u:p@host:3306/db" "DOKKU_MYSQL_BLUE_URL=mysql://mysql:$password@dokku-mysql-l:3306/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
run dokku config my_app
|
||||
@@ -55,7 +55,7 @@ teardown() {
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) uses MYSQL_DATABASE_SCHEME variable" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "MYSQL_DATABASE_SCHEME=mysql2" "DATABASE_URL=mysql://u:p@host:3306/db" "DOKKU_MYSQL_BLUE_URL=mysql2://mysql:$password@dokku-mysql-l:3306/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app DATABASE_URL)
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:restart) error when there are no arguments" {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:start) error when there are no arguments" {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:stop) error when there are no arguments" {
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unexpose) error when there are no arguments" {
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm -rf "$DOKKU_ROOT/my_app"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
|
||||
dokku --force apps:destroy my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when there are no arguments" {
|
||||
|
||||
@@ -1,33 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_helper.bash"
|
||||
|
||||
BIN_STUBS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin"
|
||||
|
||||
if [[ ! -d $DOKKU_ROOT ]]; then
|
||||
git clone https://github.com/progrium/dokku.git $DOKKU_ROOT > /dev/null
|
||||
set -eo pipefail; [[ $TRACE ]] && set -x
|
||||
wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh
|
||||
if [[ "$DOKKU_VERSION" == "master" ]]; then
|
||||
sudo bash bootstrap.sh
|
||||
else
|
||||
sudo DOKKU_TAG="$DOKKU_VERSION" bash bootstrap.sh
|
||||
fi
|
||||
|
||||
cd $DOKKU_ROOT
|
||||
echo "Dokku version $DOKKU_VERSION"
|
||||
git checkout $DOKKU_VERSION > /dev/null
|
||||
if grep go-build Makefile > /dev/null; then
|
||||
mv "$BIN_STUBS/docker" "$BIN_STUBS/docker-stub"
|
||||
make go-build
|
||||
mv "$BIN_STUBS/docker-stub" "$BIN_STUBS/docker"
|
||||
fi
|
||||
cd -
|
||||
|
||||
export DOKKU_LIB_ROOT="/var/lib/dokku"
|
||||
export DOKKU_PLUGINS_ROOT="$DOKKU_LIB_ROOT/plugins/available"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
rm -rf $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX
|
||||
mkdir -p $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands
|
||||
find ./ -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX \;
|
||||
find ./subcommands -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands \;
|
||||
echo "$DOKKU_VERSION" > $DOKKU_ROOT/VERSION
|
||||
|
||||
if [[ ! -f $BIN_STUBS/plugn ]]; then
|
||||
wget -O- "$PLUGN_URL" | tar xzf - -C "$BIN_STUBS"
|
||||
plugn init
|
||||
find "$DOKKU_ROOT/plugins" -mindepth 1 -maxdepth 1 -type d ! -name 'available' ! -name 'enabled' -exec ln -s {} "$DOKKU_ROOT/plugins/available" \;
|
||||
find "$DOKKU_ROOT/plugins" -mindepth 1 -maxdepth 1 -type d ! -name 'available' ! -name 'enabled' -exec ln -s {} "$DOKKU_ROOT/plugins/enabled" \;
|
||||
fi
|
||||
sudo rm -rf "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX"
|
||||
sudo mkdir -p "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/subcommands"
|
||||
sudo find ./ -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" \;
|
||||
sudo find ./subcommands -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/subcommands" \;
|
||||
sudo mkdir -p "$PLUGIN_CONFIG_ROOT" "$PLUGIN_DATA_ROOT"
|
||||
sudo dokku plugin:enable "$PLUGIN_COMMAND_PREFIX"
|
||||
sudo dokku plugin:install
|
||||
|
||||
3
tests/shellcheck-exclude
Normal file
3
tests/shellcheck-exclude
Normal file
@@ -0,0 +1,3 @@
|
||||
# SC1090 - Can't follow non-constant source. Use a directive to specify location - https://github.com/koalaman/shellcheck/wiki/SC1090
|
||||
# SC2034 - Variable appears unused. Verify it or export it - https://github.com/koalaman/shellcheck/wiki/SC2034
|
||||
# SC2155 - Declare and assign separately to avoid masking return values - https://github.com/koalaman/shellcheck/wiki/SC2155
|
||||
205
tests/shellcheck-to-junit
Executable file
205
tests/shellcheck-to-junit
Executable file
@@ -0,0 +1,205 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import print_function
|
||||
import argparse
|
||||
import collections
|
||||
import datetime
|
||||
import re
|
||||
import socket
|
||||
import sys
|
||||
|
||||
from xml.etree import ElementTree
|
||||
|
||||
|
||||
def CDATA(text=None):
|
||||
element = ElementTree.Element('![CDATA[')
|
||||
element.text = text
|
||||
return element
|
||||
|
||||
|
||||
def _serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs):
|
||||
|
||||
if elem.tag == '![CDATA[':
|
||||
write("\n<{}{}]]>\n".format(elem.tag, elem.text))
|
||||
if elem.tail:
|
||||
write(ElementTree._escape_cdata(elem.tail))
|
||||
else:
|
||||
return ElementTree._original_serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs)
|
||||
|
||||
|
||||
ElementTree._original_serialize_xml = ElementTree._serialize_xml
|
||||
ElementTree._serialize_xml = ElementTree._serialize['xml'] = _serialize_xml
|
||||
|
||||
|
||||
def read_in():
|
||||
lines = sys.stdin.readlines()
|
||||
for i in range(len(lines)):
|
||||
lines[i] = lines[i].rstrip()
|
||||
return lines
|
||||
|
||||
|
||||
def process_lines(lines):
|
||||
files = {}
|
||||
current_file = None
|
||||
previous_line = None
|
||||
line_no = None
|
||||
new_issues = []
|
||||
code = None
|
||||
|
||||
RE_VIOLATION = re.compile(r"\^-- (SC[\w]+): (.*)")
|
||||
RE_VIOLATION_NEW = re.compile(r"\^[-]+\^ (SC[\w]+): (.*)")
|
||||
|
||||
for line in lines:
|
||||
# start a new block
|
||||
if line == '':
|
||||
if current_file is not None:
|
||||
file_data = files.get(current_file, {})
|
||||
files[current_file] = file_data
|
||||
|
||||
issue_data = file_data.get(line_no, {})
|
||||
issue_data['code'] = code
|
||||
files[current_file][line_no] = issue_data
|
||||
|
||||
issues = issue_data.get('issues', [])
|
||||
issues.extend(new_issues)
|
||||
issue_data['issues'] = issues
|
||||
|
||||
files[current_file][line_no] = issue_data
|
||||
|
||||
code = None
|
||||
current_file = None
|
||||
line_no = None
|
||||
elif line.startswith('In ./') and not previous_line:
|
||||
current_file = line.split(' ')[1].replace('./', '')
|
||||
line_no = line.split(' ')[3]
|
||||
new_issues = []
|
||||
code = None
|
||||
elif code is None and len(new_issues) == 0:
|
||||
code = line
|
||||
else:
|
||||
match = RE_VIOLATION.match(line.strip())
|
||||
if not match:
|
||||
match = RE_VIOLATION_NEW.match(line.strip())
|
||||
|
||||
if not match:
|
||||
if 'https://www.shellcheck.net/wiki/SC' in line:
|
||||
continue
|
||||
if 'For more information:' == line:
|
||||
continue
|
||||
print('Error: Issue parsing line "{0}"'.format(line.strip()))
|
||||
else:
|
||||
new_issues.append({
|
||||
'shellcheck_id': match.group(1),
|
||||
'message': match.group(2),
|
||||
'original_message': line
|
||||
})
|
||||
|
||||
previous_line = line
|
||||
|
||||
return files
|
||||
|
||||
|
||||
def output_junit(files, args):
|
||||
timestamp = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
failures = 0
|
||||
for file, data in files.items():
|
||||
for line, issue_data in data.items():
|
||||
code = issue_data.get('code')
|
||||
for issue in issue_data.get('issues', []):
|
||||
failures += 1
|
||||
|
||||
tests = 0
|
||||
if args.files:
|
||||
with open(args.files, 'r') as f:
|
||||
tests = len(f.readlines())
|
||||
|
||||
root = ElementTree.Element("testsuite",
|
||||
name="shellcheck",
|
||||
tests="{0}".format(tests),
|
||||
failures="{0}".format(failures),
|
||||
errors="0",
|
||||
skipped="0",
|
||||
timestamp=timestamp,
|
||||
time="0",
|
||||
hostname=socket.gethostname())
|
||||
|
||||
properties = ElementTree.SubElement(root, "properties")
|
||||
if args.exclude:
|
||||
ElementTree.SubElement(properties,
|
||||
"property",
|
||||
name="exclude",
|
||||
value=args.exclude)
|
||||
|
||||
if args.files:
|
||||
with open(args.files, 'r') as f:
|
||||
lines = f.readlines()
|
||||
for i in range(len(lines)):
|
||||
file = lines[i].rstrip().replace('./', '')
|
||||
data = files.get(file, None)
|
||||
if data:
|
||||
for line, issue_data in data.items():
|
||||
code = issue_data.get('code')
|
||||
for issue in issue_data.get('issues', []):
|
||||
testcase = ElementTree.SubElement(root,
|
||||
"testcase",
|
||||
classname=file,
|
||||
name=file,
|
||||
time="0")
|
||||
shellcheck_id = issue.get('shellcheck_id')
|
||||
message = 'line {0}: {1}'.format(
|
||||
line, issue.get('message'))
|
||||
original_message = issue.get('original_message')
|
||||
e = ElementTree.Element("failure",
|
||||
type=shellcheck_id,
|
||||
message=message)
|
||||
cdata = CDATA("\n".join([code, original_message]))
|
||||
e.append(cdata)
|
||||
testcase.append(e)
|
||||
ElementTree.SubElement(root,
|
||||
"testcase",
|
||||
classname=file,
|
||||
name=file,
|
||||
time="0")
|
||||
|
||||
ElementTree.SubElement(root, "system-out")
|
||||
ElementTree.SubElement(root, "system-err")
|
||||
|
||||
content = ElementTree.tostring(root, encoding='UTF-8', method='xml')
|
||||
if args.output:
|
||||
with open(args.output, 'w') as f:
|
||||
try:
|
||||
f.write(content)
|
||||
except TypeError:
|
||||
f.write(content.decode("utf-8"))
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Process shellcheck output to junit.')
|
||||
parser.add_argument('--output',
|
||||
dest='output',
|
||||
action='store',
|
||||
default=None,
|
||||
help='file to write shellcheck output')
|
||||
parser.add_argument('--files',
|
||||
dest='files',
|
||||
action='store',
|
||||
default=None,
|
||||
help='a file containing a list of all files processed by shellcheck')
|
||||
parser.add_argument('--exclude',
|
||||
dest='exclude',
|
||||
action='store',
|
||||
default=None,
|
||||
help='a comma-separated list of rules being excluded by shellcheck')
|
||||
args = parser.parse_args()
|
||||
|
||||
lines = read_in()
|
||||
files = process_lines(lines)
|
||||
files = collections.OrderedDict(sorted(files.items()))
|
||||
output_junit(files, args)
|
||||
for line in lines:
|
||||
print(line)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,27 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
export DOKKU_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku"
|
||||
export DOKKU_VERSION=${DOKKU_VERSION:-"master"}
|
||||
export PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin:$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku:$PATH"
|
||||
export PLUGIN_COMMAND_PREFIX="mysql"
|
||||
export PLUGIN_PATH="$DOKKU_ROOT/plugins"
|
||||
export PLUGIN_ENABLED_PATH="$PLUGIN_PATH"
|
||||
export PLUGIN_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export PLUGIN_CORE_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export MYSQL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/fixtures"
|
||||
export PLUGIN_DATA_ROOT="$MYSQL_ROOT"
|
||||
export PLUGIN_CONFIG_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
export DOKKU_LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib-root"
|
||||
if [[ "$(uname)" == "Darwin" ]]; then
|
||||
export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_darwin_x86_64.tgz"
|
||||
else
|
||||
export PLUGN_URL="https://github.com/dokku/plugn/releases/download/v0.3.0/plugn_0.3.0_linux_x86_64.tgz"
|
||||
fi
|
||||
|
||||
mkdir -p "$PLUGIN_DATA_ROOT"
|
||||
rm -rf "${PLUGIN_DATA_ROOT:?}"/*
|
||||
|
||||
mkdir -p "$PLUGIN_CONFIG_ROOT"
|
||||
rm -rf "${PLUGIN_CONFIG_ROOT:?}"/*
|
||||
export DOKKU_LIB_ROOT="/var/lib/dokku"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
|
||||
flunk() {
|
||||
{ if [ "$#" -eq 0 ]; then cat -
|
||||
@@ -39,10 +18,15 @@ assert_equal() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $status from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_exit_status() {
|
||||
assert_equal "$status" "$1"
|
||||
assert_equal "$1" "$status"
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $status from Bats
|
||||
# shellcheck disable=SC2154
|
||||
# shellcheck disable=SC2120
|
||||
assert_success() {
|
||||
if [ "$status" -ne 0 ]; then
|
||||
flunk "command failed with exit status $status"
|
||||
@@ -71,6 +55,8 @@ assert_contains() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ShellCheck doesn't know about $output from Bats
|
||||
# shellcheck disable=SC2154
|
||||
assert_output() {
|
||||
local expected
|
||||
if [ $# -eq 0 ]; then expected="$(cat -)"
|
||||
|
||||
Reference in New Issue
Block a user