From 2c4596a73fbd84396b5c5e47c1cc51af9ad21767 Mon Sep 17 00:00:00 2001 From: cruizba Date: Thu, 4 Nov 2021 16:47:26 +0100 Subject: [PATCH] deployment: openvidu_health_check can test OpenVidu CE/PRO/ENTERPRISE. Cache web drivers in Docker image --- .../docker/openvidu-health-checker/Dockerfile | 15 +++-- .../download_webdrivers.py | 12 ++++ .../openvidu-health-checker/entrypoint.sh | 15 +++++ ...elth_check.py => openvidu_health_check.py} | 63 +++++++++++++++---- .../docker/openvidu-health-checker/run.sh | 6 +- 5 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 openvidu-server/docker/openvidu-health-checker/download_webdrivers.py create mode 100644 openvidu-server/docker/openvidu-health-checker/entrypoint.sh rename openvidu-server/docker/openvidu-health-checker/{openvidu_helth_check.py => openvidu_health_check.py} (73%) diff --git a/openvidu-server/docker/openvidu-health-checker/Dockerfile b/openvidu-server/docker/openvidu-health-checker/Dockerfile index fe1ae1ee..d3fa9523 100644 --- a/openvidu-server/docker/openvidu-health-checker/Dockerfile +++ b/openvidu-server/docker/openvidu-health-checker/Dockerfile @@ -23,13 +23,16 @@ RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key RUN pip3 install selenium webdriver_manager prettytable -COPY ./run.sh /usr/local/bin/run.sh -COPY ./openvidu_helth_check.py /usr/local/bin/openvidu_helth_check -RUN chmod +x /usr/local/bin/run.sh /usr/local/bin/openvidu_helth_check - WORKDIR /workdir -ENTRYPOINT [ "/usr/local/bin/run.sh" ] +COPY ./run.sh ./entrypoint.sh /usr/local/bin/ +COPY ./openvidu_health_check.py ./download_webdrivers.py ./ +RUN chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/run.sh -CMD [ "openvidu_helth_check" ] +# Cache web driver +RUN python3 download_webdrivers.py + +ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] + +CMD [ "openvidu_health_check.py" ] diff --git a/openvidu-server/docker/openvidu-health-checker/download_webdrivers.py b/openvidu-server/docker/openvidu-health-checker/download_webdrivers.py new file mode 100644 index 00000000..15672d6c --- /dev/null +++ b/openvidu-server/docker/openvidu-health-checker/download_webdrivers.py @@ -0,0 +1,12 @@ +from openvidu_health_check import InfraSmokeTests + +if __name__ == '__main__': + try: + init_obj = InfraSmokeTests() + init_obj.runChrome() + except: + print("Chrome web driver downloaded") + try: + init_obj.runFirefox() + except: + print("Firefox web driver downloaded") diff --git a/openvidu-server/docker/openvidu-health-checker/entrypoint.sh b/openvidu-server/docker/openvidu-health-checker/entrypoint.sh new file mode 100644 index 00000000..63f36791 --- /dev/null +++ b/openvidu-server/docker/openvidu-health-checker/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +asyncRun() { + "$@" & + pid="$!" + trap "echo 'Stopping PID $pid'; kill -SIGTERM $pid" SIGINT SIGTERM + + # A signal emitted while waiting will make the wait command return code > 128 + # Let's wrap it in a loop that doesn't end before the process is indeed stopped + while kill -0 $pid > /dev/null 2>&1; do + wait + done +} + +asyncRun /usr/local/bin/run.sh "$@" diff --git a/openvidu-server/docker/openvidu-health-checker/openvidu_helth_check.py b/openvidu-server/docker/openvidu-health-checker/openvidu_health_check.py similarity index 73% rename from openvidu-server/docker/openvidu-health-checker/openvidu_helth_check.py rename to openvidu-server/docker/openvidu-health-checker/openvidu_health_check.py index 78f25342..e7accf7c 100644 --- a/openvidu-server/docker/openvidu-health-checker/openvidu_helth_check.py +++ b/openvidu-server/docker/openvidu-health-checker/openvidu_health_check.py @@ -1,5 +1,6 @@ #!/usr/bin/python3 import unittest +import requests from selenium import webdriver from selenium.webdriver import firefox from selenium.webdriver.firefox import service @@ -17,20 +18,28 @@ import os class InfraSmokeTests(unittest.TestCase): def setUp(self): + print('Executing test... Please wait...') self.openvidu_url = os.getenv('OV_URL') self.openvidu_password = os.getenv('OV_SECRET') + self.is_openvidu_ce = self.check_is_openvidu_ce() + if self.is_openvidu_ce: + self.inject_basic_auth_in_url() self.driver = None - def test_inspector(self): + def test_chrome_no_relay(self): self.inspector_check(browser="chrome") + + def test_firefox_no_relay(self): self.inspector_check(browser="firefox") + + def test_firefox_force_relay(self): self.inspector_check(browser="firefox", turn=True) def inspector_check(self, browser="chrome", turn=False): print('\n\n======================================================================') print('|') print('|') - print('| Testing OpenVidu with ' + browser + ' and force relay: ' + str(turn)) + print('| Testing OpenVidu ' + ('CE ' if self.is_openvidu_ce else 'PRO/ENTERPRISE ') + 'with ' + browser + ' and force relay: ' + str(turn)) print('|') print('|') print('======================================================================') @@ -41,21 +50,35 @@ class InfraSmokeTests(unittest.TestCase): else: self.runFirefox(turn) - url_test = self.openvidu_url + '/inspector' - self.driver.get(url_test) + if self.is_openvidu_ce: + url_test = self.openvidu_url + '/dashboard' + self.driver.get(url_test) - elem = self.driver.find_element(By.ID, 'secret-input') - elem.send_keys(self.openvidu_password) + elem = self.driver.find_element(By.ID,'test-btn') + elem.send_keys(Keys.RETURN) - elem = self.driver.find_element(By.ID, 'login-btn') - elem.send_keys(Keys.RETURN) + elem = self.driver.find_element(By.NAME, 'secret') + elem.send_keys(self.openvidu_password) - # print('data:image/png;base64,' + self.driver.get_screenshot_as_base64()) - elem = self.driver.find_element(By.ID,'menu-test-btn') - elem.send_keys(Keys.RETURN) + elem = self.driver.find_element(By.ID, 'join-btn') + elem.send_keys(Keys.RETURN) - elem = self.driver.find_element(By.ID,'test-btn') - elem.send_keys(Keys.RETURN) + else: + url_test = self.openvidu_url + '/inspector' + self.driver.get(url_test) + + elem = self.driver.find_element(By.ID, 'secret-input') + elem.send_keys(self.openvidu_password) + + elem = self.driver.find_element(By.ID, 'login-btn') + elem.send_keys(Keys.RETURN) + + # print('data:image/png;base64,' + self.driver.get_screenshot_as_base64()) + elem = self.driver.find_element(By.ID,'menu-test-btn') + elem.send_keys(Keys.RETURN) + + elem = self.driver.find_element(By.ID,'test-btn') + elem.send_keys(Keys.RETURN) video_error = False try: @@ -112,6 +135,20 @@ class InfraSmokeTests(unittest.TestCase): self.driver.implicitly_wait(5) self.driver.maximize_window() + def check_is_openvidu_ce(self): + response = requests.get(self.openvidu_url + "/dashboard") + if response.status_code == 401: + return True + else: + return False + + def inject_basic_auth_in_url(self): + separator = "://" + basic_auth_url_str = "OPENVIDUAPP:" + self.openvidu_password + "@" + split_url = self.openvidu_url.split(separator) + self.openvidu_url = split_url[0] + separator + basic_auth_url_str + split_url[1] + + def print_candidates(self): try: # New tab diff --git a/openvidu-server/docker/openvidu-health-checker/run.sh b/openvidu-server/docker/openvidu-health-checker/run.sh index 76879184..22940cc6 100644 --- a/openvidu-server/docker/openvidu-health-checker/run.sh +++ b/openvidu-server/docker/openvidu-health-checker/run.sh @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash set -eu -o pipefail # Launch XVFB @@ -11,4 +11,6 @@ do echo "Waiting xvfb..." done -exec "$*" +echo "Running tests... Please wait..." + +exec python3 "$@"