From bcfcb36fdac5f50375c8dae20bd98ce1aa31da33 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 6 Sep 2015 22:55:28 -0400 Subject: [PATCH] make test --- Makefile | 30 +++++++++++++++++++++ commands | 4 +-- functions | 2 +- install | 8 +++--- tests/unit/service.bats | 60 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 Makefile create mode 100644 tests/unit/service.bats diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5341517 --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +shellcheck: +ifeq ($(shell shellcheck > /dev/null 2>&1 ; echo $$?),127) +ifeq ($(shell uname),Darwin) + brew install shellcheck +else + sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse' + sudo apt-get update && sudo apt-get install -y shellcheck +endif +endif + +bats: + git clone https://github.com/sstephenson/bats.git /tmp/bats + cd /tmp/bats && sudo ./install.sh /usr/local + rm -rf /tmp/bats + +ci-dependencies: shellcheck bats + +lint: + # these are disabled due to their expansive existence in the codebase. we should clean it up though + # SC2046: Quote this to prevent word splitting. - https://github.com/koalaman/shellcheck/wiki/SC2046 + # SC2068: Double quote array expansions, otherwise they're like $* and break on spaces. - https://github.com/koalaman/shellcheck/wiki/SC2068 + # SC2086: Double quote to prevent globbing and word splitting - https://github.com/koalaman/shellcheck/wiki/SC2086 + @echo linting... + @$(QUIET) find . -not -path '*/\.*' | xargs file | egrep "shell|bash" | awk '{ print $$1 }' | sed 's/://g' | xargs shellcheck -e SC2046,SC2068,SC2086 + +unit-tests: + @echo running unit tests... + @$(QUIET) bats tests/unit + +test: ci-dependencies lint unit-tests diff --git a/commands b/commands index 442247d..04d7bc9 100755 --- a/commands +++ b/commands @@ -67,7 +67,7 @@ case "$1" in fi dokku_log_info1 "Deleting $SERVICE" - if [[ -f "$SERVICE_ROOT/ID" ]] && docker ps -aq --no-trunc | grep -q $(cat "$SERVICE_ROOT/ID"); then + if [[ -f "$SERVICE_ROOT/ID" ]] && docker ps -aq --no-trunc | grep -q "$(cat "$SERVICE_ROOT/ID")"; then ID=$(cat "$SERVICE_ROOT/ID") service_stop "$SERVICE" @@ -159,7 +159,7 @@ case "$1" in $PLUGIN_COMMAND_PREFIX:info) [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" verify_service_name "$2" - service_info $2 + service_info "$2" ;; $PLUGIN_COMMAND_PREFIX:list) diff --git a/functions b/functions index d4c1eb6..f18dc7c 100755 --- a/functions +++ b/functions @@ -50,7 +50,7 @@ service_info() { } service_list() { - local SERVICES=$(ls $PLUGIN_DATA_ROOT 2> /dev/null) + local SERVICES=$(ls "$PLUGIN_DATA_ROOT" 2> /dev/null) if [[ -z $SERVICES ]]; then dokku_log_warn "There are no $PLUGIN_SERVICE services" else diff --git a/install b/install index f3b2bed..a32d3b8 100755 --- a/install +++ b/install @@ -2,11 +2,11 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$(dirname "$0")/config" -if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q $PLUGIN_IMAGE_VERSION ; then - docker pull $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION +if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q "$PLUGIN_IMAGE_VERSION" ; then + docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" fi docker pull svendowideit/ambassador:latest -mkdir -p $PLUGIN_DATA_ROOT || echo "Failed to create $PLUGIN_SERVICE directory" -chown dokku:dokku $PLUGIN_DATA_ROOT +mkdir -p "$PLUGIN_DATA_ROOT" || echo "Failed to create $PLUGIN_SERVICE directory" +chown dokku:dokku "$PLUGIN_DATA_ROOT" diff --git a/tests/unit/service.bats b/tests/unit/service.bats new file mode 100644 index 0000000..4b25bae --- /dev/null +++ b/tests/unit/service.bats @@ -0,0 +1,60 @@ +#!/usr/bin/env bats +export SERVICE=mongo + +flunk() { + { if [ "$#" -eq 0 ]; then cat - + else echo "$*" + fi + } + return 1 +} + +assert_success() { + if [ "$status" -ne 0 ]; then + flunk "command failed with exit status $status" + elif [ "$#" -gt 0 ]; then + assert_output "$1" + fi +} + +assert_equal() { + if [ "$1" != "$2" ]; then + { echo "expected: $1" + echo "actual: $2" + } | flunk + fi +} + +assert_output() { + local expected + if [ $# -eq 0 ]; then expected="$(cat -)" + else expected="$1" + fi + assert_equal "$expected" "$output" +} + +@test "(service) dokku" { + dokku $SERVICE:create l + assert_success + + dokku $SERVICE:info l + assert_success + + dokku $SERVICE:stop l + assert_success + + dokku $SERVICE:stop l + assert_success + + dokku $SERVICE:expose l + assert_success + + dokku $SERVICE:restart l + assert_success + + dokku $SERVICE:info l + assert_success + + dokku --force $SERVICE:destroy l + assert_success +}