mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-05-11 22:34:41 +00:00
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# SPDX-License-Identifier: 0BSD
|
|
|
|
"""Fuzzing and security tests for voicemail isolation and web audio guards."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
from hypothesis import given, settings
|
|
from hypothesis import strategies as st
|
|
|
|
from meshchatx.src.backend.web_audio_bridge import WebAudioBridge
|
|
|
|
|
|
@settings(deadline=None)
|
|
@given(pcm=st.binary(min_size=0, max_size=4096))
|
|
def test_web_audio_bridge_push_client_frame_never_crashes(pcm):
|
|
"""Random PCM bytes must not crash push_client_frame, even during voicemail."""
|
|
tele_mgr = MagicMock()
|
|
tele_mgr.is_voicemail_session_active = True
|
|
bridge = WebAudioBridge(tele_mgr, MagicMock())
|
|
bridge.tx_source = MagicMock()
|
|
try:
|
|
bridge.push_client_frame(pcm)
|
|
except Exception:
|
|
pytest.fail("push_client_frame raised an exception")
|
|
|
|
|
|
@settings(deadline=None)
|
|
@given(pcm=st.binary(min_size=0, max_size=4096))
|
|
def test_web_audio_bridge_push_client_frame_forwards_when_not_voicemail(pcm):
|
|
"""PCM bytes must be forwarded when not in a voicemail session."""
|
|
tele_mgr = MagicMock()
|
|
tele_mgr.is_voicemail_session_active = False
|
|
bridge = WebAudioBridge(tele_mgr, MagicMock())
|
|
mock_tx = MagicMock()
|
|
bridge.tx_source = mock_tx
|
|
try:
|
|
bridge.push_client_frame(pcm)
|
|
except Exception:
|
|
pytest.fail("push_client_frame raised an exception")
|
|
if pcm:
|
|
mock_tx.push_pcm.assert_called_once_with(pcm)
|
|
|
|
|
|
def test_web_audio_bridge_attach_client_refuses_without_active_call():
|
|
tele = MagicMock()
|
|
tele.active_call = None
|
|
tele_mgr = MagicMock()
|
|
tele_mgr.telephone = tele
|
|
tele_mgr.is_voicemail_session_active = False
|
|
bridge = WebAudioBridge(tele_mgr, MagicMock())
|
|
assert bridge.attach_client(MagicMock()) is False
|
|
|
|
|
|
def test_web_audio_bridge_attach_client_refuses_during_voicemail():
|
|
tele = MagicMock()
|
|
tele.active_call = object()
|
|
tele_mgr = MagicMock()
|
|
tele_mgr.telephone = tele
|
|
tele_mgr.is_voicemail_session_active = True
|
|
bridge = WebAudioBridge(tele_mgr, MagicMock())
|
|
assert bridge.attach_client(MagicMock()) is False
|
|
|
|
|
|
def test_web_audio_bridge_ensure_remote_tx_skips_without_telephone():
|
|
bridge = WebAudioBridge(MagicMock(), MagicMock())
|
|
bridge._ensure_remote_tx(MagicMock())
|
|
assert bridge.tx_source is None
|
|
|
|
|
|
def test_web_audio_bridge_ensure_remote_tx_skips_during_voicemail():
|
|
tele = MagicMock()
|
|
tele_mgr = MagicMock()
|
|
tele_mgr.is_voicemail_session_active = True
|
|
bridge = WebAudioBridge(tele_mgr, MagicMock())
|
|
bridge._ensure_remote_tx(tele)
|
|
assert bridge.tx_source is None
|