Skip to content

Commit 7680af2

Browse files
committed
Add Mass vhost reverse proxy test
1 parent 66d0439 commit 7680af2

8 files changed

+216
-13
lines changed

tests/100-main-vhost__static-page.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
7777
-v ${MOUNT_HOST}:${MOUNT_CONT} \
7878
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
7979
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
80-
-e DEBUG_ENTRYPOINT=4 \
80+
-e DEBUG_ENTRYPOINT=3 \
8181
-e DEBUG_RUNTIME=2 \
8282
${IMAGE}:${TAG} >/dev/null"
8383

tests/101-main-vhost__static-page__ssl-both.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
8585
-v ${MOUNT_HOST}:${MOUNT_CONT} \
8686
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
8787
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
88-
-e DEBUG_ENTRYPOINT=4 \
88+
-e DEBUG_ENTRYPOINT=3 \
8989
-e DEBUG_RUNTIME=2 \
9090
-e MAIN_VHOST_SSL_TYPE=both \
9191
${IMAGE}:${TAG} >/dev/null"

tests/110-main-vhost__php-fpm.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
8585
-v ${MOUNT_HOST}:${MOUNT_CONT} \
8686
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
8787
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
88-
-e DEBUG_ENTRYPOINT=4 \
88+
-e DEBUG_ENTRYPOINT=3 \
8989
-e DEBUG_RUNTIME=2 \
9090
-e MAIN_VHOST_BACKEND=conf:phpfpm:tcp:${NAME_PHPFPM}:9000 \
9191
--link ${NAME_PHPFPM} \

tests/111-main-vhost__php-fpm__ssl-both.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
9393
-v ${MOUNT_HOST}:${MOUNT_CONT} \
9494
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
9595
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
96-
-e DEBUG_ENTRYPOINT=4 \
96+
-e DEBUG_ENTRYPOINT=3 \
9797
-e DEBUG_RUNTIME=2 \
9898
-e MAIN_VHOST_SSL_TYPE=both \
9999
-e MAIN_VHOST_BACKEND=conf:phpfpm:tcp:${NAME_PHPFPM}:9000 \

tests/120-main-vhost__reverse-proxy.sh

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@ IMAGE="${1}"
1010
TAG="${2}"
1111
ARCH="${3}"
1212

13-
if [ "${ARCH}" = "linux/386" ]; then
14-
echo "Skipping, no Node image available for i386"
15-
exit 0
16-
fi
17-
1813

1914
###
2015
### Load Library
@@ -89,7 +84,7 @@ EOF
8984
###
9085
### Start NodeJS Container
9186
###
92-
run "docker run -d --platform ${ARCH} --name ${NAME_RPROXY} \
87+
run "docker run -d --name ${NAME_RPROXY} \
9388
-v ${MOUNT_HOST}:${MOUNT_CONT} \
9489
node:19-alpine node /var/www/default/app.js >/dev/null"
9590

@@ -101,7 +96,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
10196
-v ${MOUNT_HOST}:${MOUNT_CONT} \
10297
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
10398
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
104-
-e DEBUG_ENTRYPOINT=4 \
99+
-e DEBUG_ENTRYPOINT=3 \
105100
-e DEBUG_RUNTIME=2 \
106101
-e MAIN_VHOST_BACKEND=conf:rproxy:http:${NAME_RPROXY}:3000 \
107102
--link ${NAME_RPROXY} \

tests/200-mass-vhost__static-page.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
103103
-v ${MOUNT_HOST}:${MOUNT_CONT} \
104104
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
105105
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
106-
-e DEBUG_ENTRYPOINT=4 \
106+
-e DEBUG_ENTRYPOINT=3 \
107107
-e DEBUG_RUNTIME=2 \
108108
-e MAIN_VHOST_ENABLE=0 \
109109
-e MASS_VHOST_ENABLE=1 \

