11#! /usr/bin/env bash
2- # test-lab-08-03.sh — Lab 08-03: Advanced Features
3- # Module 08: Jitsi video conferencing
4- # jitsi with TLS, resource limits, and production-grade configuration
2+ # test-lab-08-03.sh — Lab 08-03: Jitsi Advanced Features
3+ # Tests: JWT auth config, coturn, resource limits, HTTPS
54set -euo pipefail
6-
7- LAB_ID=" 08-03"
8- LAB_NAME=" Advanced Features"
9- MODULE=" jitsi"
105COMPOSE_FILE=" docker/docker-compose.advanced.yml"
11- PASS=0
12- FAIL=0
13-
14- # ── Colors ────────────────────────────────────────────────────────────────────
15- RED=' \033[0;31m' ; GREEN=' \033[0;32m' ; YELLOW=' \033[1;33m'
16- CYAN=' \033[0;36m' ; NC=' \033[0m'
17-
18- pass () { echo -e " ${GREEN} [PASS]${NC} $1 " ; (( PASS++ )) ; }
19- fail () { echo -e " ${RED} [FAIL]${NC} $1 " ; (( FAIL++ )) ; }
20- info () { echo -e " ${CYAN} [INFO]${NC} $1 " ; }
21- warn () { echo -e " ${YELLOW} [WARN]${NC} $1 " ; }
22-
23- echo -e " ${CYAN} ======================================${NC} "
24- echo -e " ${CYAN} Lab ${LAB_ID} : ${LAB_NAME}${NC} "
25- echo -e " ${CYAN} Module: ${MODULE}${NC} "
26- echo -e " ${CYAN} ======================================${NC} "
27- echo " "
6+ PASS=0; FAIL=0
7+ pass () { echo " [PASS] $1 " ; PASS=$(( PASS+ 1 )) ; }
8+ fail () { echo " [FAIL] $1 " ; FAIL=$(( FAIL+ 1 )) ; }
9+ section () { echo ; echo " === $1 ===" ; }
2810
29- # ── PHASE 1: Setup ────────────────────────────────────────────────────────────
30- info " Phase 1: Setup"
31- docker compose -f " ${COMPOSE_FILE} " up -d
32- info " Waiting 30s for ${MODULE} to initialize..."
33- sleep 30
11+ section " Container health"
12+ for c in jitsi-adv-coturn jitsi-adv-prosody jitsi-adv-jicofo jitsi-adv-jvb jitsi-adv-web; do
13+ if docker inspect --format ' {{.State.Running}}' " $c " 2> /dev/null | grep -q true ; then
14+ pass " Container $c is running"
15+ else
16+ fail " Container $c is not running"
17+ fi
18+ done
3419
35- # ── PHASE 2: Health Checks ────────────────────────────────────────────────────
36- info " Phase 2: Health Checks"
20+ section " TURN server port"
21+ if timeout 5 bash -c ' echo > /dev/tcp/localhost/3478' 2> /dev/null; then
22+ pass " TURN server :3478 reachable"
23+ else
24+ fail " TURN server :3478 not reachable"
25+ fi
3726
38- if docker compose -f " ${COMPOSE_FILE} " ps | grep -q " running\|Up" ; then
39- pass " Container is running"
27+ section " Jitsi HTTPS endpoint"
28+ HTTP_CODE=$( curl -sk -o /dev/null -w ' %{http_code}' https://localhost:8443/ 2> /dev/null) || HTTP_CODE=" 000"
29+ if echo " $HTTP_CODE " | grep -qE " ^(200|301|302)" ; then
30+ pass " Jitsi HTTPS :8443 returned $HTTP_CODE "
4031else
41- fail " Container is not running "
32+ fail " Jitsi HTTPS :8443 returned $HTTP_CODE "
4233fi
4334
44- # ── PHASE 3: Functional Tests ─────────────────────────────────────────────────
45- info " Phase 3: Functional Tests (Lab 03 — Advanced Features)"
35+ section " External API JS"
36+ EXTAPI=$( curl -skf https://localhost:8443/external_api.js 2> /dev/null | head -1) || EXTAPI=" "
37+ if [ -n " $EXTAPI " ]; then
38+ pass " external_api.js served"
39+ else
40+ fail " external_api.js not available"
41+ fi
4642
47- # TODO: Add module-specific functional tests here
48- # Example:
49- # if curl -sf http://localhost:443/health > /dev/null 2>&1; then
50- # pass "Health endpoint responds"
51- # else
52- # fail "Health endpoint not reachable"
53- # fi
43+ section " JWT auth in web container env"
44+ WEB_ENV=$( docker inspect jitsi-adv-web --format ' {{json .Config.Env}}' 2> /dev/null) || WEB_ENV=" []"
45+ if echo " $WEB_ENV " | grep -q ' "ENABLE_AUTH=1"' ; then
46+ pass " ENABLE_AUTH=1 set in jitsi-adv-web"
47+ else
48+ fail " ENABLE_AUTH=1 not found in jitsi-adv-web env"
49+ fi
50+ if echo " $WEB_ENV " | grep -q ' "AUTH_TYPE=jwt"' ; then
51+ pass " AUTH_TYPE=jwt set in jitsi-adv-web"
52+ else
53+ fail " AUTH_TYPE=jwt not found in jitsi-adv-web env"
54+ fi
55+ if echo " $WEB_ENV " | grep -q ' "APP_ID=jitsi"' ; then
56+ pass " APP_ID=jitsi set in jitsi-adv-web"
57+ else
58+ fail " APP_ID=jitsi not found in jitsi-adv-web env"
59+ fi
60+ if echo " $WEB_ENV " | grep -q ' "APP_SECRET=JitsiJWT03!"' ; then
61+ pass " APP_SECRET=JitsiJWT03! set in jitsi-adv-web"
62+ else
63+ fail " APP_SECRET not found in jitsi-adv-web env"
64+ fi
5465
55- warn " Functional tests for Lab 08-03 pending implementation"
66+ section " JWT auth in prosody container env"
67+ PROSODY_ENV=$( docker inspect jitsi-adv-prosody --format ' {{json .Config.Env}}' 2> /dev/null) || PROSODY_ENV=" []"
68+ if echo " $PROSODY_ENV " | grep -q ' "AUTH_TYPE=jwt"' ; then
69+ pass " AUTH_TYPE=jwt set in jitsi-adv-prosody"
70+ else
71+ fail " AUTH_TYPE=jwt not found in jitsi-adv-prosody env"
72+ fi
73+ if echo " $PROSODY_ENV " | grep -q ' "ENABLE_GUESTS=1"' ; then
74+ pass " ENABLE_GUESTS=1 set in jitsi-adv-prosody"
75+ else
76+ fail " ENABLE_GUESTS=1 not found in jitsi-adv-prosody env"
77+ fi
5678
57- # ── PHASE 4: Cleanup ──────────────────────────────────────────────────────────
58- info " Phase 4: Cleanup"
59- docker compose -f " ${COMPOSE_FILE} " down -v --remove-orphans
60- info " Cleanup complete"
79+ section " Resource limits check"
80+ WEB_MEM=$( docker inspect jitsi-adv-web --format ' {{.HostConfig.Memory}}' 2> /dev/null) || WEB_MEM=" 0"
81+ if [ " $WEB_MEM " = " 536870912" ]; then
82+ pass " jitsi-adv-web memory limit = 512M (536870912 bytes)"
83+ else
84+ fail " jitsi-adv-web memory limit: expected 536870912, got $WEB_MEM "
85+ fi
86+ JVB_MEM=$( docker inspect jitsi-adv-jvb --format ' {{.HostConfig.Memory}}' 2> /dev/null) || JVB_MEM=" 0"
87+ if [ " $JVB_MEM " = " 536870912" ]; then
88+ pass " jitsi-adv-jvb memory limit = 512M (536870912 bytes)"
89+ else
90+ fail " jitsi-adv-jvb memory limit: expected 536870912, got $JVB_MEM "
91+ fi
6192
62- # ── Results ───────────────────────────────────────────────────────────────────
63- echo " "
64- echo -e " ${CYAN} ======================================${NC} "
65- echo -e " Lab ${LAB_ID} Complete"
66- echo -e " ${GREEN} PASS: ${PASS}${NC} | ${RED} FAIL: ${FAIL}${NC} "
67- echo -e " ${CYAN} ======================================${NC} "
93+ section " JVB log check"
94+ JVB_LOGS=$( docker logs jitsi-adv-jvb 2>&1 | tail -20) || JVB_LOGS=" "
95+ if echo " $JVB_LOGS " | grep -qi " error\|JVB registration failed" ; then
96+ fail " JVB logs show error: $( echo " $JVB_LOGS " | grep -i error | head -2) "
97+ else
98+ pass " JVB logs show no critical errors"
99+ fi
68100
69- if [ " ${FAIL} " -gt 0 ]; then
70- exit 1
101+ section " TURN credentials in web config"
102+ if echo " $WEB_ENV " | grep -q " TURN_CREDENTIALS" ; then
103+ pass " TURN_CREDENTIALS configured in web container"
104+ else
105+ fail " TURN_CREDENTIALS not found in web container env"
71106fi
107+
108+ echo
109+ echo " ====================================="
110+ echo " Jitsi Lab 08-03 Results"
111+ echo " PASS: $PASS FAIL: $FAIL "
112+ echo " ====================================="
113+ [ " $FAIL " -eq 0 ] && exit 0 || exit 1
0 commit comments