Skip to content

Commit 1baebe5

Browse files
committed
Update tests
1 parent 55489b7 commit 1baebe5

File tree

1 file changed

+207
-0
lines changed

1 file changed

+207
-0
lines changed

Diff for: tests/130-main-vhost__websocket.sh

+207
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
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+
if [ "${IMAGE}" = "devilbox/apache-2.2" ]; then
14+
echo "Skipping websocket check for Apache 2.2 - not supported."
15+
exit 0
16+
fi
17+
18+
19+
###
20+
### Load Library
21+
###
22+
# shellcheck disable=SC1090,SC1091
23+
. "${CWD}/.lib.sh"
24+
25+
26+
###
27+
### Universal ports
28+
###
29+
# shellcheck disable=SC2034
30+
HOST_PORT_HTTP="8093"
31+
# shellcheck disable=SC2034
32+
HOST_PORT_HTTPS="8493"
33+
34+
###
35+
### Universal container names
36+
###
37+
# shellcheck disable=SC2034
38+
NAME_HTTPD="$( get_random_name )"
39+
# shellcheck disable=SC2034
40+
NAME_PHPFPM="$( get_random_name )"
41+
# shellcheck disable=SC2034
42+
NAME_RPROXY="$( get_random_name )"
43+
# shellcheck disable=SC2034
44+
NAME_WORKER="$( get_random_name )"
45+
46+
47+
48+
#---------------------------------------------------------------------------------------------------
49+
# DEFINES
50+
#---------------------------------------------------------------------------------------------------
51+
52+
###
53+
### GLOBALS
54+
###
55+
#DOCROOT="htdocs"
56+
MOUNT_CONT="/var/www/default"
57+
MOUNT_HOST="$( tmp_dir )"
58+
59+
60+
61+
#---------------------------------------------------------------------------------------------------
62+
# APPS
63+
#---------------------------------------------------------------------------------------------------
64+
65+
###
66+
### Application 1
67+
###
68+
APP1_URL="http://localhost:${HOST_PORT_HTTP}"
69+
#APP1_EXT="nodejs"
70+
#APP1_HDR=""
71+
APP1_TXT="hello you are now connected to a websocket"
72+
#create_app "${MOUNT_HOST}" "${DOCROOT}" "" "index.${APP1_EXT}" "<?php echo '${APP1_TXT}';"
73+
cat << EOF > "${MOUNT_HOST}/index.js"
74+
const WebSocket = require("ws");
75+
const wss = new WebSocket.Server({ port: 3000 });
76+
wss.on("connection", (ws) => {
77+
ws.send("${APP1_TXT}");
78+
ws.on("message", (message) => {
79+
console.log("New message from client: %s", message);
80+
});
81+
});
82+
console.log("WebSocket server ready at localhost:3000");
83+
EOF
84+
# Create package.json
85+
cat << EOF > "${MOUNT_HOST}/package.json"
86+
{
87+
"name": "node-websocket-example",
88+
"version": "1.0.0",
89+
"main": "index.js",
90+
"devDependencies": {},
91+
"scripts": {
92+
"test": "echo \"Error: no test specified\" && exit 1"
93+
},
94+
"keywords": [],
95+
"author": "",
96+
"license": "ISC",
97+
"description": "",
98+
"dependencies": {
99+
"ws": "^7.5.1"
100+
}
101+
}
102+
EOF
103+
# Create start script
104+
cat << EOF > "${MOUNT_HOST}/start.sh"
105+
#!/bin/sh
106+
npm install
107+
node index.js
108+
EOF
109+
# Create script for worker
110+
cat << EOF > "${MOUNT_HOST}/worker.sh"
111+
#!/bin/sh
112+
npm install -g wscat
113+
sleep 90000
114+
EOF
115+
116+
117+
118+
119+
#---------------------------------------------------------------------------------------------------
120+
# START
121+
#---------------------------------------------------------------------------------------------------
122+
123+
###
124+
### Start NodeJS Container
125+
###
126+
run "docker run -d --name ${NAME_RPROXY} \
127+
-v ${MOUNT_HOST}:${MOUNT_CONT} -w ${MOUNT_CONT} \
128+
node:19-alpine sh start.sh >/dev/null"
129+
130+
131+
###
132+
### Start HTTPD Container
133+
###
134+
run "docker run -d --platform ${ARCH} --name ${NAME_HTTPD} \
135+
-v ${MOUNT_HOST}:${MOUNT_CONT} \
136+
-p 127.0.0.1:${HOST_PORT_HTTP}:80 \
137+
-p 127.0.0.1:${HOST_PORT_HTTPS}:443 \
138+
-e DEBUG_ENTRYPOINT=3 \
139+
-e DEBUG_RUNTIME=2 \
140+
-e MAIN_VHOST_BACKEND=conf:rproxy:ws:${NAME_RPROXY}:3000 \
141+
--link ${NAME_RPROXY} \
142+
${IMAGE}:${TAG} >/dev/null"
143+
144+
###
145+
### Start Worker Container
146+
###
147+
run "docker run -d --name ${NAME_WORKER} \
148+
-v ${MOUNT_HOST}:${MOUNT_CONT} -w ${MOUNT_CONT} \
149+
--link ${NAME_HTTPD} \
150+
node:19-alpine sh worker.sh >/dev/null"
151+
152+
153+
#---------------------------------------------------------------------------------------------------
154+
# TESTS
155+
#---------------------------------------------------------------------------------------------------
156+
157+
###
158+
### Test: APP1
159+
###
160+
count=0
161+
retry=30
162+
while ! run "docker exec -t ${NAME_WORKER} wscat --no-color --connect ${NAME_HTTPD} -x quit | grep '${APP1_TXT}'"; do
163+
if [ "${count}" = "${retry}" ]; then
164+
docker_logs "${NAME_WORKER}"
165+
docker_logs "${NAME_RPROXY}"
166+
docker_logs "${NAME_HTTPD}"
167+
168+
docker_stop "${NAME_WORKER}"
169+
docker_stop "${NAME_RPROXY}"
170+
docker_stop "${NAME_HTTPD}"
171+
log "fail" "'${APP1_TXT}' not found in ${APP1_URL}"
172+
exit 1
173+
fi
174+
count=$(( count + 1 ))
175+
sleep 1
176+
done
177+
log "ok" "Resp: '${APP1_TXT}'"
178+
179+
180+
181+
#---------------------------------------------------------------------------------------------------
182+
# GENERIC
183+
#---------------------------------------------------------------------------------------------------
184+
185+
###
186+
### Test: Errors
187+
###
188+
if ! test_docker_logs_err "${NAME_HTTPD}"; then
189+
docker_logs "${NAME_WORKER}"
190+
docker_logs "${NAME_RPROXY}"
191+
docker_logs "${NAME_HTTPD}"
192+
193+
docker_stop "${NAME_WORKER}"
194+
docker_stop "${NAME_RPROXY}"
195+
docker_stop "${NAME_HTTPD}"
196+
log "fail" "Found errors in docker logs"
197+
exit 1
198+
fi
199+
200+
201+
###
202+
### Cleanup
203+
###
204+
docker_stop "${NAME_WORKER}"
205+
docker_stop "${NAME_RPROXY}"
206+
docker_stop "${NAME_HTTPD}"
207+
log "ok" "Test succeeded"

0 commit comments

Comments
 (0)