test: make audio sender tests pass
This commit was merged in pull request #31.
This commit is contained in:
@@ -33,35 +33,33 @@ def test_no_microphone(zmq_context, mocker):
|
|||||||
mock_info_logger = mocker.patch("robot_interface.endpoints.audio_sender.logger.info")
|
mock_info_logger = mocker.patch("robot_interface.endpoints.audio_sender.logger.info")
|
||||||
mock_choose_mic = mocker.patch("robot_interface.endpoints.audio_sender.choose_mic")
|
mock_choose_mic = mocker.patch("robot_interface.endpoints.audio_sender.choose_mic")
|
||||||
mock_choose_mic.return_value = None
|
mock_choose_mic.return_value = None
|
||||||
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
|
|
||||||
sender = AudioSender(zmq_context)
|
sender = AudioSender(zmq_context)
|
||||||
assert sender.microphone is None
|
assert sender.capturer.microphone is None
|
||||||
|
|
||||||
sender.start()
|
sender.capturer.setup()
|
||||||
assert sender.thread is None
|
|
||||||
mock_info_logger.assert_called()
|
mock_info_logger.assert_called()
|
||||||
|
|
||||||
sender.wait_until_done() # Should return early because we didn't start a thread
|
|
||||||
|
|
||||||
|
|
||||||
def test_unicode_mic_name(zmq_context, mocker):
|
def test_unicode_mic_name(zmq_context, mocker):
|
||||||
"""
|
"""
|
||||||
Tests the robustness of the `AudioSender` when handling microphone names
|
Tests the robustness of the `AudioSender` when handling microphone names
|
||||||
that contain Unicode characters.
|
that contain Unicode characters.
|
||||||
"""
|
"""
|
||||||
mocker.patch("robot_interface.endpoints.audio_sender.threading")
|
|
||||||
mock_choose_mic = mocker.patch("robot_interface.endpoints.audio_sender.choose_mic")
|
mock_choose_mic = mocker.patch("robot_interface.endpoints.audio_sender.choose_mic")
|
||||||
mock_choose_mic.return_value = {"name": u"• Some Unicode name"}
|
mock_choose_mic.return_value = {"name": u"• Some Unicode name", "index": 0L}
|
||||||
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
|
|
||||||
sender = AudioSender(zmq_context)
|
sender = AudioSender(zmq_context)
|
||||||
assert sender.microphone is not None
|
assert sender.capturer.microphone is not None
|
||||||
|
sender.capturer.audio.open = mock.Mock(return_value=mock.Mock())
|
||||||
|
|
||||||
# `.start()` logs the name of the microphone. It should not give an error if it contains Unicode
|
# `.setup()` logs the name of the microphone. It should not give an error if it contains Unicode
|
||||||
# symbols.
|
# symbols.
|
||||||
sender.start()
|
sender.capturer.setup()
|
||||||
assert sender.thread is not None
|
|
||||||
|
|
||||||
sender.wait_until_done() # Should return instantly because we didn't start a real thread
|
|
||||||
|
|
||||||
|
|
||||||
def _fake_read(num_frames):
|
def _fake_read(num_frames):
|
||||||
@@ -79,6 +77,7 @@ def test_sending_audio(mocker):
|
|||||||
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
||||||
|
|
||||||
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
mock_state.exit_event.is_set.side_effect = [False, True]
|
mock_state.exit_event.is_set.side_effect = [False, True]
|
||||||
|
|
||||||
mock_zmq_context = mock.Mock()
|
mock_zmq_context = mock.Mock()
|
||||||
@@ -91,11 +90,11 @@ def test_sending_audio(mocker):
|
|||||||
|
|
||||||
sender = AudioSender(mock_zmq_context)
|
sender = AudioSender(mock_zmq_context)
|
||||||
sender.socket.send = send_socket
|
sender.socket.send = send_socket
|
||||||
sender.audio.open = mock.Mock()
|
sender.capturer.audio.open = mock.Mock()
|
||||||
sender.audio.open.return_value = stream
|
sender.capturer.audio.open.return_value = stream
|
||||||
|
|
||||||
sender.start()
|
sender.start()
|
||||||
sender.wait_until_done()
|
sender.thread.join()
|
||||||
|
|
||||||
send_socket.assert_called()
|
send_socket.assert_called()
|
||||||
|
|
||||||
@@ -108,6 +107,7 @@ def test_no_sending_if_speaking(mocker):
|
|||||||
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
||||||
|
|
||||||
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
mock_state.exit_event.is_set.side_effect = [False, True]
|
mock_state.exit_event.is_set.side_effect = [False, True]
|
||||||
|
|
||||||
mock_zmq_context = mock.Mock()
|
mock_zmq_context = mock.Mock()
|
||||||
@@ -121,11 +121,11 @@ def test_no_sending_if_speaking(mocker):
|
|||||||
|
|
||||||
sender = AudioSender(mock_zmq_context)
|
sender = AudioSender(mock_zmq_context)
|
||||||
sender.socket.send = send_socket
|
sender.socket.send = send_socket
|
||||||
sender.audio.open = mock.Mock()
|
sender.capturer.audio.open = mock.Mock()
|
||||||
sender.audio.open.return_value = stream
|
sender.capturer.audio.open.return_value = stream
|
||||||
|
|
||||||
sender.start()
|
sender.start()
|
||||||
sender.wait_until_done()
|
sender.thread.join()
|
||||||
|
|
||||||
send_socket.assert_not_called()
|
send_socket.assert_not_called()
|
||||||
|
|
||||||
@@ -145,6 +145,7 @@ def test_break_microphone(mocker):
|
|||||||
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
mock_choose_mic.return_value = {"name": u"Some mic", "index": 0L}
|
||||||
|
|
||||||
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
mock_state.exit_event.is_set.side_effect = [False, True]
|
mock_state.exit_event.is_set.side_effect = [False, True]
|
||||||
|
|
||||||
mock_zmq_context = mock.Mock()
|
mock_zmq_context = mock.Mock()
|
||||||
@@ -156,11 +157,11 @@ def test_break_microphone(mocker):
|
|||||||
|
|
||||||
sender = AudioSender(mock_zmq_context)
|
sender = AudioSender(mock_zmq_context)
|
||||||
sender.socket.send = send_socket
|
sender.socket.send = send_socket
|
||||||
sender.audio.open = mock.Mock()
|
sender.capturer.audio.open = mock.Mock()
|
||||||
sender.audio.open.return_value = stream
|
sender.capturer.audio.open.return_value = stream
|
||||||
|
|
||||||
sender.start()
|
sender.start()
|
||||||
sender.wait_until_done()
|
sender.thread.join()
|
||||||
|
|
||||||
send_socket.assert_not_called()
|
send_socket.assert_not_called()
|
||||||
|
|
||||||
@@ -171,6 +172,8 @@ def test_pyaudio_init_failure(mocker, zmq_context):
|
|||||||
"""
|
"""
|
||||||
# Prevent binding the ZMQ socket
|
# Prevent binding the ZMQ socket
|
||||||
mocker.patch("robot_interface.endpoints.audio_sender.AudioSender.create_socket")
|
mocker.patch("robot_interface.endpoints.audio_sender.AudioSender.create_socket")
|
||||||
|
mock_state = mocker.patch("robot_interface.endpoints.audio_sender.state")
|
||||||
|
mock_state.qi_session = None
|
||||||
|
|
||||||
# Simulate PyAudio() failing
|
# Simulate PyAudio() failing
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
@@ -180,5 +183,5 @@ def test_pyaudio_init_failure(mocker, zmq_context):
|
|||||||
|
|
||||||
sender = AudioSender(zmq_context)
|
sender = AudioSender(zmq_context)
|
||||||
|
|
||||||
assert sender.audio is None
|
assert sender.capturer.audio is None
|
||||||
assert sender.microphone is None
|
assert sender.capturer.microphone is None
|
||||||
|
|||||||
Reference in New Issue
Block a user