|
| 1 | +#!/usr/bin/env bats |
| 2 | + |
| 3 | +# Bats is a testing framework for Bash |
| 4 | +# Documentation https://bats-core.readthedocs.io/en/stable/ |
| 5 | +# Bats libraries documentation https://github.com/ztombol/bats-docs |
| 6 | + |
| 7 | +# For local tests, install bats-core, bats-assert, bats-file, bats-support |
| 8 | +# And run this in the add-on root directory: |
| 9 | +# bats ./tests/test.bats |
| 10 | +# To exclude release tests: |
| 11 | +# bats ./tests/test.bats --filter-tags '!release' |
| 12 | +# For debugging: |
| 13 | +# bats ./tests/test.bats --show-output-of-passing-tests --verbose-run --print-output-on-failure |
| 14 | + |
1 | 15 | setup() { |
2 | 16 | set -eu -o pipefail |
3 | | - export DIR="$(cd "$(dirname "$BATS_TEST_FILENAME")" >/dev/null 2>&1 && pwd)/.." |
4 | | - export TESTDIR=~/tmp/testvarnish |
5 | | - mkdir -p $TESTDIR |
6 | | - export PROJNAME=test-varnish |
| 17 | + |
| 18 | + # Override this variable for your add-on: |
| 19 | + export GITHUB_REPO=ddev/ddev-varnish |
| 20 | + |
| 21 | + TEST_BREW_PREFIX="$(brew --prefix 2>/dev/null || true)" |
| 22 | + export BATS_LIB_PATH="${BATS_LIB_PATH}:${TEST_BREW_PREFIX}/lib:/usr/lib/bats" |
| 23 | + bats_load_library bats-assert |
| 24 | + bats_load_library bats-file |
| 25 | + bats_load_library bats-support |
| 26 | + |
| 27 | + export DIR="$(cd "$(dirname "${BATS_TEST_FILENAME}")/.." >/dev/null 2>&1 && pwd)" |
| 28 | + export PROJNAME="test-$(basename "${GITHUB_REPO}")" |
| 29 | + mkdir -p ~/tmp |
| 30 | + export TESTDIR=$(mktemp -d ~/tmp/${PROJNAME}.XXXXXX) |
7 | 31 | export DDEV_NONINTERACTIVE=true |
8 | | - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 || true |
| 32 | + export DDEV_NO_INSTRUMENTATION=true |
| 33 | + ddev delete -Oy "${PROJNAME}" >/dev/null 2>&1 || true |
9 | 34 | cd "${TESTDIR}" |
10 | | - ddev config --project-name=${PROJNAME} --additional-hostnames=extrahostname --additional-fqdns=extrafqdn.ddev.site --omit-containers=db |
| 35 | + |
| 36 | + run ddev config --project-name="${PROJNAME}" --project-tld=ddev.site --additional-hostnames=extrahostname --additional-fqdns=extrafqdn.ddev.site |
| 37 | + assert_success |
| 38 | + |
11 | 39 | printf "<?php\nphpinfo();\n" >index.php |
12 | | - ddev start -y >/dev/null |
13 | | -} |
| 40 | + assert_file_exists index.php |
14 | 41 |
|
15 | | -teardown() { |
16 | | - set -eu -o pipefail |
17 | | - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
18 | | - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 |
19 | | - [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} |
| 42 | + run ddev start -y |
| 43 | + assert_success |
20 | 44 | } |
21 | 45 |
|
22 | | -@test "install from directory" { |
23 | | - set -eu -o pipefail |
24 | | - cd ${TESTDIR} |
25 | | - echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
26 | | - ddev add-on get ${DIR} >/dev/null |
27 | | - ddev restart >/dev/null 2>&1 |
28 | | - for url in http://${PROJNAME}.ddev.site/ http://extrahostname.ddev.site/ http://extrafqdn.ddev.site/ https://${PROJNAME}.ddev.site/ https://extrahostname.ddev.site/ https://extrafqdn.ddev.site/ ; do |
| 46 | +health_checks() { |
| 47 | + for url in http://${PROJNAME}.ddev.site:${ROUTER_HTTP_PORT}/ http://extrahostname.ddev.site:${ROUTER_HTTP_PORT}/ http://extrafqdn.ddev.site:${ROUTER_HTTP_PORT}/ https://${PROJNAME}.ddev.site:${ROUTER_HTTPS_PORT}/ https://extrahostname.ddev.site:${ROUTER_HTTPS_PORT}/ https://extrafqdn.ddev.site:${ROUTER_HTTPS_PORT}/ ; do |
29 | 48 | # It's "Via:" with http and "via:" with https. Tell me why. |
30 | 49 | echo "# test $url for via:.*varnish header" >&3 |
31 | | - curl -sI $url | grep -i "Via:.*varnish" >/dev/null || (echo "# varnish headers not shown for $url" >&3 && exit 1); |
| 50 | + curl -sfI $url | grep -i "Via:.*varnish" >/dev/null || (echo "# varnish headers not shown for $url" >&3 && exit 1); |
32 | 51 | echo "# test $url for phpinfo content" >&3 |
33 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
| 52 | + curl -sf $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
34 | 53 | done |
35 | | - for url in http://novarnish.${PROJNAME}.ddev.site/ http://novarnish.extrahostname.ddev.site/ http://novarnish.extrafqdn.ddev.site/ https://novarnish.${PROJNAME}.ddev.site/ https://novarnish.extrahostname.ddev.site/ https://novarnish.extrafqdn.ddev.site/ ; do |
| 54 | + |
| 55 | + for url in http://novarnish.${PROJNAME}.ddev.site:${ROUTER_HTTP_PORT}/ http://novarnish.extrahostname.ddev.site:${ROUTER_HTTP_PORT}/ http://novarnish.extrafqdn.ddev.site:${ROUTER_HTTP_PORT}/ https://novarnish.${PROJNAME}.ddev.site:${ROUTER_HTTPS_PORT}/ https://novarnish.extrahostname.ddev.site:${ROUTER_HTTPS_PORT}/ https://novarnish.extrafqdn.ddev.site:${ROUTER_HTTPS_PORT}/ ; do |
36 | 56 | echo "# test $url for phpinfo content" >&3 |
37 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
| 57 | + curl -sf $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
38 | 58 | done |
39 | | - echo "# test http://${PROJNAME}.ddev.site:8025 for http novarnish redirect" >&3 |
40 | | - curl -sI "http://${PROJNAME}.ddev.site:8025" | grep -i "http://novarnish.${PROJNAME}.ddev.site:8025/" >/dev/null || (echo "# http://${PROJNAME}.ddev.site:8025 did not redirect" >&3 && exit 1); |
41 | | - echo "# test https://${PROJNAME}.ddev.site:8026 for https novarnish redirect" >&3 |
42 | | - curl -sI "https://${PROJNAME}.ddev.site:8026" | grep -i "https://novarnish.${PROJNAME}.ddev.site:8026/" >/dev/null || (echo "# https://${PROJNAME}.ddev.site:8026 did not redirect" >&3 && exit 1); |
| 59 | + |
| 60 | + echo "# test http://${PROJNAME}.ddev.site:${MAILPIT_HTTP_PORT}/ for http novarnish redirect" >&3 |
| 61 | + curl -sfI "http://${PROJNAME}.ddev.site:${MAILPIT_HTTP_PORT}/" | grep -i "http://novarnish.${PROJNAME}.ddev.site:${MAILPIT_HTTP_PORT}/" >/dev/null || (echo "# http://${PROJNAME}.ddev.site:${MAILPIT_HTTP_PORT} did not redirect" >&3 && exit 1); |
| 62 | + echo "# test https://${PROJNAME}.ddev.site:${MAILPIT_HTTPS_PORT}/ for https novarnish redirect" >&3 |
| 63 | + curl -sfI "https://${PROJNAME}.ddev.site:${MAILPIT_HTTPS_PORT}/" | grep -i "https://novarnish.${PROJNAME}.ddev.site:${MAILPIT_HTTPS_PORT}/" >/dev/null || (echo "# https://${PROJNAME}.ddev.site:${MAILPIT_HTTPS_PORT} did not redirect" >&3 && exit 1); |
43 | 64 | } |
44 | 65 |
|
45 | | -@test "install from directory with nonstandard port" { |
| 66 | +teardown() { |
46 | 67 | set -eu -o pipefail |
47 | | - cd ${TESTDIR} |
48 | | - ddev config --router-http-port 8080 --router-https-port 8443 --mailpit-http-port 18025 --mailpit-https-port 18026 |
49 | | - echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
50 | | - ddev add-on get ${DIR} >/dev/null |
51 | | - ddev restart >/dev/null 2>&1 |
52 | | - for url in http://${PROJNAME}.ddev.site:8080/ http://extrahostname.ddev.site:8080/ http://extrafqdn.ddev.site:8080/ https://${PROJNAME}.ddev.site:8443/ https://extrahostname.ddev.site:8443/ https://extrafqdn.ddev.site:8443/ ; do |
53 | | - # It's "Via:" with http and "via:" with https. Tell me why. |
54 | | - echo "# test $url for via:.*varnish header" >&3 |
55 | | - curl -sI $url | grep -i "Via:.*varnish" >/dev/null || (echo "# varnish headers not shown for $url" >&3 && exit 1); |
56 | | - echo "# test $url for phpinfo content" >&3 |
57 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
58 | | - done |
59 | | - for url in http://novarnish.${PROJNAME}.ddev.site:8080/ http://novarnish.extrahostname.ddev.site:8080/ http://novarnish.extrafqdn.ddev.site:8080/ https://novarnish.${PROJNAME}.ddev.site:8443/ https://novarnish.extrahostname.ddev.site:8443/ https://novarnish.extrafqdn.ddev.site:8443/ ; do |
60 | | - echo "# test $url for phpinfo content" >&3 |
61 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
62 | | - done |
63 | | - echo "# test http://${PROJNAME}.ddev.site:18025 for http novarnish redirect" >&3 |
64 | | - curl -sI "http://${PROJNAME}.ddev.site:18025" | grep -i "http://novarnish.${PROJNAME}.ddev.site:18025/" >/dev/null || (echo "# http://${PROJNAME}.ddev.site:18025 did not redirect" >&3 && exit 1); |
65 | | - echo "# test https://${PROJNAME}.ddev.site:18026 for https novarnish redirect" >&3 |
66 | | - curl -sI "https://${PROJNAME}.ddev.site:18026" | grep -i "https://novarnish.${PROJNAME}.ddev.site:18026/" >/dev/null || (echo "# https://${PROJNAME}.ddev.site:18026 did not redirect" >&3 && exit 1); |
| 68 | + ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 |
| 69 | + [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} |
| 70 | +} |
| 71 | + |
| 72 | +@test "install from directory" { |
| 73 | + set -eu -o pipefail |
| 74 | + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 |
| 75 | + run ddev add-on get "${DIR}" |
| 76 | + assert_success |
| 77 | + run ddev restart -y |
| 78 | + assert_success |
| 79 | + export ROUTER_HTTP_PORT=80 ROUTER_HTTPS_PORT=443 MAILPIT_HTTP_PORT=8025 MAILPIT_HTTPS_PORT=8026 |
| 80 | + health_checks |
67 | 81 | } |
68 | 82 |
|
69 | 83 | # bats test_tags=release |
70 | 84 | @test "install from release" { |
71 | 85 | set -eu -o pipefail |
72 | | - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
73 | | - echo "# ddev add-on get ddev/ddev-varnish with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
74 | | - ddev add-on get ddev/ddev-varnish >/dev/null |
75 | | - ddev restart >/dev/null 2>&1 |
76 | | - for url in http://${PROJNAME}.ddev.site/ http://extrahostname.ddev.site/ http://extrafqdn.ddev.site/ https://${PROJNAME}.ddev.site/ https://extrahostname.ddev.site/ https://extrafqdn.ddev.site/ ; do |
77 | | - # It's "Via:" with http and "via:" with https. Tell me why. |
78 | | - echo "# test $url for via:.*varnish header" >&3 |
79 | | - curl -sI $url | grep -i "Via:.*varnish" >/dev/null || (echo "# varnish headers not shown for $url" >&3 && exit 1); |
80 | | - echo "# test $url for phpinfo content" >&3 |
81 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
82 | | - done |
83 | | - for url in http://novarnish.${PROJNAME}.ddev.site/ http://novarnish.extrahostname.ddev.site/ http://novarnish.extrafqdn.ddev.site/ https://novarnish.${PROJNAME}.ddev.site/ https://novarnish.extrahostname.ddev.site/ https://novarnish.extrafqdn.ddev.site/ ; do |
84 | | - echo "# test $url for phpinfo content" >&3 |
85 | | - curl -s $url | grep "allow_url_fopen" >/dev/null || (echo "# phpinfo information not shown in curl for $url" >&3 && exit 1); |
86 | | - done |
87 | | - echo "# test http://${PROJNAME}.ddev.site:8025 for http novarnish redirect" >&3 |
88 | | - curl -sI "http://${PROJNAME}.ddev.site:8025" | grep -i "http://novarnish.${PROJNAME}.ddev.site:8025/" >/dev/null || (echo "# http://${PROJNAME}.ddev.site:8025 did not redirect" >&3 && exit 1); |
89 | | - echo "# test https://${PROJNAME}.ddev.site:8026 for https novarnish redirect" >&3 |
90 | | - curl -sI "https://${PROJNAME}.ddev.site:8026" | grep -i "https://novarnish.${PROJNAME}.ddev.site:8026/" >/dev/null || (echo "# https://${PROJNAME}.ddev.site:8026 did not redirect" >&3 && exit 1); |
| 86 | + echo "# ddev add-on get ${GITHUB_REPO} with project ${PROJNAME} in $(pwd)" >&3 |
| 87 | + run ddev add-on get "${GITHUB_REPO}" |
| 88 | + assert_success |
| 89 | + run ddev restart -y |
| 90 | + assert_success |
| 91 | + export ROUTER_HTTP_PORT=80 ROUTER_HTTPS_PORT=443 MAILPIT_HTTP_PORT=8025 MAILPIT_HTTPS_PORT=8026 |
| 92 | + health_checks |
| 93 | +} |
| 94 | + |
| 95 | +@test "install from directory with nonstandard port" { |
| 96 | + set -eu -o pipefail |
| 97 | + run ddev config --router-http-port=8080 --router-https-port=8443 --mailpit-http-port=18025 --mailpit-https-port=18026 |
| 98 | + assert_success |
| 99 | + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 |
| 100 | + run ddev add-on get "${DIR}" |
| 101 | + assert_success |
| 102 | + run ddev restart -y |
| 103 | + assert_success |
| 104 | + export ROUTER_HTTP_PORT=8080 ROUTER_HTTPS_PORT=8443 MAILPIT_HTTP_PORT=18025 MAILPIT_HTTPS_PORT=18026 |
| 105 | + health_checks |
91 | 106 | } |
0 commit comments