From 230ab5d5cc5946b5deb243bc722ec20c2c37f1ed Mon Sep 17 00:00:00 2001 From: Twirre Meulenbelt <43213592+TwirreM@users.noreply.github.com> Date: Wed, 22 Oct 2025 15:38:30 +0200 Subject: [PATCH] test: add case for microphone failure When the microphone fails, it will raise an IOError during the `read`. This is simulated with a new test. ref: N25B-119 --- test/unit/test_audio_sender.py | 45 +++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/test/unit/test_audio_sender.py b/test/unit/test_audio_sender.py index 9aab86f..4324cdb 100644 --- a/test/unit/test_audio_sender.py +++ b/test/unit/test_audio_sender.py @@ -55,23 +55,50 @@ def test_sending_audio(mocker): mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L} mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state") - mock_state.exit_event.is_set.return_value = False - - mock_audio = mocker.patch("robot_interface.endpoints.audio_sender.pyaudio") - mock_audio.PyAudio = mock.Mock() - stream = mock.Mock() - stream.read = _fake_read - mock_audio.PyAudio.open.return_value = stream + mock_state.exit_event.is_set.side_effect = [False, True] mock_zmq_context = mock.Mock() send_socket = mock.Mock() + # If there's something wrong with the microphone, it will raise an IOError when `read`ing. + stream = mock.Mock() + stream.read = _fake_read + sender = AudioSender(mock_zmq_context) sender.socket.send = send_socket + sender.audio.open = mock.Mock() + sender.audio.open.return_value = stream sender.start() - time.sleep(0.01) - mock_state.exit_event.is_set.return_value = True sender.wait_until_done() send_socket.assert_called() + + +def _fake_read_error(num_frames): + raise IOError() + + +def test_break_microphone(mocker): + mock_choose_mic = mocker.patch("robot_interface.endpoints.audio_sender.choose_mic_default") + mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L} + + mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state") + mock_state.exit_event.is_set.side_effect = [False, True] + + mock_zmq_context = mock.Mock() + send_socket = mock.Mock() + + # If there's something wrong with the microphone, it will raise an IOError when `read`ing. + stream = mock.Mock() + stream.read = _fake_read_error + + sender = AudioSender(mock_zmq_context) + sender.socket.send = send_socket + sender.audio.open = mock.Mock() + sender.audio.open.return_value = stream + + sender.start() + sender.wait_until_done() + + send_socket.assert_not_called()