summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml30
-rwxr-xr-xtests/test.sh89
2 files changed, 91 insertions, 28 deletions
diff --git a/.travis.yml b/.travis.yml
index 494f809..5ea940f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,44 +3,18 @@ services: docker
env:
- distro: centos7
- init: /usr/lib/systemd/systemd
- run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
- distro: centos6
- init: /sbin/init
- run_opts: ""
- distro: ubuntu1604
- init: /lib/systemd/systemd
- run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
- distro: ubuntu1404
- init: /sbin/init
- run_opts: ""
- distro: ubuntu1204
- init: /sbin/init
- run_opts: ""
before_install:
# Pull container.
- 'docker pull geerlingguy/docker-${distro}-ansible:latest'
script:
- - container_id=$(mktemp)
- # Run container in detached state.
- - 'docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} geerlingguy/docker-${distro}-ansible:latest "${init}" > "${container_id}"'
-
- # Ansible syntax check.
- - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml --syntax-check'
-
- # Test role.
- - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml'
-
- # Test role idempotence.
- - idempotence=$(mktemp)
- - docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml | tee -a ${idempotence}
- - >
- tail ${idempotence}
- | grep -q 'changed=0.*failed=0'
- && (echo 'Idempotence test: pass' && exit 0)
- || (echo 'Idempotence test: fail' && exit 1)
+ # Run tests.
+ - ${PWD}/tests/test.sh ${distro}
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/
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