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 \ google-chrome-stable firefox \
&& rm /etc/apt/sources.list.d/google-chrome.list && 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 ./run.sh /usr/local/bin/run.sh
COPY ./openvidu_helth_check.py /usr/local/bin/openvidu_helth_check COPY ./openvidu_helth_check.py /usr/local/bin/openvidu_helth_check

View File

View File

@ -1,6 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
import unittest import unittest
from selenium import webdriver from selenium import webdriver
from selenium.webdriver import firefox
from selenium.webdriver.firefox import service from selenium.webdriver.firefox import service
from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager 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.firefox.service import Service as FirefoxService
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
from prettytable import from_html_one
import time import time
import os import os
@ -25,11 +27,19 @@ class InfraSmokeTests(unittest.TestCase):
self.inspector_check(browser="firefox", turn=True) self.inspector_check(browser="firefox", turn=True)
def inspector_check(self, browser="chrome", turn=False): 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": if browser == "chrome":
self.runChrome() self.runChrome()
else: else:
self.runFirefox(turn) self.runFirefox(turn)
print ('Testing OpenVidu Inspector test')
url_test = self.openvidu_url + '/inspector' url_test = self.openvidu_url + '/inspector'
self.driver.get(url_test) self.driver.get(url_test)
@ -40,23 +50,33 @@ class InfraSmokeTests(unittest.TestCase):
elem = self.driver.find_element(By.ID, 'login-btn') elem = self.driver.find_element(By.ID, 'login-btn')
elem.send_keys(Keys.RETURN) 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 = self.driver.find_element(By.ID,'menu-test-btn')
elem.send_keys(Keys.RETURN) elem.send_keys(Keys.RETURN)
elem = self.driver.find_element(By.ID,'test-btn') elem = self.driver.find_element(By.ID,'test-btn')
elem.send_keys(Keys.RETURN) elem.send_keys(Keys.RETURN)
self.driver.find_elements(By.XPATH, "//*[contains(text(), 'Stream playing')]") video_error = False
print('data:image/png;base64,' + self.driver.get_screenshot_as_base64()) 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 = self.driver.find_element(By.ID,'test-btn')
elem.send_keys(Keys.RETURN) elem.send_keys(Keys.RETURN)
print('Test success')
self.closeBrowser() self.closeBrowser()
print('Sucess with ' + browser + ' and Force Turn: ' + str(turn) + '\n')
print('----------------------------------------------------------------------\n')
def runChrome(self): def runChrome(self):
self.options = webdriver.ChromeOptions() self.options = webdriver.ChromeOptions()
@ -75,17 +95,51 @@ class InfraSmokeTests(unittest.TestCase):
def runFirefox(self, turn=False): def runFirefox(self, turn=False):
print("Running firefox with Turn: ", turn) print("Running firefox with Turn: ", turn)
self.options = webdriver.FirefoxOptions() 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) self.options.set_preference('media.navigator.streams.fake', True)
if turn: self.options.set_preference('media.peerconnection.enabled', True)
self.options.set_preference('media.peerconnection.ice.relay_only', 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( self.driver = webdriver.Firefox(
service=FirefoxService(GeckoDriverManager().install()), service=FirefoxService(GeckoDriverManager().install()),
options = self.options) options = self.options)
self.driver.implicitly_wait(15) self.driver.implicitly_wait(5)
self.driver.maximize_window() 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): def closeBrowser(self):
# close the browser window # close the browser window
self.driver.close() self.driver.close()