convert rtc store (#1242)

This commit is contained in:
Henry Ruhs
2026-09-12 16:55:18 +02:00
committed by GitHub
parent 1052b6f532
commit 97a4a406c0
10 changed files with 70 additions and 57 deletions
+4 -3
View File
@@ -8,7 +8,7 @@ from unittest.mock import patch
import pytest
from starlette.testclient import TestClient
from facefusion import metadata, process_manager, rtc, rtc_store, session_manager, state_manager
from facefusion import metadata, process_manager, rtc, rtc_store, session_context, session_manager, state_manager
from facefusion.apis import asset_store
from facefusion.apis.core import create_api
from facefusion.download import conditional_download
@@ -255,7 +255,8 @@ def test_destroy_session(test_client : TestClient) -> None:
'sender_bitrate': ctypes.c_uint(0),
'receiver_bitrate': ctypes.c_uint(0)
}
rtc_store.set_peer(session_id, rtc_peer)
session_context.set_session_id(session_id)
rtc_store.set_peer(rtc_peer)
delete_session_response = test_client.delete('/session', headers =
{
@@ -264,7 +265,7 @@ def test_destroy_session(test_client : TestClient) -> None:
assert session_manager.find_session_id(access_token) is None
assert asset_store.get_assets(session_id) is None
assert rtc_store.has_peer(session_id) is False
assert rtc_store.has_peer() is False
assert delete_session_response.status_code == 200
for asset_path in asset_paths:
+9 -5
View File
@@ -5,7 +5,7 @@ from unittest.mock import patch
import pytest
from starlette.testclient import TestClient
from facefusion import metadata, rtc, rtc_store, session_manager, state_manager
from facefusion import metadata, rtc, rtc_store, session_context, session_manager, state_manager
from facefusion.apis import asset_store
from facefusion.apis.core import create_api, pre_check
from facefusion.download import conditional_download
@@ -36,7 +36,7 @@ def before_all() -> None:
def before_each() -> None:
session_manager.SESSIONS.clear()
asset_store.clear()
rtc_store.clear()
rtc_store.delete_peer()
@pytest.fixture(scope = 'module')
@@ -157,7 +157,9 @@ def test_delete_stream_video(test_client : TestClient) -> None:
'Content-Type': 'application/sdp'
})
assert rtc_store.has_peer(session_id) is True
session_context.set_session_id(session_id)
assert rtc_store.has_peer() is True
post_response = test_client.post('/stream', content = sdp_offer, headers =
{
@@ -166,7 +168,9 @@ def test_delete_stream_video(test_client : TestClient) -> None:
})
assert post_response.status_code == 409
assert rtc_store.has_peer(session_id) is True
session_context.set_session_id(session_id)
assert rtc_store.has_peer() is True
delete_response = test_client.delete('/stream', headers =
{
@@ -174,7 +178,7 @@ def test_delete_stream_video(test_client : TestClient) -> None:
})
assert delete_response.status_code == 200
assert rtc_store.has_peer(session_id) is False
assert rtc_store.has_peer() is False
post_response = test_client.post('/stream', content = 'invalid', headers =
{
+1 -1
View File
@@ -35,7 +35,7 @@ def before_all() -> None:
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
rtc_store.clear()
rtc_store.delete_peer()
def dispatch_frame(buffer : Buffer, track : int, frame_handler : FrameHandler) -> threading.Event:
+13 -12
View File
@@ -36,7 +36,7 @@ def before_all() -> None:
def before_each() -> Iterator[None]:
local_id = resolve_local_id()
rtc_store.clear()
rtc_store.delete_peer()
yield
@@ -117,14 +117,15 @@ def test_process_video(video_codec : VideoCodec, session_id : str) -> None:
datachannel_module.create_static_library().rtcDeletePeerConnection(peer_connection)
with patch('facefusion.apis.stream_manager.threading.Thread'):
sdp_answer = process_video(session_id, sdp_offer)
set_session_id(session_id)
sdp_answer = process_video(sdp_offer)
assert sdp_answer
assert 'm=video' in sdp_answer
assert 'a=recvonly' in sdp_answer
assert 'a=sendonly' in sdp_answer
rtc_peer = rtc_store.get_peer(session_id)
rtc_peer = rtc_store.get_peer()
sender_bitrate = rtc_peer.get('sender_bitrate')
receiver_bitrate = rtc_peer.get('receiver_bitrate')
@@ -156,22 +157,22 @@ def test_run_peer_loop(video_codec : VideoCodec, payload_type : int, session_id
'receiver_bitrate': ctypes.c_uint(0)
}
rtc_store.set_peer(session_id, rtc_peer)
store_creator.set_content(state_manager.STATE_SET, session_id, state_manager.get_state())
set_session_id(session_id)
rtc_store.set_peer(rtc_peer)
assert rtc_store.has_peer(session_id) is True
assert rtc_store.has_peer() is True
with patch('facefusion.thread_helper.ThreadPoolExecutor') as thread_pool_executor_mock:
with patch('facefusion.apis.stream_manager.receive_video_frames'):
with patch('facefusion.apis.stream_manager.run_video_encode_loop'):
thread = threading.Thread(target = copy_context().run, args = (run_peer_loop, session_id, rtc_peer), daemon = True)
thread = threading.Thread(target = copy_context().run, args = (run_peer_loop, rtc_peer), daemon = True)
thread.start()
thread.join(timeout = 5.0)
thread_pool_executor_mock.assert_called_once_with(max_workers = 8, initializer = set_session_id, initargs = tuple([ session_id ]))
assert rtc_store.has_peer(session_id) is False
assert rtc_store.has_peer() is False
def test_destroy_stream() -> None:
@@ -189,11 +190,11 @@ def test_destroy_stream() -> None:
'sender_bitrate': ctypes.c_uint(0),
'receiver_bitrate': ctypes.c_uint(0)
}
session_id = 'test-destroy-stream'
rtc_store.set_peer(session_id, rtc_peer)
set_session_id('test-destroy-stream')
rtc_store.set_peer(rtc_peer)
assert destroy_stream(session_id) is True
assert rtc_store.get_peer(session_id) is None
assert destroy_stream() is True
assert rtc_store.get_peer() is None
assert destroy_stream(session_id) is False
assert destroy_stream() is False
+1 -1
View File
@@ -41,7 +41,7 @@ def before_all() -> None:
@pytest.fixture(scope = 'function', autouse = True)
def before_each() -> None:
rtc_store.clear()
rtc_store.delete_peer()
def dispatch_frame(buffer : Buffer, track : int, frame_handler : FrameHandler) -> threading.Event: