|
| 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 |
| - brew_prefix=$(brew --prefix) |
4 |
| - load "${brew_prefix}/lib/bats-support/load.bash" |
5 |
| - load "${brew_prefix}/lib/bats-assert/load.bash" |
6 |
| - export DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )/.." |
7 |
| - export TESTDIR=~/tmp/testmongo |
8 |
| - mkdir -p $TESTDIR |
9 |
| - export PROJNAME=testmongo |
10 |
| - export DDEV_NON_INTERACTIVE=true |
11 |
| - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 || true |
12 |
| - cd "${TESTDIR}" |
13 |
| - ddev config --project-name=${PROJNAME} >/dev/null |
14 |
| - printf "<?php\nphpinfo();\n" >index.php |
15 |
| - ddev start -y >/dev/null |
16 |
| -} |
17 | 17 |
|
18 |
| -teardown() { |
19 |
| - set -eu -o pipefail |
20 |
| - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
21 |
| - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 |
22 |
| - [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} |
| 18 | + # Override this variable for your add-on: |
| 19 | + export GITHUB_REPO=ddev/ddev-mongo |
| 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) |
| 31 | + export DDEV_NONINTERACTIVE=true |
| 32 | + export DDEV_NO_INSTRUMENTATION=true |
| 33 | + ddev delete -Oy "${PROJNAME}" >/dev/null 2>&1 || true |
| 34 | + cd "${TESTDIR}" |
| 35 | + run ddev config --project-name="${PROJNAME}" --project-tld=ddev.site |
| 36 | + assert_success |
| 37 | + run ddev start -y |
| 38 | + assert_success |
23 | 39 | }
|
24 | 40 |
|
25 | 41 | health_checks() {
|
26 |
| - set +u # bats-assert has unset variables so turn off unset check |
27 |
| - # ddev restart is required because we have done `ddev add-on get` on a new service |
28 |
| - run ddev restart |
| 42 | + run ddev php -i |
| 43 | + assert_success |
| 44 | + assert_output --partial "mongodb.debug" |
| 45 | + |
| 46 | + run ddev mongosh 'mongodb://db:db@mongo:27017/test?authSource=admin' --quiet --eval 'JSON.stringify(db.getUsers())' |
29 | 47 | assert_success
|
30 |
| - curl -sI ${PROJNAME}.ddev.site:9091/db/admin/expArr/system.users | grep "HTTP/1.1 200 OK" |
31 |
| - out=$(curl -s ${PROJNAME}.ddev.site:9091/db/admin/expArr/system.users | jq -r ".[0].user") |
32 |
| - [ "${out}" = "db" ] |
33 |
| - (ddev exec php -i | grep mongodb.debug) || (echo "# php mongodb extension not found" >&3 || exit 1) |
34 |
| - # Test mongosh |
35 |
| - result=$(ddev mongosh "mongodb://db:db@mongo:27017/test?authSource=admin" --quiet --eval '"printjson(db.getUsers())"' --json | grep "ok" | sed 's/: 1/ /g' | sed 's/ //g' | tr ' \n' '#') |
36 |
| - if [[ $result == "ok#" ]] |
37 |
| - then |
38 |
| - echo "# Mongosh OK" >&3 |
39 |
| - else |
40 |
| - echo "# Mongosh KO" |
41 |
| - echo "$result" |
42 |
| - exit 1 |
43 |
| - fi |
44 |
| - # Make sure `ddev mongo-express` works |
| 48 | + assert_output --partial '"ok":1' |
| 49 | + |
45 | 50 | DDEV_DEBUG=true run ddev mongo-express
|
46 | 51 | assert_success
|
47 | 52 | assert_output --partial "FULLURL https://${PROJNAME}.ddev.site:9092"
|
| 53 | + |
| 54 | + run curl -sfI https://${PROJNAME}.ddev.site:9092/db/admin/expArr/system.users |
| 55 | + assert_success |
| 56 | + assert_output --partial "HTTP/2 200" |
| 57 | + assert_output --partial "x-powered-by: Express" |
| 58 | + |
| 59 | + run bash -c "curl -sf https://${PROJNAME}.ddev.site:9092/db/admin/expArr/system.users | jq -r '.[0].user'" |
| 60 | + assert_success |
| 61 | + assert_output "db" |
| 62 | +} |
| 63 | + |
| 64 | +teardown() { |
| 65 | + set -eu -o pipefail |
| 66 | + ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 |
| 67 | + [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} |
48 | 68 | }
|
49 | 69 |
|
50 | 70 | @test "install from directory" {
|
51 | 71 | set -eu -o pipefail
|
52 |
| - cd ${TESTDIR} |
53 |
| - echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
54 |
| - ddev add-on get ${DIR} >/dev/null |
| 72 | + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 |
| 73 | + run ddev add-on get "${DIR}" |
| 74 | + assert_success |
| 75 | + run ddev restart -y |
| 76 | + assert_success |
55 | 77 | health_checks
|
56 | 78 | }
|
57 | 79 |
|
58 | 80 | # bats test_tags=release
|
59 | 81 | @test "install from release" {
|
60 | 82 | set -eu -o pipefail
|
61 |
| - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
62 |
| - echo "# ddev add-on get ddev/ddev-mongo with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
63 |
| - ddev add-on get ddev/ddev-mongo >/dev/null |
| 83 | + echo "# ddev add-on get ${GITHUB_REPO} with project ${PROJNAME} in $(pwd)" >&3 |
| 84 | + run ddev add-on get "${GITHUB_REPO}" |
| 85 | + assert_success |
| 86 | + run ddev restart -y |
| 87 | + assert_success |
64 | 88 | health_checks
|
65 | 89 | }
|
0 commit comments