tests/210-mass-vhost__php-fpm.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
111111
-v ${MOUNT_HOST}:${MOUNT_CONT} \
112112
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
113113
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
114-
-e DEBUG_ENTRYPOINT=4 \
114+
-e DEBUG_ENTRYPOINT=3 \
115115
-e DEBUG_RUNTIME=2 \
116116
-e MAIN_VHOST_ENABLE=0 \
117117
-e MASS_VHOST_ENABLE=1 \
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
set -u
5+
set -o pipefail
6+
7+
CWD="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
8+
9+
IMAGE="${1}"
10+
TAG="${2}"
11+
ARCH="${3}"
12+
13+
14+
###
15+
### Load Library
16+
###
17+
# shellcheck disable=SC1090,SC1091
18+
. "${CWD}/.lib.sh"
19+
20+
21+
###
22+
### Universal ports
23+
###
24+
# shellcheck disable=SC2034
25+
HOST_PORT_HTTP="8093"
26+
# shellcheck disable=SC2034
27+
HOST_PORT_HTTPS="8493"
28+
29+
###
30+
### Universal container names
31+
###
32+
# shellcheck disable=SC2034
33+
NAME_HTTPD="$( get_random_name )"
34+
# shellcheck disable=SC2034
35+
#NAME_PHPFPM="$( get_random_name )"
36+
# shellcheck disable=SC2034
37+
NAME_RPROXY1="$( get_random_name )"
38+
NAME_RPROXY2="$( get_random_name )"
39+
40+
41+
42+
#---------------------------------------------------------------------------------------------------
43+
# DEFINES
44+
#---------------------------------------------------------------------------------------------------
45+
46+
###
47+
### GLOBALS
48+
###
49+
DOCROOT="htdocs"
50+
TLD=".loc"
51+
MOUNT_CONT="/shared/httpd"
52+
MOUNT_HOST="$( tmp_dir )"
53+
54+
55+
56+
#---------------------------------------------------------------------------------------------------
57+
# APPS
58+
#---------------------------------------------------------------------------------------------------
59+
60+
###
61+
### Application 1
62+
###
63+
APP1_NAME="my-project-1"
64+
APP1_TXT="hello from ${APP1_NAME} via httpd with NodeJS"
65+
APP1_URL="http://localhost:${HOST_PORT_HTTP}"
66+
APP1_HDR="Host: ${APP1_NAME}${TLD}"
67+
68+
mkdir -p "${MOUNT_HOST}/${APP1_NAME}/cfg"
69+
echo "conf:rproxy:http:${NAME_RPROXY1}:3000" > "${MOUNT_HOST}/${APP1_NAME}/cfg/backend.txt"
70+
mkdir -p "${MOUNT_HOST}/${APP1_NAME}/${DOCROOT}"
71+
cat << EOF > "${MOUNT_HOST}/${APP1_NAME}/${DOCROOT}/app.js"
72+
const http = require('http');
73+
const server = http.createServer((req, res) => {
74+
res.statusCode = 200;
75+
res.setHeader('Content-Type', 'text/plain');
76+
res.write('[OK]\n');
77+
res.write('${APP1_TXT}\n');
78+
res.end();
79+
});
80+
server.listen(3000, '0.0.0.0');
81+
EOF
82+
83+
###
84+
### Application 2
85+
###
86+
APP2_NAME="another-nodejs-app"
87+
APP2_TXT="hello hello from ${APP2_NAME} via httpd with NodeJS"
88+
APP2_URL="http://localhost:${HOST_PORT_HTTP}"
89+
APP2_HDR="Host: ${APP2_NAME}${TLD}"
90+
91+
92+
93+
#---------------------------------------------------------------------------------------------------
94+
# START
95+
#---------------------------------------------------------------------------------------------------
96+
97+
###
98+
### Start Node-1 Container
99+
###
100+
run "docker run -d --name ${NAME_RPROXY1} \
101+
-v ${MOUNT_HOST}:${MOUNT_CONT} \
102+
node:19-alpine node ${MOUNT_CONT}/${APP1_NAME}/${DOCROOT}/app.js >/dev/null"
103+
104+
105+
###
106+
### Start Node-2 Container
107+
###
108+
run "docker run -d --name ${NAME_RPROXY2} \
109+
-v ${MOUNT_HOST}:${MOUNT_CONT} \
110+
node:19-alpine sh -c 'sleep 15; node ${MOUNT_CONT}/${APP2_NAME}/${DOCROOT}/app.js' >/dev/null"
111+
112+
113+
###
114+
### Start HTTPD Container
115+
###
116+
run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
117+
-v ${MOUNT_HOST}:${MOUNT_CONT} \
118+
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
119+
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
120+
-e DEBUG_ENTRYPOINT=3 \
121+
-e DEBUG_RUNTIME=1 \
122+
-e MAIN_VHOST_ENABLE=0 \
123+
-e MASS_VHOST_ENABLE=1 \
124+
-e MASS_VHOST_BACKEND=file:backend.txt \
125+
-e DOCKER_LOGS=0 \
126+
--link ${NAME_RPROXY1} \
127+
--link ${NAME_RPROXY2} \
128+
${IMAGE}:${TAG} >/dev/null"
129+
130+
131+
132+
#---------------------------------------------------------------------------------------------------
133+
# TESTS
134+
#---------------------------------------------------------------------------------------------------
135+
136+
###
137+
### Test: APP1
138+
###
139+
if ! test_vhost_response "${APP1_TXT}" "${APP1_URL}" "${APP1_HDR}"; then
140+
docker_logs "${NAME_RPROXY1}"
141+
docker_logs "${NAME_HTTPD}"
142+
143+
docker_stop "${NAME_RPROXY2}"
144+
docker_stop "${NAME_RPROXY1}"
145+
docker_stop "${NAME_HTTPD}"
146+
log "fail" "'${APP1_TXT}' not found in ${APP1_URL}"
147+
exit 1
148+
fi
149+
150+
151+
###
152+
### Test: APP2
153+
###
154+
mkdir -p "${MOUNT_HOST}/${APP2_NAME}/cfg"
155+
echo "conf:rproxy:http:${NAME_RPROXY2}:4000" > "${MOUNT_HOST}/${APP2_NAME}/cfg/backend.txt"
156+
mkdir -p "${MOUNT_HOST}/${APP2_NAME}/${DOCROOT}"
157+
cat << EOF > "${MOUNT_HOST}/${APP2_NAME}/${DOCROOT}/app.js"
158+
const http = require('http');
159+
const server = http.createServer((req, res) => {
160+
res.statusCode = 200;
161+
res.setHeader('Content-Type', 'text/plain');
162+
res.write('[OK]\n');
163+
res.write('${APP2_TXT}\n');
164+
res.end();
165+
});
166+
server.listen(4000, '0.0.0.0');
167+
EOF
168+
169+
if ! test_vhost_response "${APP2_TXT}" "${APP2_URL}" "${APP2_HDR}"; then
170+
docker_logs "${NAME_RPROXY2}"
171+
docker_logs "${NAME_HTTPD}"
172+
173+
docker_stop "${NAME_RPROXY2}"
174+
docker_stop "${NAME_RPROXY1}"
175+
docker_stop "${NAME_HTTPD}"
176+
log "fail" "'${APP2_TXT}' not found in ${APP2_URL}"
177+
exit 1
178+
fi
179+
180+
181+
182+
#---------------------------------------------------------------------------------------------------
183+
# GENERIC
184+
#---------------------------------------------------------------------------------------------------
185+
186+
###
187+
### Test: Errors
188+
###
189+
if ! test_docker_logs_err "${NAME_HTTPD}"; then
190+
docker_logs "${NAME_RPROXY2}"
191+
docker_logs "${NAME_RPROXY1}"
192+
docker_logs "${NAME_HTTPD}"
193+
194+
docker_stop "${NAME_RPROXY2}"
195+
docker_stop "${NAME_RPROXY1}"
196+
docker_stop "${NAME_HTTPD}"
197+
log "fail" "Found errors in docker logs"
198+
exit 1
199+
fi
200+
201+
202+
###
203+
### Cleanup
204+
###
205+
docker_stop "${NAME_RPROXY2}"
206+
docker_stop "${NAME_RPROXY1}"
207+
docker_stop "${NAME_HTTPD}"
208+
log "ok" "Test succeeded"

0 commit comments

Comments
 (0)