openvidu/ci-scripts/openvidu-e2e-tests.sh

242 lines
9.2 KiB
Bash
Raw Permalink Normal View History

2022-06-06 12:32:35 +02:00
#!/bin/bash -x
set -eu -o pipefail
############################################################################
# Any function offered by this file that is not path agnostic assumes that #
# the path is located where the first command of each function requires it #
############################################################################
2022-06-06 12:32:35 +02:00
OV_INTEGRATION_TESTS=false
OV_UNIT_TESTS=false
OV_E2E_KURENTO=false
OV_E2E_MEDIASOUP=false
LAUNCH_OV_KURENTO=false
LAUNCH_OV_MEDIASOUP=false
2022-06-06 12:32:35 +02:00
function environmentLaunch {
local MEDIA_SERVER="$1"
# Get e2e container id
local E2E_CONTAINER_ID
E2E_CONTAINER_ID="$(docker ps | grep "$TEST_IMAGE" | awk '{ print $1 }')"
2022-06-06 12:32:35 +02:00
# Get e2e container IP so services running can be accessed by browser and media server containers
local E2E_CONTAINER_IP
E2E_CONTAINER_IP="$(docker inspect "$E2E_CONTAINER_ID" | awk '/bridge/,/IPAddress/' | grep IPAddress | cut -d'"' -f4)"
# Kurento and mediasoup needs to run as network host, so we need Docker host IP.
local DOCKER_HOST_IP
DOCKER_HOST_IP="$(docker inspect bridge --format '{{with index .IPAM.Config 0}}{{or .Gateway .Subnet}}{{end}}' | sed -r 's|\.0/[[:digit:]]+$|.1|')"
2022-06-06 12:32:35 +02:00
if [[ "${MEDIA_SERVER}" == "kurento" ]]; then
docker run -e KMS_UID=$(id -u) --network=host --detach=true --volume=/opt/openvidu/recordings:/opt/openvidu/recordings "${KURENTO_MEDIA_SERVER_IMAGE}"
while true; do
RC="$(curl \
--silent \
--no-buffer \
--write-out '%{http_code}' \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Host: ${DOCKER_HOST_IP}" \
--header "Origin: ${DOCKER_HOST_IP}" \
"http://${DOCKER_HOST_IP}:8888/kurento" || echo '')"
2022-06-06 12:32:35 +02:00
if [[ "$RC" == "500" ]]; then
break
else
echo "Waiting for ${MEDIA_SERVER}..."
sleep 1
fi
done
elif [[ "${MEDIA_SERVER}" == "mediasoup" ]]; then
LOG_DATE=$(printf '%(%Y-%m-%d-%H-%M-%S)T')
docker run --network=host --restart=always \
2022-06-06 12:32:35 +02:00
--env=KMS_MIN_PORT=40000 \
--env=KMS_MAX_PORT=65535 \
--env=OPENVIDU_PRO_LICENSE="${OPENVIDU_PRO_LICENSE}" \
--env=OPENVIDU_PRO_LICENSE_API="${OPENVIDU_PRO_LICENSE_API}" \
--env=WEBRTC_LISTENIPS_0_ANNOUNCEDIP="${DOCKER_HOST_IP}" \
--env=WEBRTC_LISTENIPS_0_IP="${DOCKER_HOST_IP}" \
--volume=/opt/openvidu/recordings:/opt/openvidu/recordings \
openvidu/mediasoup-controller:"${MEDIASOUP_CONTROLLER_VERSION}" >& /opt/openvidu/mediasoup-controller-${LOG_DATE}.log &
until $(curl --insecure --output /dev/null --silent http://${DOCKER_HOST_IP}:8888/kurento); do
echo "Waiting for ${MEDIA_SERVER}..."
sleep 1
done
2022-06-06 12:32:35 +02:00
else
echo "Not valid media server"
exit 1
fi
if [ "${DOCKER_RECORDING_VERSION}" != "default" ]; then
echo "Using custom openvidu-recording tag: ${DOCKER_RECORDING_VERSION}"
java -jar -DKMS_URIS="[\"ws://${DOCKER_HOST_IP}:8888/kurento\"]" \
-DDOMAIN_OR_PUBLIC_IP="${E2E_CONTAINER_IP}" \
-DOPENVIDU_SECRET=MY_SECRET -DHTTPS_PORT=4443 -DOPENVIDU_RECORDING=true \
-DOPENVIDU_RECORDING_CUSTOM_LAYOUT=/opt/openvidu/test-layouts \
-DOPENVIDU_RECORDING_VERSION="${DOCKER_RECORDING_VERSION}" -DOPENVIDU_WEBHOOK=true \
-DOPENVIDU_WEBHOOK_ENDPOINT=http://127.0.0.1:7777/webhook \
/opt/openvidu/openvidu-server-*.jar &>/opt/openvidu/openvidu-server-"${MEDIA_SERVER}".log &
2022-06-06 12:32:35 +02:00
else
echo "Using default openvidu-recording tag"
java -jar -DKMS_URIS="[\"ws://${DOCKER_HOST_IP}:8888/kurento\"]" \
-DDOMAIN_OR_PUBLIC_IP="${E2E_CONTAINER_IP}" \
-DOPENVIDU_SECRET=MY_SECRET -DHTTPS_PORT=4443 -DOPENVIDU_RECORDING=true \
-DOPENVIDU_RECORDING_CUSTOM_LAYOUT=/opt/openvidu/test-layouts -DOPENVIDU_WEBHOOK=true \
-DOPENVIDU_WEBHOOK_ENDPOINT=http://127.0.0.1:7777/webhook \
/opt/openvidu/openvidu-server-*.jar &>/opt/openvidu/openvidu-server-"${MEDIA_SERVER}".log &
2022-06-06 12:32:35 +02:00
fi
until $(curl --insecure --output /dev/null --silent --head --fail https://OPENVIDUAPP:MY_SECRET@localhost:4443/); do
echo "Waiting for openvidu-server..."
sleep 2
done
2022-06-06 12:32:35 +02:00
}
function openviduE2ETests {
local MEDIA_SERVER="$1"
# Get e2e container id
local E2E_CONTAINER_ID
E2E_CONTAINER_ID="$(docker ps | grep "$TEST_IMAGE" | awk '{ print $1 }')"
2022-06-06 12:32:35 +02:00
# Get e2e container IP so services running can be accessed by browser and media server containers
local E2E_CONTAINER_IP
E2E_CONTAINER_IP="$(docker inspect "$E2E_CONTAINER_ID" | awk '/bridge/,/IPAddress/' | grep IPAddress | cut -d'"' -f4)"
# Kurento and mediasoup needs to run as network host, so we need Docker host IP.
local DOCKER_HOST_IP
DOCKER_HOST_IP="$(docker network inspect bridge | grep Subnet | cut -d'"' -f4 | cut -d'/' -f1 | sed 's/.$/1/' | grep 172)"
2022-06-06 12:32:35 +02:00
pushd openvidu-test-e2e
if [[ "${MEDIA_SERVER}" == "kurento" ]]; then
mvn -DMEDIA_SERVER_IMAGE="${KURENTO_MEDIA_SERVER_IMAGE}" \
-DOPENVIDU_URL="https://${E2E_CONTAINER_IP}:4443" \
-DCHROME_VERSION="${CHROME_VERSION}" \
-DFIREFOX_VERSION="${FIREFOX_VERSION}" \
-DEDGE_VERSION="${EDGE_VERSION}" \
-Dtest=OpenViduTestAppE2eTest \
-DAPP_URL="https://${E2E_CONTAINER_IP}:4200" \
-DEXTERNAL_CUSTOM_LAYOUT_URL="http://${E2E_CONTAINER_IP}:4114" \
-DREMOTE_URL_CHROME="http://${DOCKER_HOST_IP}:6666/wd/hub/" \
-DREMOTE_URL_FIREFOX="http://${DOCKER_HOST_IP}:6667/wd/hub/" \
-DREMOTE_URL_OPERA="http://${DOCKER_HOST_IP}:6668/wd/hub/" \
-DREMOTE_URL_EDGE="http://${DOCKER_HOST_IP}:6669/wd/hub/" \
-DEXTERNAL_CUSTOM_LAYOUT_PARAMS="sessionId,CUSTOM_LAYOUT_SESSION,secret,MY_SECRET" \
test
2022-06-06 12:32:35 +02:00
elif [[ "${MEDIA_SERVER}" == "mediasoup" ]]; then
mvn -DMEDIA_SERVER_IMAGE="openvidu/mediasoup-controller:${MEDIASOUP_CONTROLLER_VERSION}" \
-DOPENVIDU_URL="https://${E2E_CONTAINER_IP}:4443" \
-DCHROME_VERSION="${CHROME_VERSION}" \
-DFIREFOX_VERSION="${FIREFOX_VERSION}" \
-DEDGE_VERSION="${EDGE_VERSION}" \
-Dtest=OpenViduTestAppE2eTest \
-DAPP_URL="https://${E2E_CONTAINER_IP}:4200" \
-DEXTERNAL_CUSTOM_LAYOUT_URL="http://${E2E_CONTAINER_IP}:4114" \
-DREMOTE_URL_CHROME="http://${DOCKER_HOST_IP}:6666/wd/hub/" \
-DREMOTE_URL_FIREFOX="http://${DOCKER_HOST_IP}:6667/wd/hub/" \
-DREMOTE_URL_OPERA="http://${DOCKER_HOST_IP}:6668/wd/hub/" \
-DREMOTE_URL_EDGE="http://${DOCKER_HOST_IP}:6669/wd/hub/" \
-DEXTERNAL_CUSTOM_LAYOUT_PARAMS="sessionId,CUSTOM_LAYOUT_SESSION,secret,MY_SECRET" \
-DOPENVIDU_PRO_LICENSE="${OPENVIDU_PRO_LICENSE}" \
-DOPENVIDU_PRO_LICENSE_API="${OPENVIDU_PRO_LICENSE_API}" \
test
2022-06-06 12:32:35 +02:00
else
echo "Not valid media server"
exit 1
fi
stopMediaServer
kill -9 $(pgrep -f /opt/openvidu/openvidu-server) || true
popd
}
function stopMediaServer {
# Remove Kurento Media Server
declare -a arr=("kurento/kurento-media-server"
"openvidu/mediasoup-controller:")
for image in "${arr[@]}"; do
2022-06-06 12:32:35 +02:00
docker ps -a | awk '{ print $1,$2 }' | grep "${image}" | awk '{ print $1 }' | xargs -I {} docker rm -f {} || true
done
docker ps -a
}
# Environment variables
if [[ -n ${1:-} ]]; then
case "${1:-}" in
--openvidu-server-unit-tests)
OV_UNIT_TESTS=true
;;
--openvidu-server-integration-tests)
OV_INTEGRATION_TESTS=true
;;
--openvidu-e2e-tests-kurento)
OV_E2E_KURENTO=true
;;
--openvidu-e2e-tests-mediasoup)
OV_E2E_MEDIASOUP=true
;;
--environment-launch-kurento)
LAUNCH_OV_KURENTO=true
;;
--environment-launch-mediasoup)
LAUNCH_OV_MEDIASOUP=true
;;
*)
echo "Unrecognized method $1"
exit 1
;;
esac
2022-06-06 12:32:35 +02:00
else
echo "Must provide a method to execute as first parameter when calling the script"
exit 1
2022-06-06 12:32:35 +02:00
fi
# -------------
# openvidu-server unit tests
2022-06-06 12:32:35 +02:00
# -------------
if [[ "${OV_UNIT_TESTS}" == true ]]; then
2022-06-06 12:32:35 +02:00
pushd openvidu-server
mvn -B -Dtest=io.openvidu.server.test.unit.*Test test
popd
fi
# -------------
# openvidu-server integration tests
2022-06-06 12:32:35 +02:00
# -------------
if [[ "${OV_INTEGRATION_TESTS}" == true ]]; then
2022-06-06 12:32:35 +02:00
pushd openvidu-server
mvn -B -Dtest=io.openvidu.server.test.integration.*Test test
popd
fi
# -------------
# OpenVidu E2E Tests Kurento
2022-06-06 12:32:35 +02:00
# -------------
if [[ "${OV_E2E_KURENTO}" == true ]]; then
2022-06-06 12:32:35 +02:00
openviduE2ETests "kurento"
fi
# -------------
# OpenVidu E2E Tests mediasoup
2022-06-06 12:32:35 +02:00
# -------------
if [[ "${OV_E2E_MEDIASOUP}" == true ]]; then
openviduE2ETests "mediasoup"
2022-06-06 12:32:35 +02:00
fi
# -------------
# Environment launch Kurento
2022-06-06 12:32:35 +02:00
# -------------
if [[ "${LAUNCH_OV_KURENTO}" == true ]]; then
environmentLaunch "kurento"
fi
# -------------
# Environment launch mediasoup
# -------------
if [[ "${LAUNCH_OV_MEDIASOUP}" == true ]]; then
environmentLaunch "mediasoup"
fi