diff options
| author | Mohamed Ashiq Liyazudeen <mliyazud@redhat.com> | 2017-05-08 21:08:09 +0530 | 
|---|---|---|
| committer | Mohamed Ashiq Liyazudeen <mliyazud@redhat.com> | 2017-05-08 22:39:07 +0530 | 
| commit | ec2d37cd987c6aafc7d0d71ab6c2643487d8ef92 (patch) | |
| tree | 9d6137f38a97b149c4ef75878745ddd26095e2b2 | |
| parent | e63a97ed1b464975c9df07ea07dec3b136fa034a (diff) | |
Unit Test to check the shell script and Dockerfile lint. Travis.ci intergrated.
Refer: https://github.com/projectatomic/dockerfile_lint
Signed-off-by: Mohamed Ashiq Liyazudeen <mliyazud@redhat.com>
| -rw-r--r-- | .travis.yml | 20 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | tests/Dockerfiletest/Dockerfile_faulty | 10 | ||||
| -rw-r--r-- | tests/Dockerfiletest/Makefile | 2 | ||||
| -rwxr-xr-x | tests/Dockerfiletest/run.sh | 12 | ||||
| -rwxr-xr-x | tests/Dockerfiletest/test_gluster_dockerfile.sh | 45 | ||||
| -rw-r--r-- | tests/Makefile | 2 | ||||
| -rwxr-xr-x | tests/common/subunit.sh | 113 | ||||
| -rwxr-xr-x | tests/run.sh | 22 | ||||
| -rw-r--r-- | tests/shelltest/Makefile | 2 | ||||
| -rwxr-xr-x | tests/shelltest/run.sh | 12 | ||||
| -rwxr-xr-x | tests/shelltest/test_gluster_container_basic.sh | 47 | 
12 files changed, 289 insertions, 0 deletions
diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0badc89 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +sudo: true + +addons: +  apt: +    sources: +    - sourceline: 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse' +    packages: +    - shellcheck + +before_install: +- sudo apt-get install -y -qq npm +- sudo add-apt-repository -y ppa:chris-lea/node.js +- sudo apt-get -y update +- sudo apt-get install -y nodejs +- sudo npm config set registry http://registry.npmjs.org/ +- sudo npm install -g npm +- sudo npm install -g dockerfile_lint + +script: +- make test diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2526438 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +test: +	$(MAKE) -C tests test diff --git a/tests/Dockerfiletest/Dockerfile_faulty b/tests/Dockerfiletest/Dockerfile_faulty new file mode 100644 index 0000000..b538995 --- /dev/null +++ b/tests/Dockerfiletest/Dockerfile_faulty @@ -0,0 +1,10 @@ + +MAINTAINER Humble Chirammal hchiramm@redhat.com Mohamed Ashiq Liyazudeen mliyazud@redhat.com + +LABEL Name="faulty" + +RUNCMD 'echo "fail"' + +EXPOSE 3333 + +CMD ["/usr/sbin/init"] diff --git a/tests/Dockerfiletest/Makefile b/tests/Dockerfiletest/Makefile new file mode 100644 index 0000000..13cf414 --- /dev/null +++ b/tests/Dockerfiletest/Makefile @@ -0,0 +1,2 @@ +test: +	./run.sh diff --git a/tests/Dockerfiletest/run.sh b/tests/Dockerfiletest/run.sh new file mode 100755 index 0000000..b82b810 --- /dev/null +++ b/tests/Dockerfiletest/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname $0); pwd) + +echo "running tests in ${SCRIPT_DIR}" + +for test in ${SCRIPT_DIR}/test_*.sh ; do +	$test +	if [ $? -ne 0 ]; then +		exit 1 +	fi +done diff --git a/tests/Dockerfiletest/test_gluster_dockerfile.sh b/tests/Dockerfiletest/test_gluster_dockerfile.sh new file mode 100755 index 0000000..fc52d44 --- /dev/null +++ b/tests/Dockerfiletest/test_gluster_dockerfile.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname ${0}); pwd) +TESTS_DIR="${SCRIPT_DIR}/.." +INC_DIR="${TESTS_DIR}/common" +BASE_DIR="${SCRIPT_DIR}/../.." +FAULTY_DOCKERFILE="${SCRIPT_DIR}/Dockerfile_faulty" + +source "${INC_DIR}/subunit.sh" + +check_dockerfilelint_invalid() { +        local file="${1}" +        check_dockerfilelint ${file} +       	if [[ "x$?" == "x0" ]]; then +		echo "ERROR: parsing invalid Dockerfile succeeded" +		return 1 +	fi + +	return 0 +} + +check_dockerfilelint() { +        local file="${1}" +        if ! which dockerfile_lint ; then +                echo "dockerfile_lint not found: skipping..." +                return 0 +        fi + +        dockerfile_lint -p -f ${file} +} + +failed=0 + +	testit "check invalid Dockerfile" \ +		check_dockerfilelint_invalid ${FAULTY_DOCKERFILE} \ +		|| ((failed++)) + +	for Dockerfile in $(find ${BASE_DIR} -name "Dockerfile") ; do +		testit "check Dockerfile_lint $(basename ${Dockerfile})" \ +			check_dockerfilelint ${Dockerfile} \ +			|| ((failed++)) +	done + + +testok $0 ${failed} diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..13cf414 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,2 @@ +test: +	./run.sh diff --git a/tests/common/subunit.sh b/tests/common/subunit.sh new file mode 100755 index 0000000..71aba94 --- /dev/null +++ b/tests/common/subunit.sh @@ -0,0 +1,113 @@ +# +#  subunit.sh: shell functions to report test status via the subunit protocol. +#  Copyright (C) 2006  Robert Collins <robertc@robertcollins.net> +#  Copyright (C) 2008  Jelmer Vernooij <jelmer@samba.org> +# +#  This program is free software; you can redistribute it and/or modify +#  it under the terms of the GNU General Public License as published by +#  the Free Software Foundation; either version 2 of the License, or +#  (at your option) any later version. +# +#  This program is distributed in the hope that it will be useful, +#  but WITHOUT ANY WARRANTY; without even the implied warranty of +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#  GNU General Public License for more details. +# +#  You should have received a copy of the GNU General Public License +#  along with this program; if not, write to the Free Software +#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA +# + +timestamp() { +  # mark the start time. With Gnu date, you get nanoseconds from %N +  # (here truncated to microseconds with %6N), but not on BSDs, +  # Solaris, etc, which will apparently leave either %N or N at the end. +  date -u +'time: %Y-%m-%d %H:%M:%S.%6NZ' | sed 's/\..*NZ$/.000000Z/' +} + +subunit_start_test () { +  # emit the current protocol start-marker for test $1 +  timestamp +  echo "test: $1" +} + + +subunit_pass_test () { +  # emit the current protocol test passed marker for test $1 +  timestamp +  echo "success: $1" +} + +# This is just a hack as we have some broken scripts +# which use "exit $failed", without initializing failed. +failed=0 + +subunit_fail_test () { +  # emit the current protocol fail-marker for test $1, and emit stdin as +  # the error text. +  # we use stdin because the failure message can be arbitrarily long, and this +  # makes it convenient to write in scripts (using <<END syntax. +  timestamp +  echo "failure: $1 [" +  cat - +  echo "]" +} + + +subunit_error_test () { +  # emit the current protocol error-marker for test $1, and emit stdin as +  # the error text. +  # we use stdin because the failure message can be arbitrarily long, and this +  # makes it convenient to write in scripts (using <<END syntax. +  timestamp +  echo "error: $1 [" +  cat - +  echo "]" +} + +subunit_skip_test () { +  # emit the current protocol skip-marker for test $1, and emit stdin as +  # the error text. +  # we use stdin because the failure message can be arbitrarily long, and this +  # makes it convenient to write in scripts (using <<END syntax. +  echo "skip: $1 [" +  cat - +  echo "]" +} + +testit () { +	name="$1" +	shift +	cmdline="$*" +	subunit_start_test "$name" +	output=`$cmdline 2>&1` +	status=$? +	if [ x$status = x0 ]; then +		subunit_pass_test "$name" +	else +		echo "$output" | subunit_fail_test "$name" +	fi +	return $status +} + +testit_expect_failure () { +	name="$1" +	shift +	cmdline="$*" +	subunit_start_test "$name" +	output=`$cmdline 2>&1` +	status=$? +	if [ x$status = x0 ]; then +		echo "$output" | subunit_fail_test "$name" +	else +		subunit_pass_test "$name" +	fi +	return $status +} + +testok () { +	name=`basename $1` +	failed=$2 + +	exit $failed +} diff --git a/tests/run.sh b/tests/run.sh new file mode 100755 index 0000000..baf6a48 --- /dev/null +++ b/tests/run.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname $0); pwd) + +for testdir in ${SCRIPT_DIR}/*; do +	if [[ ! -d ${testdir} ]]; then +		continue +	fi + +	if [[ ! -x ${testdir}/run.sh ]]; then +		continue +	fi + +	pushd ${testdir} +	./run.sh +	rc=$? +	popd + +	if [[ ${rc} -ne 0 ]]; then +		exit 1 +	fi +done diff --git a/tests/shelltest/Makefile b/tests/shelltest/Makefile new file mode 100644 index 0000000..13cf414 --- /dev/null +++ b/tests/shelltest/Makefile @@ -0,0 +1,2 @@ +test: +	./run.sh diff --git a/tests/shelltest/run.sh b/tests/shelltest/run.sh new file mode 100755 index 0000000..b82b810 --- /dev/null +++ b/tests/shelltest/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname $0); pwd) + +echo "running tests in ${SCRIPT_DIR}" + +for test in ${SCRIPT_DIR}/test_*.sh ; do +	$test +	if [ $? -ne 0 ]; then +		exit 1 +	fi +done diff --git a/tests/shelltest/test_gluster_container_basic.sh b/tests/shelltest/test_gluster_container_basic.sh new file mode 100755 index 0000000..8d139ca --- /dev/null +++ b/tests/shelltest/test_gluster_container_basic.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname ${0}); pwd) +TESTS_DIR="${SCRIPT_DIR}/.." +INC_DIR="${TESTS_DIR}/common" +BASE_DIR="${SCRIPT_DIR}/../.." + +GK_DEPLOY="${DEPLOY_DIR}/" + +source "${INC_DIR}/subunit.sh" + + +test_syntax() { +        local file="${1}" +	bash -n ${file} +} + +test_shellcheck() { +        local file="${1}" +	if ! which shellcheck ; then +		echo "ShellCheck not found: skipping..." +		return 0 +	fi + +	shellcheck -s bash -e SC2181 ${file} +} + +failed=0 + +testit "test script syntax ${BASE_DIR}/CentOS/gluster-setup.sh" \ +        test_syntax ${BASE_DIR}/CentOS/gluster-setup.sh \ +        || ((failed++)) + +testit "test shellcheck ${BASE_DIR}/CentOS/gluster-setup.sh" \ +        test_shellcheck ${BASE_DIR}/CentOS/gluster-setup.sh \ +        || ((failed++)) + +testit "test script syntax ${BASE_DIR}/gluster-object/CentOS/docker-gluster-swift/update_gluster_vol.sh" \ +        test_syntax ${BASE_DIR}/gluster-object/CentOS/docker-gluster-swift/update_gluster_vol.sh \ +        || ((failed++)) + +testit "test shellcheck ${BASE_DIR}/gluster-object/CentOS/docker-gluster-swift/update_gluster_vol.sh" \ +        test_shellcheck ${BASE_DIR}/gluster-object/CentOS/docker-gluster-swift/update_gluster_vol.sh \ +        || ((failed++)) + + +testok $0 ${failed}  | 
