summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamed Ashiq Liyazudeen <mliyazud@redhat.com>2017-05-08 21:08:09 +0530
committerMohamed Ashiq Liyazudeen <mliyazud@redhat.com>2017-05-08 22:39:07 +0530
commitec2d37cd987c6aafc7d0d71ab6c2643487d8ef92 (patch)
tree9d6137f38a97b149c4ef75878745ddd26095e2b2
parente63a97ed1b464975c9df07ea07dec3b136fa034a (diff)
downloadgluster-ec2d37cd987c6aafc7d0d71ab6c2643487d8ef92.tar.gz
gluster-ec2d37cd987c6aafc7d0d71ab6c2643487d8ef92.tar.bz2
gluster-ec2d37cd987c6aafc7d0d71ab6c2643487d8ef92.tar.xz
gluster-ec2d37cd987c6aafc7d0d71ab6c2643487d8ef92.zip
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.yml20
-rw-r--r--Makefile2
-rw-r--r--tests/Dockerfiletest/Dockerfile_faulty10
-rw-r--r--tests/Dockerfiletest/Makefile2
-rwxr-xr-xtests/Dockerfiletest/run.sh12
-rwxr-xr-xtests/Dockerfiletest/test_gluster_dockerfile.sh45
-rw-r--r--tests/Makefile2
-rwxr-xr-xtests/common/subunit.sh113
-rwxr-xr-xtests/run.sh22
-rw-r--r--tests/shelltest/Makefile2
-rwxr-xr-xtests/shelltest/run.sh12
-rwxr-xr-xtests/shelltest/test_gluster_container_basic.sh47
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}