deployment: print candidates in openvidu-health-checker docker image test

pull/664/head
cruizba 2021-11-03 20:22:52 +01:00
parent 4cdae4601d
commit 83dade9e9e
3 changed files with 66 additions and 12 deletions

View File

@ -21,7 +21,7 @@ RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key
google-chrome-stable firefox \
&& rm /etc/apt/sources.list.d/google-chrome.list
RUN pip3 install selenium webdriver_manager
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

View File

View File

@ -1,6 +1,7 @@
#!/usr/bin/python3
import unittest
from selenium import webdriver
from selenium.webdriver import firefox
from selenium.webdriver.firefox import service
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager
@ -9,6 +10,7 @@ from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from prettytable import from_html_one
import time
import os
@ -25,11 +27,19 @@ class InfraSmokeTests(unittest.TestCase):
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('|')
print('|')
print('======================================================================')
if self.openvidu_url == None or self.openvidu_password == None:
raise(Exception("You must specify OV_URL and OV_SECRET environment variables"))
if browser == "chrome":
self.runChrome()
else:
self.runFirefox(turn)
print ('Testing OpenVidu Inspector test')
url_test = self.openvidu_url + '/inspector'
self.driver.get(url_test)
@ -40,23 +50,33 @@ class InfraSmokeTests(unittest.TestCase):
elem = self.driver.find_element(By.ID, 'login-btn')
elem.send_keys(Keys.RETURN)
time.sleep(10)
print('data:image/png;base64,' + self.driver.get_screenshot_as_base64())
# 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)
self.driver.find_elements(By.XPATH, "//*[contains(text(), 'Stream playing')]")
print('data:image/png;base64,' + self.driver.get_screenshot_as_base64())
video_error = False
try:
self.driver.find_elements(By.XPATH, "//*[contains(text(), 'Stream playing')]")
except:
video_error = True
finally:
# print('data:image/png;base64,' + self.driver.get_screenshot_as_base64())
if browser == "firefox":
self.print_candidates()
print('Video detected.')
if video_error == True:
raise Exception('Error. No video detected')
print('Video detected.\n')
elem = self.driver.find_element(By.ID,'test-btn')
elem.send_keys(Keys.RETURN)
print('Test success')
self.closeBrowser()
print('Sucess with ' + browser + ' and Force Turn: ' + str(turn) + '\n')
print('----------------------------------------------------------------------\n')
def runChrome(self):
self.options = webdriver.ChromeOptions()
@ -75,17 +95,51 @@ class InfraSmokeTests(unittest.TestCase):
def runFirefox(self, turn=False):
print("Running firefox with Turn: ", turn)
self.options = webdriver.FirefoxOptions()
self.options.set_preference('media.navigator.permission.disabled', True)
self.options.set_preference('media.navigator.permission.disabled', False)
self.options.set_preference('media.navigator.streams.fake', True)
if turn:
self.options.set_preference('media.peerconnection.ice.relay_only', True)
self.options.set_preference('media.peerconnection.enabled', True)
self.options.set_preference('media.peerconnection.ice.obfuscate_host_addresses', False)
self.options.set_preference('media.peerconnection.identity.enabled', True)
self.options.set_preference('media.peerconnection.mtransport_process', True)
self.options.set_preference('media.peerconnection.ice.no_host', False)
self.options.set_preference('network.process.enabled', True)
self.options.set_preference('media.peerconnection.ice.relay_only', turn)
self.options.set_preference('media.peerconnection.turn.disable', not turn)
self.driver = webdriver.Firefox(
service=FirefoxService(GeckoDriverManager().install()),
options = self.options)
self.driver.implicitly_wait(15)
self.driver.implicitly_wait(5)
self.driver.maximize_window()
def print_candidates(self):
try:
# New tab
self.driver.execute_script("window.open('');")
# Switch to the new window
self.driver.switch_to.window(self.driver.window_handles[1])
# Open about:webrtc
self.driver.get('about:webrtc')
peer_conn_elems = self.driver.find_elements(By.CLASS_NAME, "peer-connection")
for peer_conn in peer_conn_elems:
show_details_elems = peer_conn.find_elements(By.XPATH, "//*[contains(text(), 'show details')]")
for show_details in show_details_elems:
show_details.click()
print("Waiting for candidates to be checked...")
# Get ice stats
time.sleep(15)
ice_stats_div_elems = self.driver.find_elements(By.XPATH, "//div[contains(@id, 'ice-stats')]")
for ice_stats_div in ice_stats_div_elems:
table_elems = ice_stats_div.find_elements(By.TAG_NAME, 'table')
ice_candidates_table = table_elems[0]
html_ice_table = '<table>' + ice_candidates_table.get_attribute('innerHTML') + '</table>'
print(from_html_one(html_ice_table))
# Go to main window
self.driver.switch_to.window(self.driver.window_handles[0])
except:
print('Error getting candidates')
def closeBrowser(self):
# close the browser window
self.driver.close()