Mercurial > libervia-backend
changeset 4065:34c8e7e4fa52
tests (units): tests for plugin XEP-0338:
fix 440
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 30 May 2023 22:23:37 +0200 |
parents | 08ee0e623e7e |
children | e75827204fe0 |
files | tests/unit/test_plugin_xep_0338.py |
diffstat | 1 files changed, 139 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/unit/test_plugin_xep_0338.py Tue May 30 22:23:37 2023 +0200 @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 + +# Libervia: an XMPP client +# Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +from twisted.words.xish import domish + +from sat.plugins.plugin_xep_0338 import NS_JINGLE_GROUPING, XEP_0338 +from sat.tools.xml_tools import parse + + +class TestXEP0338: + def test_parse_sdp(self, host): + """'group' attribute in SDP is correctly parsed""" + xep_0338 = XEP_0338(host) + + call_data = {} + metadata = {} + media_type = "video" + application_data = {} + transport_data = {} + + # SDP: a=group:BUNDLE audio video + attribute = "group" + parts = ["BUNDLE", "audio", "video"] + + xep_0338._parse_sdp_a_trigger( + attribute, + parts, + call_data, + metadata, + media_type, + application_data, + transport_data, + ) + + assert metadata == {"group": {"BUNDLE": ["audio", "video"]}} + + def test_generate_sdp(self, host): + """'group' attribute in SDP is correctly generated""" + xep_0338 = XEP_0338(host) + + session = {"metadata": {"group": {"BUNDLE": ["audio", "video"]}}} + sdp_lines = [] + local = True + + xep_0338._generate_sdp_session_trigger(session, local, sdp_lines) + + assert sdp_lines == ["a=group:BUNDLE audio video"] + + def test_group_building(self, host, client): + """<group> element are built from session in session init trigger""" + xep_0338 = XEP_0338(host) + + session = { + "jingle_elt": domish.Element((None, "jingle")), + "metadata": {"group": {"BUNDLE": ["audio", "video"]}}, + } + content_name = "audio" + media = "audio" + media_data = {} + desc_elt = domish.Element((None, "description")) + + xep_0338._jingle_session_init_trigger( + client, session, content_name, media, media_data, desc_elt + ) + + group_elts = list(session["jingle_elt"].elements(NS_JINGLE_GROUPING, "group")) + assert len(group_elts) == 1 + group_elt = group_elts[0] + assert group_elt["semantics"] == "BUNDLE" + content_names = [ + content_elt["name"] + for content_elt in group_elt.elements(NS_JINGLE_GROUPING, "content") + ] + assert content_names == ["audio", "video"] + + def test_group_parsing(self, host, client): + """<group> elements are correctly parsed in jingle_handler trigger""" + xep_0338 = XEP_0338(host) + + action = xep_0338._j.A_SESSION_INITIATE + session = { + "contents": ["audio", "video"], + "metadata": {}, + } + + raw_xml = """ + <jingle xmlns='urn:xmpp:jingle:1' + action='session-initiate' + initiator='user@example.org/orchard' + sid='a73sjjvkla37jfea'> + <group xmlns='urn:xmpp:jingle:apps:grouping:0' semantics='BUNDLE'> + <content name='audio'/> + <content name='video'/> + </group> + <content creator='initiator' name='audio'> + <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio'/> + </content> + <content creator='initiator' name='video'> + <description xmlns='urn:xmpp:jingle:apps:rtp:1' media='video'/> + </content> + </jingle> + """ + session["jingle_elt"] = parse(raw_xml) + + for content_elt in session["jingle_elt"].elements("urn:xmpp:jingle:1", "content"): + content_name = content_elt["name"] + desc_elt = next( + content_elt.elements("urn:xmpp:jingle:apps:rtp:1", "description") + ) + + xep_0338._jingle_handler_trigger( + client, action, session, content_name, desc_elt + ) + + group_elts = list(session["jingle_elt"].elements(NS_JINGLE_GROUPING, "group")) + assert len(group_elts) == 1 + group_elt = group_elts[0] + assert group_elt["semantics"] == "BUNDLE" + content_names = [ + content_elt["name"] + for content_elt in group_elt.elements(NS_JINGLE_GROUPING, "content") + ] + assert content_names == ["audio", "video"]