diff --git a/.github/workflows/openvidu-ce-test.yml b/.github/workflows/openvidu-ce-test.yml
new file mode 100644
index 00000000..7010d93f
--- /dev/null
+++ b/.github/workflows/openvidu-ce-test.yml
@@ -0,0 +1,102 @@
+name: OpenVidu CE Tests
+on:
+ push:
+ paths:
+ - '!openvidu-components-angular/**'
+ - '!openvidu-server/docker/**'
+ - '!openvidu-server/deployments/**'
+ pull_request:
+ branches:
+ - master
+ workflow_dispatch:
+ inputs:
+ KURENTO_MEDIA_SERVER_IMAGE:
+ description: 'Docker image of kurento-media-server'
+ required: true
+ default: 'kurento/kurento-media-server:dev-6.18.0'
+ MEDIASOUP_CONTROLLER_VERSION:
+ description: 'Tag of image openvidu/mediasoup-controller'
+ required: true
+ default: 'master'
+ KURENTO_JAVA_COMMIT:
+ description: 'Commit to use in kurento-java dependencies. If "default" the release version declared in property "version.kurento" of openvidu-parent/pom.xml will be used'
+ required: true
+ default: 'master'
+ DOCKER_RECORDING_VERSION:
+ description: 'Force version of openvidu/openvidu-recording container'
+ required: true
+ default: 'default'
+ CHROME_VERSION:
+ description: 'Version of Chrome to use. Must be a valid image tag from https://hub.docker.com/r/selenium/standalone-chrome/tags'
+ required: true
+ default: latest
+ FIREFOX_VERSION:
+ description: 'Version of Firefox to use. Must be a valid image tag from https://hub.docker.com/r/selenium/standalone-firefox/tags'
+ required: true
+ default: latest
+ OPERA_VERSION:
+ description: 'Version of Opera to use. Must be a valid image tag from https://hub.docker.com/r/selenium/standalone-opera/tags'
+ required: true
+ default: latest
+ EDGE_VERSION:
+ description: 'Version of Edge to use. Must be a valid image tag from https://hub.docker.com/r/selenium/standalone-opera/tags'
+ required: true
+ default: latest
+jobs:
+ main:
+ runs-on: ubuntu-latest
+ container:
+ image: openvidu/openvidu-test-e2e:focal
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /opt/openvidu:/opt/openvidu
+ env:
+ KURENTO_SNAPSHOTS_URL: ${{ secrets.KURENTO_SNAPSHOTS_URL }}
+ KURENTO_MEDIA_SERVER_IMAGE: ${{ github.event.inputs.KURENTO_MEDIA_SERVER_IMAGE }}
+ MEDIASOUP_CONTROLLER_VERSION: ${{ github.event.inputs.MEDIASOUP_CONTROLLER_VERSION }}
+ KURENTO_JAVA_COMMIT: ${{ github.event.inputs.KURENTO_JAVA_COMMIT }}
+ DOCKER_RECORDING_VERSION: ${{ github.event.inputs.DOCKER_RECORDING_VERSION }}
+ CHROME_VERSION: ${{ github.event.inputs.CHROME_VERSION }}
+ FIREFOX_VERSION: ${{ github.event.inputs.FIREFOX_VERSION }}
+ OPERA_VERSION: ${{ github.event.inputs.OPERA_VERSION }}
+ EDGE_VERSION: ${{ github.event.inputs.EDGE_VERSION }}
+ steps:
+ - uses: actions/checkout@v2
+ - name: Setting up CI
+ run: ci-scripts/openvidu-e2e-tests.sh --prepare
+ - name: OpenVidu Browser build
+ run: ci-scripts/openvidu-e2e-tests.sh --build-openvidu-browser
+ - name: OpenVidu Node Client build
+ run: ci-scripts/openvidu-e2e-tests.sh --build-openvidu-node-client
+ - name: OpenVidu Java Client build
+ run: ci-scripts/openvidu-e2e-tests.sh --build-openvidu-java-client
+ - name: OpenVidu TestApp build
+ run: ci-scripts/openvidu-e2e-tests.sh --build-openvidu-testapp
+ - name: OpenVidu Server dashboard build
+ run: ci-scripts/openvidu-e2e-tests.sh --build-dashboard
+ - name: OpenVidu Server pre-build
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-server-pre-build
+ - name: OpenVidu Server unit tests
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-server-unit-tests
+ - name: OpenVidu Server integration tests
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-server-integration-tests
+ - name: OpenVidu Server E2E build tests
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-test-e2e-build
+ - name: OpenVidu Server Build
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-server-build
+ - name: Environment launch Kurento
+ run: ci-scripts/openvidu-e2e-tests.sh --environment-launch-kurento
+ - name: OpenVidu E2E Tests Kurento
+ run: ci-scripts/openvidu-e2e-tests.sh --openvidu-e2e-tests-kurento
+ - name: Test reports
+ uses: mikepenz/action-junit-report@v3
+ if: always() # always run even if the previous step fails
+ with:
+ report_paths: '**/target/surefire-reports/TEST-*.xml'
+ - name: Upload logs
+ uses: actions/upload-artifact@v3
+ if: always() # always run even if the previous step fails
+ with:
+ name: Logs
+ path: |
+ /opt/openvidu/*.log
\ No newline at end of file
diff --git a/ci-scripts/kurento-snapshots.xml b/ci-scripts/kurento-snapshots.xml
new file mode 100644
index 00000000..5b765b74
--- /dev/null
+++ b/ci-scripts/kurento-snapshots.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+ default
+
+ true
+
+
+
+ kurento-github-public
+ Kurento GitHub Maven packages (public access)
+ KURENTO_SNAPSHOTS_URL
+
+ false
+
+
+ true
+
+
+
+
+
+ kurento-github-public
+ Kurento GitHub Maven packages (public access)
+ KURENTO_SNAPSHOTS_URL
+
+ false
+
+
+ true
+
+
+
+
+
+
diff --git a/ci-scripts/openvidu-e2e-tests.sh b/ci-scripts/openvidu-e2e-tests.sh
new file mode 100755
index 00000000..8010b418
--- /dev/null
+++ b/ci-scripts/openvidu-e2e-tests.sh
@@ -0,0 +1,450 @@
+#!/bin/bash -x
+set -eu -o pipefail
+
+# Ci flags
+PREPARE=false
+BUILD_OV_BROWSER=false
+BUILD_OV_NODE_CLIENT=false
+BUILD_OV_JAVA_CLIENT=false
+BUILD_OV_TESTAPP=false
+BUILD_OV_DASHBOARD=false
+OV_PRE_BUILD=false
+OV_INTEGRATION_TESTS=false
+OV_UNIT_TESTS=false
+OV_E2E_TESTS_BUILD=false
+OV_SERVER_BUILD=false
+LAUNCH_OV_KURENTO=false
+OV_E2E_KURENTO=false
+LAUNCH_OV_MEDIASOUP=false
+OV_E2E_MEDIASOUP=false
+EXECUTE_ALL=false
+
+function environmentLaunch {
+ local MEDIA_SERVER="$1"
+
+ # Get e2e container id
+ local E2E_CONTAINER_ID
+ E2E_CONTAINER_ID="$(docker ps | grep 'openvidu/openvidu-test-e2e:*' | awk '{ print $1 }')"
+
+ # 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 Gateway | cut -d'"' -f4)"
+ openssl req -newkey rsa:2048 \
+ -new -nodes -x509 -days 3650 \
+ -subj "/CN=www.mydom.com/O=My Company LTD./C=US" \
+ -keyout /opt/openvidu/testapp/key.pem \
+ -out /opt/openvidu/testapp/cert.pem
+ pushd /opt/openvidu/testapp
+ http-server -S -p 4200 &> /opt/openvidu/testapp.log &
+ 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 '')"
+
+ if [[ "$RC" == "500" ]]; then
+ break
+ else
+ echo "Waiting for ${MEDIA_SERVER}..."
+ sleep 1
+ fi
+ done
+ elif [[ "${MEDIA_SERVER}" == "mediasoup" ]]; then
+ docker run --network=host --restart=always --detach=true \
+ --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}"
+ until $(curl --insecure --output /dev/null --silent http://${DOCKER_HOST_IP}:8888/kurento); do echo "Waiting for ${MEDIA_SERVER}..."; sleep 1; done
+ 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 &
+ 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 &
+ 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
+ popd
+}
+
+function openviduE2ETests {
+ local MEDIA_SERVER="$1"
+
+ # Get e2e container id
+ local E2E_CONTAINER_ID
+ E2E_CONTAINER_ID="$(docker ps | grep 'openvidu/openvidu-test-e2e:*' | awk '{ print $1 }')"
+
+ # 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 Gateway | cut -d'"' -f4)"
+
+
+ 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}" \
+ -DOPERA_VERSION="${OPERA_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
+
+ 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}" \
+ -DOPERA_VERSION="${OPERA_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
+
+ 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
+ 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
+ while :
+ do
+ case "${1:-}" in
+ --prepare )
+ PREPARE=true
+ shift 1
+ ;;
+ --build-openvidu-browser )
+ BUILD_OV_BROWSER=true
+ shift 1
+ ;;
+ --build-openvidu-node-client )
+ BUILD_OV_NODE_CLIENT=true
+ shift 1
+ ;;
+ --build-openvidu-java-client )
+ BUILD_OV_JAVA_CLIENT=true
+ shift 1
+ ;;
+ --build-openvidu-testapp )
+ BUILD_OV_TESTAPP=true
+ shift 1
+ ;;
+ --build-dashboard )
+ BUILD_OV_DASHBOARD=true
+ shift 1
+ ;;
+ --openvidu-server-pre-build )
+ OV_PRE_BUILD=true
+ shift 1
+ ;;
+ --openvidu-server-unit-tests )
+ OV_UNIT_TESTS=true
+ shift 1
+ ;;
+ --openvidu-server-integration-tests )
+ OV_INTEGRATION_TESTS=true
+ shift 1
+ ;;
+ --openvidu-test-e2e-build )
+ OV_E2E_TESTS_BUILD=true
+ shift 1
+ ;;
+ --openvidu-server-build )
+ OV_SERVER_BUILD=true
+ shift 1
+ ;;
+ --environment-launch-kurento )
+ LAUNCH_OV_KURENTO=true
+ shift 1
+ ;;
+ --openvidu-e2e-tests-kurento )
+ OV_E2E_KURENTO=true
+ shift 1
+ ;;
+ --environment-launch-mediasoup )
+ LAUNCH_OV_MEDIASOUP=true
+ shift 1
+ ;;
+ --openvidu-e2e-test-mediasoup )
+ OV_E2E_MEDIASOUP=true
+ shift 1
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+else
+ EXECUTE_ALL=true
+fi
+
+
+# -------------
+# 1. Prepare build
+# -------------
+if [[ "${PREPARE}" == true || "${EXECUTE_ALL}" == true ]]; then
+
+ # Connect e2e test container to network bridge so it is vissible for browser and media server containers
+ E2E_CONTAINER_ID="$(docker ps | grep 'openvidu/openvidu-test-e2e:*' | awk '{ print $1 }')"
+ docker network connect bridge "${E2E_CONTAINER_ID}"
+
+ # Pull browser images
+ docker pull selenium/standalone-chrome:"${CHROME_VERSION}"
+ docker pull selenium/standalone-firefox:"${FIREFOX_VERSION}"
+ docker pull selenium/standalone-opera:"${OPERA_VERSION}"
+ docker pull selenium/standalone-edge:"${EDGE_VERSION}"
+
+ # Pull mediasoup and kurento
+ docker pull openvidu/mediasoup-controller:"${MEDIASOUP_CONTROLLER_VERSION}"
+ docker pull "${KURENTO_MEDIA_SERVER_IMAGE}"
+
+ # Prepare directory Openvidu
+ sudo mkdir -p /opt/openvidu/recordings && sudo chmod 777 /opt/openvidu/recordings
+
+
+ # Configure Snapshots repository
+ if [[ -n "${KURENTO_SNAPSHOTS_URL}" ]]; then
+ pushd ci-scripts
+ sed -i "s|KURENTO_SNAPSHOTS_URL|${KURENTO_SNAPSHOTS_URL}|g" kurento-snapshots.xml
+ rm /etc/maven/settings.xml
+ mv kurento-snapshots.xml /etc/maven/settings.xml
+ popd
+ fi
+
+ # Download fake videos
+ FAKE_VIDEO1=/opt/openvidu/barcode.y4m
+ FAKE_VIDEO2=/opt/openvidu/girl.mjpeg
+ if [ ! -f ${FAKE_VIDEO1} ]; then
+ sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/barcode.y4m --create-dirs --output /opt/openvidu/barcode.y4m
+ else
+ echo "File ${FAKE_VIDEO1} already exists"
+ fi
+ if [ ! -f ${FAKE_VIDEO2} ]; then
+ sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/girl.mjpeg --create-dirs --output /opt/openvidu/girl.mjpeg
+ else
+ echo "File ${FAKE_VIDEO2} already exists"
+ fi
+
+ # Download fake audio
+ FAKE_AUDIO=/opt/openvidu/fakeaudio.wav
+ if [ ! -f ${FAKE_AUDIO} ]; then
+ sudo curl --location https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/fakeaudio.wav --create-dirs --output /opt/openvidu/fakeaudio.wav
+ else
+ echo "File ${FAKE_AUDIO} already exists"
+ fi
+ curl --location https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-test-e2e/docker/my-custom-layout/index.html --create-dirs --output /opt/openvidu/test-layouts/layout1/index.html
+ chmod -R 777 /opt/openvidu
+
+fi
+
+# -------------
+# 2. OpenVidu Browser build
+# -------------
+if [[ "${BUILD_OV_BROWSER}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-browser || exit 1
+ npm install
+ npm run build
+ npm link
+ popd
+fi
+
+# -------------
+# 3. OpenVidu Node client build
+# -------------
+if [[ "${BUILD_OV_NODE_CLIENT}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-node-client
+ npm install --legacy-peer-deps
+ npm run build
+ npm link
+ popd
+fi
+
+# -------------
+# 4. OpenVidu Java client build
+# -------------
+if [[ "${BUILD_OV_JAVA_CLIENT}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-java-client
+ mvn -B versions:set -DnewVersion=TEST
+ mvn -B clean compile package
+ mvn -B install:install-file -Dfile=target/openvidu-java-client-TEST.jar -DgroupId=io.openvidu -DartifactId=openvidu-java-client -Dversion=TEST -Dpackaging=jar
+ popd
+fi
+
+# -------------
+# 5. OpenVidu Test App build
+# -------------
+if [[ "${BUILD_OV_TESTAPP}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-testapp
+ npm install --legacy-peer-deps
+ npm link --legacy-peer-deps openvidu-browser openvidu-node-client
+ export NG_CLI_ANALYTICS="false" && ./node_modules/@angular/cli/bin/ng build --prod --output-path=/opt/openvidu/testapp
+ popd
+fi
+
+# -------------
+# 6. OpenVidu Dashboard build
+# -------------
+if [[ "${BUILD_OV_DASHBOARD}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-server/src/dashboard
+ npm install
+ npm link openvidu-browser openvidu-node-client
+ npm run build-prod
+ popd
+fi
+
+# -------------
+# 7. OpenVidu Pre build
+# -------------
+if [[ "${OV_PRE_BUILD}" == true || "${EXECUTE_ALL}" == true ]]; then
+ if [[ ${KURENTO_JAVA_COMMIT} != "default" ]]; then
+ git clone https://github.com/Kurento/kurento-java.git
+ pushd kurento-java
+ git checkout -f "${KURENTO_JAVA_COMMIT}"
+ MVN_VERSION="$(grep -oPm1 "(?<=)[^<]+" "pom.xml")"
+ mvn -B -Dmaven.artifact.threads=1 clean install
+ popd
+ rm -rf kurento-java
+ mvn -B versions:set-property -Dproperty=version.kurento -DnewVersion="${MVN_VERSION}"
+ fi
+
+ mvn -B versions:set-property -Dproperty=version.openvidu.java.client -DnewVersion=TEST
+ mvn -B -DskipTests=true clean install
+
+fi
+
+# -------------
+# 8. OpenVidu Unit tests
+# -------------
+if [[ "${OV_UNIT_TESTS}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-server
+ mvn -B -Dtest=io.openvidu.server.test.unit.*Test test
+ popd
+fi
+
+# -------------
+# 9. OpenVidu Unit tests
+# -------------
+if [[ "${OV_INTEGRATION_TESTS}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-server
+ mvn -B -Dtest=io.openvidu.server.test.integration.*Test test
+ popd
+fi
+
+# -------------
+# 10. OpenVidu E2E Tests build
+# -------------
+if [[ "${OV_E2E_TESTS_BUILD}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-test-browsers
+ mvn -B versions:set -DnewVersion=TEST && mvn -B clean install
+ popd
+ mvn -B versions:set-property -Dproperty=version.openvidu.java.client -DnewVersion=TEST
+ mvn -B versions:set-property -Dproperty=version.openvidu.test.browsers -DnewVersion=TEST
+ pushd openvidu-test-e2e
+ mvn -B -DskipTests=true clean install
+ popd
+fi
+
+# -------------
+# 11. OpenVidu Server build
+# -------------
+if [[ "${OV_SERVER_BUILD}" == true || "${EXECUTE_ALL}" == true ]]; then
+ pushd openvidu-server
+ mvn -B -DskipTests=true package
+ cp target/openvidu-server*.jar /opt/openvidu
+ popd
+fi
+
+# -------------
+# 12. Environment launch Kurento
+# -------------
+if [[ "${LAUNCH_OV_KURENTO}" == true || "${EXECUTE_ALL}" == true ]]; then
+ environmentLaunch "kurento"
+fi
+
+# -------------
+# 13. OpenVidu E2E Tests Kurento
+# -------------
+if [[ "${OV_E2E_KURENTO}" == true || "${EXECUTE_ALL}" == true ]]; then
+ openviduE2ETests "kurento"
+fi
+
+# -------------
+# 14. Environment launch mediasoup
+# -------------
+if [[ "${LAUNCH_OV_MEDIASOUP}" == true || "${EXECUTE_ALL}" == true ]]; then
+ environmentLaunch "mediasoup"
+fi
+
+# -------------
+# 15. OpenVidu E2E Tests Kurento
+# -------------
+if [[ "${OV_E2E_MEDIASOUP}" == true || "${EXECUTE_ALL}" == true ]]; then
+ openviduE2ETests "mediasoup"
+fi
\ No newline at end of file