Skip to content

Commit 4323123

Browse files
authored
tests: update bats (#21)
1 parent 62d979f commit 4323123

File tree

1 file changed

+67
-43
lines changed

1 file changed

+67
-43
lines changed

tests/test.bats

Lines changed: 67 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,89 @@
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+
115
setup() {
216
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-
}
1717

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
2339
}
2440

2541
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())'
2947
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+
4550
DDEV_DEBUG=true run ddev mongo-express
4651
assert_success
4752
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}
4868
}
4969

5070
@test "install from directory" {
5171
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
5577
health_checks
5678
}
5779

5880
# bats test_tags=release
5981
@test "install from release" {
6082
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
6488
health_checks
6589
}

0 commit comments

Comments
 (0)