Skip to content

Commit 57e1c3c

Browse files
authored
Merge pull request #32 from cytopia/release-0.24
Release 0.24
2 parents df507a2 + 97e3f8b commit 57e1c3c

11 files changed

Lines changed: 452 additions & 221 deletions

.github/workflows/params.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ env:
1515
{
1616
"NAME": "Bind",
1717
"VERSION": ["latest"],
18-
"ARCH": ["linux/amd64", "linux/386", "linux/arm64", "linux/arm/v7", "linux/arm/v6", "linux/ppc64le", "linux/s390x"]
18+
"ARCH": ["linux/amd64", "linux/386", "linux/arm64", "linux/arm/v7", "linux/arm/v6", "linux/ppc64le", "linux/s390x", "linux/mips64le"]
1919
}
2020
]
2121

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
[![](https://images.microbadger.com/badges/image/cytopia/bind.svg)](https://microbadger.com/images/cytopia/bind "bind")
1313
[![License](https://img.shields.io/badge/license-MIT-%233DA639.svg)](https://opensource.org/licenses/MIT)
1414

15-
**Available Architectures:** `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x`
15+
**Available Architectures:** `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`, `ppc64le`, `s390x`, `mips64le`
1616

1717
----
1818

tests/.lib.sh

Lines changed: 63 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,106 +5,137 @@ set -u
55

66
run() {
77
cmd="${1}"
8-
to_stderr=0
8+
to_stdout=0
9+
cmd_to_stderr=0
910

10-
# Output to stderr instead?
11-
if [ "${#}" -eq "2" ]; then
12-
to_stderr="${2}"
11+
# Output to stdout instead?
12+
if [ "${#}" -gt "1" ]; then
13+
to_stdout="${2}"
14+
fi
15+
16+
# Command output to stderr as well
17+
if [ "${#}" -gt "2" ]; then
18+
cmd_to_stderr="${3}"
1319
fi
1420

1521
red="\033[0;31m"
1622
green="\033[0;32m"
1723
yellow="\033[0;33m"
1824
reset="\033[0m"
1925

20-
if [ "${to_stderr}" -eq "0" ]; then
21-
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
22-
else
26+
if [ "${to_stdout}" -eq "0" ]; then
2327
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)" >&2
28+
else
29+
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
2430
fi
2531

26-
if sh -c "LANG=C LC_ALL=C ${cmd}"; then
27-
if [ "${to_stderr}" -eq "0" ]; then
28-
printf "${green}[%s]${reset}\n" "OK"
29-
else
32+
if OUT="$( bash -c "set -eu && set -o pipefail && LANG=C LC_ALL=C ${cmd}" )"; then
33+
# Output command
34+
if [ -n "${OUT}" ]; then
35+
echo "${OUT}"
36+
if [ "${cmd_to_stderr}" = "1" ]; then
37+
>&2 echo "${OUT}"
38+
fi
39+
fi
40+
# Output exit code
41+
if [ "${to_stdout}" -eq "0" ]; then
3042
printf "${green}[%s]${reset}\n" "OK" >&2
43+
else
44+
printf "${green}[%s]${reset}\n" "OK"
3145
fi
3246
return 0
3347
else
34-
if [ "${to_stderr}" -eq "0" ]; then
35-
printf "${red}[%s]${reset}\n" "NO"
36-
else
48+
# Output command
49+
if [ -n "${OUT}" ]; then
50+
echo "${OUT}"
51+
if [ "${cmd_to_stderr}" = "1" ]; then
52+
>&2 echo "${OUT}"
53+
fi
54+
fi
55+
# Output exit code
56+
if [ "${to_stdout}" -eq "0" ]; then
3757
printf "${red}[%s]${reset}\n" "NO" >&2
58+
else
59+
printf "${red}[%s]${reset}\n" "NO"
3860
fi
3961
return 1
4062
fi
4163
}
4264

4365
run_fail() {
4466
cmd="${1}"
45-
to_stderr=0
67+
to_stdout=0
4668

47-
# Output to stderr instead?
69+
# Output to stdout instead?
4870
if [ "${#}" -eq "2" ]; then
49-
to_stderr="${2}"
71+
to_stdout="${2}"
5072
fi
5173

5274
red="\033[0;31m"
5375
green="\033[0;32m"
5476
yellow="\033[0;33m"
5577
reset="\033[0m"
5678

57-
if [ "${to_stderr}" -eq "0" ]; then
58-
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
59-
else
79+
if [ "${to_stdout}" -eq "0" ]; then
6080
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)" >&2
81+
else
82+
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
6183
fi
6284

6385
if ! sh -c "LANG=C LC_ALL=C ${cmd}"; then
64-
if [ "${to_stderr}" -eq "0" ]; then
65-
printf "${green}[%s]${reset}\n" "OK"
66-
else
86+
if [ "${to_stdout}" -eq "0" ]; then
6787
printf "${green}[%s]${reset}\n" "OK" >&2
88+
else
89+
printf "${green}[%s]${reset}\n" "OK"
6890
fi
6991
return 0
7092
else
71-
if [ "${to_stderr}" -eq "0" ]; then
72-
printf "${red}[%s]${reset}\n" "NO"
73-
else
93+
if [ "${to_stdout}" -eq "0" ]; then
7494
printf "${red}[%s]${reset}\n" "NO" >&2
95+
else
96+
printf "${red}[%s]${reset}\n" "NO"
7597
fi
7698
return 1
7799
fi
78100
}
79101

80102
sanity_check() {
81103
_name="${1}"
104+
_file="${2:-}"
82105

83106
if ! run "docker ps | grep '${_name}'"; then
84107
docker ps
85108
docker logs "${_name}" || true
86109
docker stop "${_name}" || true
87-
exit 1
110+
return 1
88111
fi
89112

90113
# Test if docker logs works
91-
if ! run "docker logs ${_name} >/dev/null 2>&1"; then
92-
docker logs "${_name}" || true
114+
if ! run "docker logs ${_name}"; then
93115
docker stop "${_name}" || true
94-
exit 1
116+
return 1
95117
fi
96118

97119
# Ensure no error string was found
98120
if ! run_fail "docker logs ${_name} 2>&1 | grep -E '\[ERR\]'"; then
99121
docker logs "${_name}" || true
100122
docker stop "${_name}" || true
101-
exit 1
123+
return 1
102124
fi
103125

104126
# Ensure no warning string was found
105127
if ! run_fail "docker logs ${_name} 2>&1 | grep -E '\[WARN\]'"; then
106128
docker logs "${_name}" || true
107129
docker stop "${_name}" || true
108-
exit 1
130+
return 1
109131
fi
110132
}
133+
134+
135+
docker_stop() {
136+
_name="${1}"
137+
138+
run "docker stop ${_name}" || true
139+
run "docker kill ${_name} >/dev/null 2>&1 || true" >/dev/null 2>&1
140+
run "sleep 2"
141+
}

tests/01-run.sh

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,63 +16,64 @@ ARCH="${5}"
1616
DEBUG="${6}"
1717

1818
NAME="bind$( shuf -i 1000000000-2000000000 -n 1 )"
19+
WAIT=10
1920

2021

2122
# DEBUG_ENTRYPOINT=2
22-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=2 ${IMAGE}:${TAG} &"
23-
run "sleep 5"
23+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=2 ${IMAGE}:${TAG}"
24+
run "sleep ${WAIT}"
2425
sanity_check "${NAME}"
2526
if ! run "docker exec ${NAME} named -V"; then
26-
docker stop "${NAME}"
27+
run "docker stop ${NAME}"
2728
exit 1
2829
fi
2930
if ! run "docker exec ${NAME} named -V | grep -oiE '^BIND[[:space:]]+[0-9.]+'"; then
30-
docker stop "${NAME}"
31+
run "docker stop ${NAME}"
3132
exit 1
3233
fi
33-
run "docker stop ${NAME}"
34+
docker_stop "${NAME}"
3435

3536

3637
# DEBUG_ENTRYPOINT=1
37-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 ${IMAGE}:${TAG} &"
38-
run "sleep 5"
38+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 ${IMAGE}:${TAG}"
39+
run "sleep ${WAIT}"
3940
sanity_check "${NAME}"
4041
if ! run "docker exec ${NAME} named -V"; then
41-
docker stop "${NAME}"
42+
run "docker stop ${NAME}"
4243
exit 1
4344
fi
4445
if ! run "docker exec ${NAME} named -V | grep -oiE '^BIND[[:space:]]+[0-9.]+'"; then
45-
docker stop "${NAME}"
46+
run "docker stop ${NAME}"
4647
exit 1
4748
fi
48-
run "docker stop ${NAME}"
49+
docker_stop "${NAME}"
4950

5051

5152
# DEBUG_ENTRYPOINT=0
52-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 ${IMAGE}:${TAG} &"
53-
run "sleep 5"
53+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 ${IMAGE}:${TAG}"
54+
run "sleep ${WAIT}"
5455
sanity_check "${NAME}"
5556
if ! run "docker exec ${NAME} named -V"; then
56-
docker stop "${NAME}"
57+
run "docker stop ${NAME}"
5758
exit 1
5859
fi
5960
if ! run "docker exec ${NAME} named -V | grep -oiE '^BIND[[:space:]]+[0-9.]+'"; then
60-
docker stop "${NAME}"
61+
run "docker stop ${NAME}"
6162
exit 1
6263
fi
63-
run "docker stop ${NAME}"
64+
docker_stop "${NAME}"
6465

6566

6667
# DEBUG_ENTRYPOINT=null
67-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} ${IMAGE}:${TAG} &"
68-
run "sleep 5"
68+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} ${IMAGE}:${TAG}"
69+
run "sleep ${WAIT}"
6970
sanity_check "${NAME}"
7071
if ! run "docker exec ${NAME} named -V"; then
71-
docker stop "${NAME}"
72+
run "docker stop ${NAME}"
7273
exit 1
7374
fi
7475
if ! run "docker exec ${NAME} named -V | grep -oiE '^BIND[[:space:]]+[0-9.]+'"; then
75-
docker stop "${NAME}"
76+
run "docker stop ${NAME}"
7677
exit 1
7778
fi
78-
run "docker stop ${NAME}"
79+
docker_stop "${NAME}"

