|
1 | 1 | #!/bin/bash
|
| 2 | +# |
| 3 | +# A script to run Drupal VM functional tests. |
2 | 4 |
|
3 |
| -# Set volume options. |
| 5 | +# Set defaults if they're not set upstream. |
| 6 | +CONFIG="${CONFIG:-tests/config.yml}" |
| 7 | +MAKEFILE="${MAKEFILE:-example.drupal.make.yml}" |
| 8 | +COMPOSERFILE="${COMPOSERFILE:-example.drupal.composer.json}" |
| 9 | +HOSTNAME="${HOSTNAME:-drupalvm.dev}" |
| 10 | +MACHINE_NAME="${MACHINE_NAME:-drupalvm}" |
| 11 | +IP="${IP:-192.168.88.88}" |
| 12 | +DRUPALVM_DIR="${DRUPALVM_DIR:-/var/www/drupalvm}" |
| 13 | +DRUSH_BIN="${DRUSH_BIN:-drush}" |
| 14 | +TEST_INSTALLED_EXTRAS="${TEST_INSTALLED_EXTRAS:-true}" |
| 15 | +CONTAINER_ID="${CONTAINER_ID:-dvm-test}" |
| 16 | +type="${type:-tests/defaults}" |
| 17 | +distro="${distro:-ubuntu1604}" |
| 18 | + |
| 19 | +## Set up vars for Docker setup. |
| 20 | +# CentOS 7 |
| 21 | +if [ $distro = 'centos7' ]; then |
| 22 | + init="/usr/lib/systemd/systemd" |
| 23 | + opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" |
| 24 | +# CentOS 6 |
| 25 | +elif [ $distro = 'centos6' ]; then |
| 26 | + init="/sbin/init" |
| 27 | + opts="--privileged" |
| 28 | +# Ubuntu 16.04 |
| 29 | +elif [ $distro = 'ubuntu1604' ]; then |
| 30 | + init="/lib/systemd/systemd" |
| 31 | + opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" |
| 32 | +# Ubuntu 14.04 |
| 33 | +elif [ $distro = 'ubuntu1404' ]; then |
| 34 | + init="/sbin/init" |
| 35 | + opts="--privileged" |
| 36 | +# Ubuntu 12.04 |
| 37 | +elif [ $distro = 'ubuntu1204' ]; then |
| 38 | + init="/sbin/init" |
| 39 | + opts="--privileged" |
| 40 | +# Debian 8 |
| 41 | +elif [ $distro = 'debian8' ]; then |
| 42 | + init="/lib/systemd/systemd" |
| 43 | + opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" |
| 44 | +# Fedora 24 |
| 45 | +elif [ $distro = 'fedora24' ]; then |
| 46 | + init="/usr/lib/systemd/systemd" |
| 47 | + opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" |
| 48 | +fi |
| 49 | + |
| 50 | +# Set OS-specific options. |
4 | 51 | if [[ "$OSTYPE" == "darwin"* ]]; then
|
5 | 52 | volume_opts='rw,cached'
|
| 53 | + xargs_command='xargs' |
6 | 54 | else
|
7 | 55 | volume_opts='rw'
|
| 56 | + xargs_command='xargs -r' |
8 | 57 | fi
|
9 | 58 |
|
| 59 | +# Exit on any individual command failure. |
| 60 | +set -e |
| 61 | + |
| 62 | +# Pretty colors. |
| 63 | +red='\033[0;31m' |
| 64 | +green='\033[0;32m' |
| 65 | +neutral='\033[0m' |
| 66 | + |
10 | 67 | # Remove test container if it already exists.
|
11 |
| -docker ps -aq --filter name=dvm-test | xargs docker rm -f -v |
| 68 | +printf "\n"${green}"Removing any existing test containers..."${neutral}"\n" |
| 69 | +docker ps -aq --filter name=$CONTAINER_ID | $xargs_command docker rm -f -v |
| 70 | +printf ${green}"...done!"${neutral}"\n" |
12 | 71 |
|
13 | 72 | # Run the container.
|
14 |
| -docker run --name=dvm-test -d \ |
| 73 | +printf "\n"${green}"Starting Docker container: geerlingguy/docker-$distro-ansible."${neutral}"\n" |
| 74 | +docker run --name=$CONTAINER_ID -d \ |
15 | 75 | --add-host "$HOSTNAME drupalvm":127.0.0.1 \
|
16 | 76 | -v $PWD:/var/www/drupalvm/:$volume_opts \
|
17 |
| - -p 8888:80 \ |
18 |
| - --privileged \ |
19 |
| - geerlingguy/docker-ubuntu1604-ansible:latest \ |
20 |
| - /lib/systemd/systemd |
| 77 | + $opts \ |
| 78 | + geerlingguy/docker-$distro-ansible:latest \ |
| 79 | + $init |
21 | 80 |
|
22 |
| -# Create Drupal directory. |
23 |
| -docker exec dvm-test mkdir -p /var/www/drupalvm/drupal |
| 81 | +# Set up directories. |
| 82 | +docker exec $CONTAINER_ID mkdir -p /var/www/drupalvm/drupal |
| 83 | +[[ ! -z "$config_dir" ]] && docker exec $CONTAINER_ID mkdir -p $config_dir || true |
| 84 | + |
| 85 | +# Copy configuration into place. |
| 86 | +docker exec $CONTAINER_ID cp $DRUPALVM_DIR/$CONFIG ${config_dir:-$DRUPALVM_DIR}/config.yml |
| 87 | +docker exec $CONTAINER_ID cp $DRUPALVM_DIR/$MAKEFILE ${config_dir:-$DRUPALVM_DIR}/drupal.make.yml |
| 88 | +docker exec $CONTAINER_ID cp $DRUPALVM_DIR/$COMPOSERFILE ${config_dir:-$DRUPALVM_DIR}/drupal.composer.json |
| 89 | +[[ ! -z "$DRUPALVM_ENV" ]] && docker exec $CONTAINER_ID bash -c "cp $DRUPALVM_DIR/tests/$DRUPALVM_ENV.config.yml ${config_dir:-$DRUPALVM_DIR}/$DRUPALVM_ENV.config.yml" || true |
| 90 | + |
| 91 | +# Override configuration variables with local config. |
| 92 | +[[ ! -z "$local_config" ]] && docker exec $CONTAINER_ID bash -c "cp $DRUPALVM_DIR/$local_config ${config_dir:-$DRUPALVM_DIR}/local.config.yml" || true |
24 | 93 |
|
25 | 94 | # Check playbook syntax.
|
26 |
| -docker exec --tty dvm-test env TERM=xterm ansible-playbook /var/www/drupalvm/provisioning/playbook.yml --syntax-check |
| 95 | +printf "\n"${green}"Checking playbook syntax..."${neutral}"\n" |
| 96 | +docker exec --tty $CONTAINER_ID env TERM=xterm ansible-playbook $DRUPALVM_DIR/provisioning/playbook.yml --syntax-check |
| 97 | + |
| 98 | +# Run the setup playbook. |
| 99 | +printf "\n"${green}"Running the setup playbook..."${neutral}"\n" |
| 100 | +docker exec --tty $CONTAINER_ID env TERM=xterm ansible-playbook /var/www/drupalvm/tests/test-setup.yml |
27 | 101 |
|
28 |
| -# Set things up and run the Ansible playbook. |
29 |
| -docker exec --tty dvm-test env TERM=xterm ansible-playbook /var/www/drupalvm/tests/test-setup.yml |
30 |
| -docker exec dvm-test env TERM=xterm ANSIBLE_FORCE_COLOR=true COMPOSER_PROCESS_TIMEOUT=1800 ansible-playbook /var/www/drupalvm/provisioning/playbook.yml |
| 102 | +# Run the Drupal VM playbook. |
| 103 | +printf "\n"${green}"Running the Drupal VM playbook..."${neutral}"\n" |
| 104 | +if [ ! -z "${config_dir}" ]; then |
| 105 | + # Run with config_dir specified. |
| 106 | + docker exec $CONTAINER_ID env TERM=xterm ANSIBLE_FORCE_COLOR=true DRUPALVM_ENV=$DRUPALVM_ENV \ |
| 107 | + ansible-playbook $DRUPALVM_DIR/provisioning/playbook.yml \ |
| 108 | + --extra-vars="config_dir=$config_dir"; |
| 109 | +else |
| 110 | + # Run without config_dir specified. |
| 111 | + docker exec $CONTAINER_ID env TERM=xterm ANSIBLE_FORCE_COLOR=true DRUPALVM_ENV=$DRUPALVM_ENV \ |
| 112 | + ansible-playbook $DRUPALVM_DIR/provisioning/playbook.yml; |
| 113 | +fi |
31 | 114 |
|
32 |
| -# Check if Drupal was installed successfully. |
33 |
| -docker exec dvm-test curl -s --header Host:$HOSTNAME localhost \ |
| 115 | +# Drupal. |
| 116 | +printf "\n"${green}"Running functional tests..."${neutral}"\n" |
| 117 | +docker exec $CONTAINER_ID curl -s --header Host:$HOSTNAME localhost \ |
34 | 118 | | grep -q '<title>Welcome to Drupal' \
|
35 | 119 | && (echo 'Drupal install pass' && exit 0) \
|
36 | 120 | || (echo 'Drupal install fail' && exit 1)
|
37 | 121 |
|
| 122 | +# Adminer. |
| 123 | +if [ $TEST_INSTALLED_EXTRAS = true ]; then |
| 124 | + docker exec $CONTAINER_ID curl -s --header Host:adminer.$HOSTNAME localhost \ |
| 125 | + | grep -q '<title>Login - Adminer' \ |
| 126 | + && (echo 'Adminer install pass' && exit 0) \ |
| 127 | + || (echo 'Adminer install fail' && exit 1) |
| 128 | +fi |
| 129 | + |
| 130 | +# Pimp My Log. |
| 131 | +if [ $TEST_INSTALLED_EXTRAS = true ]; then |
| 132 | + docker exec $CONTAINER_ID curl -s --header Host:pimpmylog.$HOSTNAME localhost \ |
| 133 | + | grep -q '<title>Pimp my Log' \ |
| 134 | + && (echo 'Pimp my Log install pass' && exit 0) \ |
| 135 | + || (echo 'Pimp my Log install fail' && exit 1) |
| 136 | +fi |
| 137 | + |
| 138 | +# MailHog. |
| 139 | +if [ $TEST_INSTALLED_EXTRAS = true ]; then |
| 140 | + docker exec $CONTAINER_ID curl -s localhost:8025 \ |
| 141 | + | grep -q '<title>MailHog' \ |
| 142 | + && (echo 'MailHog install pass' && exit 0) \ |
| 143 | + || (echo 'MailHog install fail' && exit 1) |
| 144 | +fi |
| 145 | + |
| 146 | +# Varnish. |
| 147 | +if [ $TEST_INSTALLED_EXTRAS = true ]; then |
| 148 | + docker exec $CONTAINER_ID curl -sI --header Host:$HOSTNAME localhost:81 \ |
| 149 | + | grep -q 'Via: .* varnish' \ |
| 150 | + && (echo 'Varnish install pass' && exit 0) \ |
| 151 | + || (echo 'Varnish install fail' && exit 1) |
| 152 | +fi |
| 153 | + |
| 154 | +# Dashboard. |
| 155 | +docker exec $CONTAINER_ID curl -s --header Host:$IP localhost |
| 156 | + | grep -q "<li>$IP $HOSTNAME</li>" |
| 157 | + && (echo 'Dashboard install pass' && exit 0) |
| 158 | + || (echo 'Dashboard install fail' && exit 1) |
| 159 | + |
| 160 | +# Drush. |
| 161 | +docker exec $CONTAINER_ID $DRUSH_BIN @$MACHINE_NAME.$HOSTNAME status |
| 162 | + | grep -q 'Drupal bootstrap.*Successful' |
| 163 | + && (echo 'Drush install pass' && exit 0) |
| 164 | + || (echo 'Drush install fail' && exit 1) |
| 165 | + |
38 | 166 | # Remove test container.
|
39 |
| -docker rm -f dvm-test |
| 167 | +printf "\n"${green}"Cleaning up..."${neutral}"\n" |
| 168 | +docker rm -f $CONTAINER_ID |
| 169 | +printf ${green}"...done!"${neutral}"\n\n" |
0 commit comments