- Add Homebrew library path fallback when ctypes.util.find_library fails on macOS (Apple Silicon + Intel paths, guarded by platform check) - Fix RuntimeError in gateway stop() by iterating over dict copy - Update Opus tests to verify find_library-first + conditional fallback
45 lines
2.1 KiB
Python
45 lines
2.1 KiB
Python
"""Tests for Discord Opus codec loading — must use ctypes.util.find_library."""
|
|
|
|
import inspect
|
|
|
|
|
|
class TestOpusFindLibrary:
|
|
"""Opus loading must try ctypes.util.find_library first, with platform fallback."""
|
|
|
|
def test_uses_find_library_first(self):
|
|
"""find_library must be the primary lookup strategy."""
|
|
from gateway.platforms.discord import DiscordAdapter
|
|
source = inspect.getsource(DiscordAdapter.connect)
|
|
assert "find_library" in source, \
|
|
"Opus loading must use ctypes.util.find_library"
|
|
|
|
def test_homebrew_fallback_is_conditional(self):
|
|
"""Homebrew paths must only be tried when find_library returns None."""
|
|
from gateway.platforms.discord import DiscordAdapter
|
|
source = inspect.getsource(DiscordAdapter.connect)
|
|
# Homebrew fallback must exist
|
|
assert "/opt/homebrew" in source or "homebrew" in source, \
|
|
"Opus loading should have macOS Homebrew fallback"
|
|
# find_library must appear BEFORE any Homebrew path
|
|
fl_idx = source.index("find_library")
|
|
hb_idx = source.index("/opt/homebrew")
|
|
assert fl_idx < hb_idx, \
|
|
"find_library must be tried before Homebrew fallback paths"
|
|
# Fallback must be guarded by platform check
|
|
assert "sys.platform" in source or "darwin" in source, \
|
|
"Homebrew fallback must be guarded by macOS platform check"
|
|
|
|
def test_opus_decode_error_logged(self):
|
|
"""Opus decode failure must log the error, not silently return."""
|
|
from gateway.platforms.discord import VoiceReceiver
|
|
source = inspect.getsource(VoiceReceiver._on_packet)
|
|
assert "logger" in source, \
|
|
"_on_packet must log Opus decode errors"
|
|
# Must not have bare `except Exception:\n return`
|
|
lines = source.split("\n")
|
|
for i, line in enumerate(lines):
|
|
if "except Exception" in line and i + 1 < len(lines):
|
|
next_line = lines[i + 1].strip()
|
|
assert next_line != "return", \
|
|
f"_on_packet has bare 'except Exception: return' at line {i+1}"
|