Switch to more efficient and compact test setup.

This commit is contained in:
Jeff Geerling 2017-04-02 09:49:19 -05:00
parent 8bc87a4bec
commit cfe3aaea27
3 changed files with 26 additions and 42 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.retry
tests/test.sh

View File

@ -4,79 +4,50 @@ services: docker
env: env:
# Test package install on all supported OSes. # Test package install on all supported OSes.
- distro: centos7 - distro: centos7
init: /usr/lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
playbook: test.yml playbook: test.yml
php_version: 7.0 php_version: 7.0
- distro: fedora24 - distro: fedora24
init: /usr/lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
playbook: test.yml playbook: test.yml
php_version: 5.6 php_version: 5.6
- distro: ubuntu1604 - distro: ubuntu1604
init: /lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
playbook: test.yml playbook: test.yml
php_version: 7.0 php_version: 7.0
- distro: ubuntu1404 - distro: ubuntu1404
init: /sbin/init
run_opts: ""
playbook: test.yml playbook: test.yml
php_version: 7.0 php_version: 7.0
- distro: ubuntu1204 - distro: ubuntu1204
init: /sbin/init
run_opts: ""
playbook: test.yml playbook: test.yml
php_version: 5.6 php_version: 5.6
# Only test source install on latest supported OSes. # Only test source install on latest supported OSes.
- distro: centos7 - distro: centos7
init: /usr/lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
playbook: test-source.yml playbook: test-source.yml
php_version: 7.0.13 php_version: 7.0.13
- distro: ubuntu1604 - distro: ubuntu1604
init: /lib/systemd/systemd
run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
playbook: test-source.yml playbook: test-source.yml
php_version: 7.0.13 php_version: 7.0.13
before_install:
# Pull container.
- 'docker pull geerlingguy/docker-${distro}-ansible:latest'
script: script:
- container_id=$(mktemp) # Configure test script so we can run extra tests after playbook is run.
# Run container in detached state. - export container_id=$(date +%s)
- 'docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} geerlingguy/docker-${distro}-ansible:latest "${init}" > "${container_id}"' - export cleanup=false
# Install dependencies. # Download test shim.
- 'docker exec "$(cat ${container_id})" ansible-galaxy install -r /etc/ansible/roles/role_under_test/tests/requirements.yml' - wget -O ${PWD}/tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/
- chmod +x ${PWD}/tests/test.sh
# Ansible syntax check. # Run tests.
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} --syntax-check' - ${PWD}/tests/test.sh
# Test role.
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook}'
# Test role idempotence.
- idempotence=$(mktemp)
- docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} | tee -a ${idempotence}
- >
tail ${idempotence}
| grep -q 'changed=0.*failed=0'
&& (echo 'Idempotence test: pass' && exit 0)
|| (echo 'Idempotence test: fail' && exit 1)
# Ensure PHP is installed and at the right version. # Ensure PHP is installed and at the right version.
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm which php' - 'docker exec --tty ${container_id} env TERM=xterm which php'
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm test -x /usr/bin/php' - 'docker exec --tty ${container_id} env TERM=xterm test -x /usr/bin/php'
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm php --version' - 'docker exec --tty ${container_id} env TERM=xterm php --version'
- 'docker exec --tty "$(cat ${container_id})" env TERM=xterm /usr/bin/php --version | grep -qF "PHP ${php_version}"' - 'docker exec --tty ${container_id} env TERM=xterm /usr/bin/php --version | grep -qF "PHP ${php_version}"'
# Ensure PHP configurations have taken effect. # Ensure PHP configurations have taken effect.
- docker exec --tty "$(cat ${container_id})" env TERM=xterm php -i | grep 'memory_limit.*192' - docker exec --tty ${container_id} env TERM=xterm php -i | grep 'memory_limit.*192'
notifications: notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/ webhooks: https://galaxy.ansible.com/api/v1/notifications/

11
tests/README.md Normal file
View File

@ -0,0 +1,11 @@
# Ansible Role tests
To run the test playbook(s) in this directory:
1. Install and start Docker.
1. Download the test shim (see .travis.yml file for the URL) into `tests/test.sh`:
- `wget -O tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/`
1. Make the test shim executable: `chmod +x tests/test.sh`.
1. Run (from the role root directory) `distro=[distro] playbook=[playbook] ./tests/test.sh`
If you don't want the container to be automatically deleted after the test playbook is run, add the following environment variables: `cleanup=false container_id=$(date +%s)`