Mercurial > libervia-backend
annotate tests/unit/frontends/test_webrtc.py @ 4219:1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
when a peer jid was not in our roster, devices list was not retrieved, resulting in failed
en/decryption. This patch does check it and download missing devices list in necessary.
There is no subscription managed yet, so the list won't be updated in case of new devices,
this should be addressed at some point.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 05 Mar 2024 17:31:36 +0100 |
parents | 13dd5660c28f |
children | dfccc90cacc6 |
rev | line source |
---|---|
4140
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Libervia: an XMPP client |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 from unittest.mock import AsyncMock, MagicMock |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from gi.repository import Gst |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 import pytest |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from libervia.backend.core import exceptions |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from libervia.backend.tools.common import data_format |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from libervia.frontends.tools import webrtc as webrtc_mod |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 @pytest.fixture |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 def host(monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 host = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 host.bridge = AsyncMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 host.app.expand = lambda s: s |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 return host |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 @pytest.fixture(scope="function") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 def webrtc(host): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 """Fixture for WebRTC instantiation.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 profile = "test_profile" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 instance = webrtc_mod.WebRTC(host.bridge, profile) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 instance._set_media_types = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 instance.start_pipeline = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 instance.link_element_or_pad = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 instance.webrtcbin = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 instance.webrtcbin.emit = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 instance.GstSdp_SDPMessage_new_from_text = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 instance.GstWebRTC_WebRTCSessionDescription_new = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 instance.Gst_Promise_new_with_change_func = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 return instance |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 class TestWebRtc: |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 def test_get_payload_types(self, webrtc): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 """The method can identify the correct payload types for video and audio.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 fake_sdpmsg = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 fake_media = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 fake_caps = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 fake_structure = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 # This side effect will return 'fake_video_encoding' first, then |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 # 'fake_audio_encoding'. |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 fake_structure.__getitem__.side_effect = [ |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 "fake_video_encoding", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 "fake_audio_encoding", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 ] |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 fake_caps.get_structure.return_value = fake_structure |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 fake_media.get_format.side_effect = ["webrtc-datachannel", "10", "20"] |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 fake_media.get_caps_from_media.return_value = fake_caps |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 fake_sdpmsg.get_media.return_value = fake_media |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 fake_sdpmsg.medias_len.return_value = 1 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 fake_media.formats_len.return_value = 3 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 result = webrtc.get_payload_types( |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 fake_sdpmsg, "fake_video_encoding", "fake_audio_encoding" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 ) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 expected_result = {"fake_video_encoding": 10, "fake_audio_encoding": 20} |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
80 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 assert result == expected_result |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 def test_on_accepted_call(self, webrtc): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 """The method correctly sets the remote SDP upon acceptance of an outgoing call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 sdp_str = "mock_sdp_string" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 profile_str = "test_profile" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 webrtc.on_accepted_call(sdp_str, profile_str) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 # remote description must be set |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 assert webrtc.webrtcbin.emit.call_count == 1 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 assert webrtc.webrtcbin.emit.call_args[0][0] == "set-remote-description" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 async def test_answer_call(self, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 """The method correctly answers an incoming call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 mock_setup_call = AsyncMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 def mock_get_payload_types(sdpmsg, video_encoding, audio_encoding): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 return {"VP8": 96, "OPUS": 97} |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 monkeypatch.setattr(webrtc, "setup_call", mock_setup_call) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 monkeypatch.setattr(webrtc, "get_payload_types", mock_get_payload_types) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 sdp_str = "mock_sdp_string" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 profile_str = "mock_profile" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 await webrtc.answer_call(sdp_str, profile_str) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 mock_setup_call.assert_called_once_with("responder", audio_pt=97, video_pt=96) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 # remote description must be set |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 assert webrtc.webrtcbin.emit.call_count == 1 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 assert webrtc.webrtcbin.emit.call_args[0][0] == "set-remote-description" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 def test_on_remote_decodebin_stream_video(self, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 """The method correctly handles video streams from the remote decodebin.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 mock_pipeline = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 monkeypatch.setattr(webrtc, "pipeline", mock_pipeline) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 mock_pad = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 mock_caps = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 mock_structure = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 mock_pad.has_current_caps.return_value = True |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 mock_pad.get_current_caps.return_value = mock_caps |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 mock_caps.__len__.return_value = 1 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 mock_caps.__getitem__.return_value = mock_structure |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 mock_structure.get_name.return_value = "video/x-h264" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 # We use non-standard resolution as example to trigger the workaround |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 mock_structure.get_int.side_effect = lambda x: MagicMock( |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 value=990 if x == "width" else 557 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 ) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 webrtc.on_remote_decodebin_stream(None, mock_pad) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 assert webrtc._remote_video_pad == mock_pad |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 mock_pipeline.add.assert_called() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 mock_pad.link.assert_called() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 def test_on_remote_decodebin_stream_audio(self, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 """The method correctly handles audio streams from the remote decodebin.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 mock_pipeline = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 monkeypatch.setattr(webrtc, "pipeline", mock_pipeline) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 mock_pad = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 mock_caps = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 mock_structure = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 mock_pad.has_current_caps.return_value = True |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 mock_pad.get_current_caps.return_value = mock_caps |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 mock_caps.__len__.return_value = 1 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 mock_caps.__getitem__.return_value = mock_structure |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 mock_structure.get_name.return_value = "audio/x-raw" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 webrtc.on_remote_decodebin_stream(None, mock_pad) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 mock_pipeline.add.assert_called() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
159 mock_pad.link.assert_called() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 async def test_setup_call_correct_role(self, host, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 """Roles are set in setup_call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 monkeypatch.setattr(Gst, "parse_launch", MagicMock()) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 monkeypatch.setattr(data_format, "deserialise", MagicMock(return_value=[])) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 await webrtc.setup_call("initiator") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
168 assert webrtc.role == "initiator" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
169 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
170 await webrtc.setup_call("responder") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
171 assert webrtc.role == "responder" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
172 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
173 with pytest.raises(AssertionError): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
174 await webrtc.setup_call("invalid_role") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
175 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
177 async def test_setup_call_test_mode(self, host, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
178 """Test mode use fake video and audio in setup_call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
179 monkeypatch.setattr(data_format, "deserialise", MagicMock(return_value=[])) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
180 monkeypatch.setattr(webrtc, "sources", webrtc_mod.SINKS_TEST) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
181 await webrtc.setup_call("initiator") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
182 assert "videotestsrc" in webrtc.gst_pipe_desc |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
183 assert "audiotestsrc" in webrtc.gst_pipe_desc |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
184 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
185 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
186 async def test_setup_call_normal_mode(self, host, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
187 """Normal mode use real video and audio in setup_call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
188 monkeypatch.setattr(data_format, "deserialise", MagicMock(return_value=[])) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
189 monkeypatch.setattr(webrtc, "sources", webrtc_mod.SOURCES_AUTO) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
190 await webrtc.setup_call("initiator") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
191 assert "v4l2src" in webrtc.gst_pipe_desc |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
192 assert "pulsesrc" in webrtc.gst_pipe_desc |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
193 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
194 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
195 async def test_setup_call_with_stun_and_turn(self, host, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
196 """STUN and TURN server configurations are done in setup_call.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
197 mock_pipeline = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
198 mock_parse_launch = MagicMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
199 mock_parse_launch.return_value = mock_pipeline |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
200 monkeypatch.setattr(Gst, "parse_launch", mock_parse_launch) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
201 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
202 mock_pipeline.get_by_name.return_value = webrtc.webrtcbin |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
203 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
204 mock_external_disco = [ |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
205 {"type": "stun", "transport": "udp", "host": "stun.host", "port": "3478"}, |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
206 { |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 "type": "turn", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 "transport": "udp", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 "host": "turn.host", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 "port": "3478", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 "username": "user", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 "password": "pass", |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 }, |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 ] |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 monkeypatch.setattr( |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 data_format, "deserialise", MagicMock(return_value=mock_external_disco) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 ) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 mock_emit = AsyncMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 monkeypatch.setattr(webrtc.webrtcbin, "emit", mock_emit) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 mock_set_property = AsyncMock() |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 monkeypatch.setattr(webrtc.webrtcbin, "set_property", mock_set_property) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 await webrtc.setup_call("initiator") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 host.bridge.external_disco_get.assert_called_once_with("", webrtc.profile) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 mock_set_property.assert_any_call("stun-server", "stun://stun.host:3478") |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 mock_emit.assert_called_once_with( |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
231 "add-turn-server", "turn://user:pass@turn.host:3478" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 ) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 @pytest.mark.asyncio |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 async def test_setup_call_gstreamer_pipeline_failure(self, webrtc, monkeypatch): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 """Test setup_call method handling Gstreamer pipeline failure.""" |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
237 monkeypatch.setattr(Gst, "parse_launch", lambda _: None) |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 with pytest.raises(exceptions.InternalError): |
13dd5660c28f
tests (unit/frontends): tests for webrtc implementation:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
239 await webrtc.setup_call("initiator") |