summaryrefslogtreecommitdiffstats
path: root/tests/test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test.sh')
-rwxr-xr-xtests/test.sh89
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/test.sh b/tests/test.sh
new file mode 100755
index 0000000..5bc169b
--- /dev/null
+++ b/tests/test.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+#
+# Ansible role test shim.
+#
+# Usage: test.sh [os] [playbook]
+# - [os] = One of the supported distros.
+# = [playbook] = The test playbook to run. (Defaults to test.yml if unset).
+
+# Exit on any individual command failure.
+set -e
+
+# Pretty colors.
+red='\033[0;31m'
+green='\033[0;32m'
+neutral='\033[0m'
+
+# TODO: Check to make sure OS is provided.
+distro=$1
+playbook=${2:-"test.yml"}
+
+## Set up vars for Docker setup.
+# CentOS 7
+if [ $distro = 'centos7' ]; then
+ init="/usr/lib/systemd/systemd"
+ opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
+# CentOS 6
+elif [ $distro = 'centos6' ]; then
+ init="/sbin/init"
+ opts=""
+# Ubuntu 16.04
+elif [ $distro = 'ubuntu1604' ]; then
+ init="/lib/systemd/systemd"
+ opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
+# Ubuntu 14.04
+elif [ $distro = 'ubuntu1404' ]; then
+ init="/sbin/init"
+ opts=""
+# Ubuntu 12.04
+elif [ $distro = 'ubuntu1204' ]; then
+ init="/sbin/init"
+ opts=""
+# Debian 8
+elif [ $distro = 'debian8' ]; then
+ init="/lib/systemd/systemd"
+ opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
+# Fedora 24
+elif [ $distro = 'fedora24' ]; then
+ init="/usr/lib/systemd/systemd"
+ opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
+fi
+
+# Create a container ID.
+container_id=$(mktemp)
+
+# Run the container using the supplied OS.
+printf ${green}"Pulling Docker container: geerlingguy/docker-$distro-ansible."${neutral}"\n"
+docker run --detach --volume="$PWD":/etc/ansible/roles/role_under_test:rw $run_opts geerlingguy/docker-$distro-ansible:latest "$init" > "$container_id"
+
+container_id=$(cat $container_id)
+
+printf "\n"
+
+# Test Ansible syntax.
+printf ${green}"Checking Ansible playbook syntax."${neutral}
+docker exec --tty $container_id env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook --syntax-check
+
+printf "\n"
+
+# Install requirements if `requirements.yml` is present.
+# TODO
+
+printf "\n"
+
+# Run Ansible playbook.
+printf ${green}"Running command: docker exec $container_id env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook"${neutral}
+docker exec --tty $container_id env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook
+
+# Run Ansible playbook again (idempotence test).
+printf ${green}"Running playbook again: idempotence test"${neutral}
+idempotence=$(mktemp)
+docker exec --tty $container_id ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook | tee -a $idempotence
+tail $idempotence \
+ | grep -q 'changed=0.*failed=0' \
+ && (printf ${green}'Idempotence test: pass'${neutral}"\n") \
+ || (printf ${red}'Idempotence test: fail'${neutral}"\n" && exit 1)
+
+# Kill the Docker container?
+printf "Removing Docker container...\n"
+docker rm -f $container_id