tests/02-wildcard-addr.sh

Lines changed: 66 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,47 +17,85 @@ DEBUG="${6}"
1717

1818
NAME="bind$( shuf -i 1000000000-2000000000 -n 1 )"
1919
PORT="5300"
20+
WAIT=5
21+
REPS=10
2022

2123

2224
# DEBUG_ENTRYPOINT=2
23-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=2 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG} &"
24-
run "sleep 5"
25+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=2 -e DOCKER_LOGS=1 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG}"
26+
run "sleep ${WAIT}"
2527
sanity_check "${NAME}"
26-
if ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; then
27-
docker stop "${NAME}"
28-
exit 1
29-
fi
30-
run "docker stop ${NAME}"
28+
i=0
29+
while ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; do
30+
i=$(( i + 1 ))
31+
if [ "${i}" -gt "${REPS}" ]; then
32+
echo "FAILED: t1.devilbox is not resolvable to 1.1.1.1"
33+
run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox"
34+
run "docker logs ${NAME}"
35+
run "docker stop ${NAME}"
36+
echo "ABORT..."
37+
exit 1
38+
fi
39+
sleep 1
40+
done
41+
docker_stop "${NAME}"
3142

3243

3344
# DEBUG_ENTRYPOINT=1
34-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG} &"
35-
run "sleep 5"
45+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=1 -e DOCKER_LOGS=1 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG}"
46+
run "sleep ${WAIT}"
3647
sanity_check "${NAME}"
37-
if ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; then
38-
docker stop "${NAME}"
39-
exit 1
40-
fi
41-
run "docker stop ${NAME}"
48+
i=0
49+
while ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; do
50+
i=$(( i + 1 ))
51+
if [ "${i}" -gt "${REPS}" ]; then
52+
echo "FAILED: t1.devilbox is not resolvable to 1.1.1.1"
53+
run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox"
54+
run "docker logs ${NAME}"
55+
run "docker stop ${NAME}"
56+
echo "ABORT..."
57+
exit 1
58+
fi
59+
sleep 1
60+
done
61+
docker_stop "${NAME}"
4262

