mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
145 lines
4.4 KiB
Python
145 lines
4.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import unittest
|
||
|
from selenium import webdriver
|
||
|
from selenium.webdriver.support.wait import WebDriverWait
|
||
|
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
|
||
|
from selenium.webdriver.chrome.options import Options as COptions
|
||
|
import webrtc_sendrecv as webrtc
|
||
|
import simple_server as sserver
|
||
|
import asyncio
|
||
|
import threading
|
||
|
import signal
|
||
|
|
||
|
import gi
|
||
|
gi.require_version('Gst', '1.0')
|
||
|
from gi.repository import Gst
|
||
|
|
||
|
thread = None
|
||
|
stop = None
|
||
|
server = None
|
||
|
|
||
|
class AsyncIOThread(threading.Thread):
|
||
|
def __init__ (self, loop):
|
||
|
threading.Thread.__init__(self)
|
||
|
self.loop = loop
|
||
|
|
||
|
def run(self):
|
||
|
asyncio.set_event_loop(self.loop)
|
||
|
self.loop.run_forever()
|
||
|
self.loop.close()
|
||
|
print ("closed loop")
|
||
|
|
||
|
def stop_thread(self):
|
||
|
self.loop.call_soon_threadsafe(self.loop.stop)
|
||
|
|
||
|
async def run_until(server, stop_token):
|
||
|
async with server:
|
||
|
await stop_token
|
||
|
print ("run_until done")
|
||
|
|
||
|
def setUpModule():
|
||
|
global thread, server
|
||
|
Gst.init(None)
|
||
|
cacerts_path = os.environ.get('TEST_CA_CERT_PATH')
|
||
|
loop = asyncio.new_event_loop()
|
||
|
|
||
|
thread = AsyncIOThread(loop)
|
||
|
thread.start()
|
||
|
server = sserver.WebRTCSimpleServer('127.0.0.1', 8443, 20, False, cacerts_path)
|
||
|
def f():
|
||
|
global stop
|
||
|
stop = asyncio.ensure_future(server.run())
|
||
|
loop.call_soon_threadsafe(f)
|
||
|
|
||
|
def tearDownModule():
|
||
|
global thread, stop
|
||
|
stop.cancel()
|
||
|
thread.stop_thread()
|
||
|
thread.join()
|
||
|
print("thread joined")
|
||
|
|
||
|
def valid_int(n):
|
||
|
if isinstance(n, int):
|
||
|
return True
|
||
|
if isinstance(n, str):
|
||
|
try:
|
||
|
num = int(n)
|
||
|
return True
|
||
|
except:
|
||
|
return False
|
||
|
return False
|
||
|
|
||
|
def create_firefox_driver():
|
||
|
capabilities = webdriver.DesiredCapabilities().FIREFOX.copy()
|
||
|
capabilities['acceptSslCerts'] = True
|
||
|
capabilities['acceptInsecureCerts'] = True
|
||
|
profile = FirefoxProfile()
|
||
|
profile.set_preference ('media.navigator.streams.fake', True)
|
||
|
profile.set_preference ('media.navigator.permission.disabled', True)
|
||
|
|
||
|
return webdriver.Firefox(firefox_profile=profile, capabilities=capabilities)
|
||
|
|
||
|
def create_chrome_driver():
|
||
|
capabilities = webdriver.DesiredCapabilities().CHROME.copy()
|
||
|
capabilities['acceptSslCerts'] = True
|
||
|
capabilities['acceptInsecureCerts'] = True
|
||
|
copts = COptions()
|
||
|
copts.add_argument('--allow-file-access-from-files')
|
||
|
copts.add_argument('--use-fake-ui-for-media-stream')
|
||
|
copts.add_argument('--use-fake-device-for-media-stream')
|
||
|
copts.add_argument('--enable-blink-features=RTCUnifiedPlanByDefault')
|
||
|
|
||
|
return webdriver.Chrome(options=copts, desired_capabilities=capabilities)
|
||
|
|
||
|
class ServerConnectionTestCase(unittest.TestCase):
|
||
|
def setUp(self):
|
||
|
self.browser = create_firefox_driver()
|
||
|
# self.browser = create_chrome_driver()
|
||
|
self.addCleanup(self.browser.quit)
|
||
|
self.html_source = os.environ.get('TEST_HTML_SOURCE')
|
||
|
self.assertIsNot(self.html_source, None)
|
||
|
self.assertNotEqual(self.html_source, '')
|
||
|
self.html_source = 'file://' + self.html_source + '/index.html'
|
||
|
|
||
|
def get_peer_id(self):
|
||
|
self.browser.get(self.html_source)
|
||
|
peer_id = WebDriverWait(self.browser, 5).until(
|
||
|
lambda x: x.find_element_by_id('peer-id'),
|
||
|
message='Peer-id element was never seen'
|
||
|
)
|
||
|
WebDriverWait (self.browser, 5).until(
|
||
|
lambda x: valid_int(peer_id.text),
|
||
|
message='Peer-id never became a number'
|
||
|
)
|
||
|
return int(peer_id.text)
|
||
|
|
||
|
def testPeerID(self):
|
||
|
self.get_peer_id()
|
||
|
|
||
|
def testPerformCall(self):
|
||
|
loop = asyncio.new_event_loop()
|
||
|
thread = AsyncIOThread(loop)
|
||
|
thread.start()
|
||
|
peer_id = self.get_peer_id()
|
||
|
client = webrtc.WebRTCClient(peer_id + 1, peer_id, 'wss://127.0.0.1:8443')
|
||
|
|
||
|
async def do_things():
|
||
|
await client.connect()
|
||
|
async def stop_after(client, delay):
|
||
|
await asyncio.sleep(delay)
|
||
|
await client.stop()
|
||
|
future = asyncio.ensure_future (stop_after (client, 5))
|
||
|
res = await client.loop()
|
||
|
thread.stop_thread()
|
||
|
return res
|
||
|
|
||
|
res = asyncio.run_coroutine_threadsafe(do_things(), loop).result()
|
||
|
thread.join()
|
||
|
print ("client thread joined")
|
||
|
self.assertEqual(res, 0)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main(verbosity=2)
|