4363

4464
# DEBUG_ENTRYPOINT=0
45-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=0 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG} &"
46-
run "sleep 5"
65+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DEBUG_ENTRYPOINT=0 -e DOCKER_LOGS=1 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG}"
66+
run "sleep ${WAIT}"
4767
sanity_check "${NAME}"
48-
if ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; then
49-
docker stop "${NAME}"
50-
exit 1
51-
fi
52-
run "docker stop ${NAME}"
68+
i=0
69+
while ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; do
70+
i=$(( i + 1 ))
71+
if [ "${i}" -gt "${REPS}" ]; then
72+
echo "FAILED: t1.devilbox is not resolvable to 1.1.1.1"
73+
run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox"
74+
run "docker logs ${NAME}"
75+
run "docker stop ${NAME}"
76+
echo "ABORT..."
77+
exit 1
78+
fi
79+
sleep 1
80+
done
81+
docker_stop "${NAME}"
5382

5483

5584
# DEBUG_ENTRYPOINT=null
56-
run "docker run --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG} &"
57-
run "sleep 5"
85+
run "docker run -d --rm --platform ${ARCH} --name ${NAME} -e DEBUG=${DEBUG} -e DOCKER_LOGS=1 -e 'WILDCARD_DNS=devilbox=1.1.1.1' -p ${PORT}:53/udp ${IMAGE}:${TAG}"
86+
run "sleep ${WAIT}"
5887
sanity_check "${NAME}"
59-
if ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; then
60-
docker stop "${NAME}"
61-
exit 1
62-
fi
63-
run "docker stop ${NAME}"
88+
i=0
89+
while ! run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox | grep -E '^1\.1\.1\.1$'"; do
90+
i=$(( i + 1 ))
91+
if [ "${i}" -gt "${REPS}" ]; then
92+
echo "FAILED: t1.devilbox is not resolvable to 1.1.1.1"
93+
run "dig @127.0.0.1 -p ${PORT} +short t1.devilbox"
94+
run "docker logs ${NAME}"
95+
run "docker stop ${NAME}"
96+
echo "ABORT..."
97+
exit 1
98+
fi
99+
sleep 1
100+
done
101+
docker_stop "${NAME}"

0 commit comments

Comments
 (0)