annotate tests/unit/test_plugin_xep_0320.py @ 4306:94e0968987cd

plugin XEP-0033: code modernisation, improve delivery, data validation: - Code has been rewritten using Pydantic models and `async` coroutines for data validation and cleaner element parsing/generation. - Delivery has been completely rewritten. It now works even if server doesn't support multicast, and send to local multicast service first. Delivering to local multicast service first is due to bad support of XEP-0033 in server (notably Prosody which has an incomplete implementation), and the current impossibility to detect if a sub-domain service handles fully multicast or only for local domains. This is a workaround to have a good balance between backward compatilibity and use of bandwith, and to make it work with the incoming email gateway implementation (the gateway will only deliver to entities of its own domain). - disco feature checking now uses `async` corountines. `host` implementation still use Deferred return values for compatibility with legacy code. rel 450
author Goffi <goffi@goffi.org>
date Thu, 26 Sep 2024 16:12:01 +0200
parents f1d0cde61af7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4049
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Libervia: an XMPP client
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org)
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from twisted.words.xish import domish
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4049
diff changeset
21 from libervia.backend.plugins.plugin_xep_0320 import NS_JINGLE_DTLS, XEP_0320
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4049
diff changeset
22 from libervia.backend.tools import xml_tools
4049
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
23
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
24
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 class TestXEP0320:
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 def test_parse_transport_trigger(self, host):
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 """<transport> element is parsed correctly in trigger"""
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 xep_0320 = XEP_0320(host)
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 transport_elt = xml_tools.parse(
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 f"<transport><fingerprint xmlns='{NS_JINGLE_DTLS}' hash='sha-256' "
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 "setup='active'>6D:8F:6A:53:A3:7E:10:B2:58:16:AB:A3:92:6F:8A:5B:2D:55:1C:FB:"
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 "2F:E3:6E:94:FE:4F:4E:FE:D4:77:49:B6</fingerprint></transport>"
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 )
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
35
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 ice_data = {}
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 result = xep_0320._parse_transport_trigger(transport_elt, ice_data)
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
38
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 expected_ice_data = {
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 "fingerprint": {
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 "hash": "sha-256",
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 "setup": "active",
4285
f1d0cde61af7 tests (unit): fix tests + black reformatting.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
43 "fingerprint": "6D:8F:6A:53:A3:7E:10:B2:58:16:AB:A3:92:6F:8A:5B:2D:55:1C:"
4049
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 "FB:2F:E3:6E:94:FE:4F:4E:FE:D4:77:49:B6",
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 },
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 }
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
47
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 assert ice_data == expected_ice_data
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 assert result
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
50
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 def test_build_transport(self, host):
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 """<transport> element is buid correctly in trigger"""
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 xep_0320 = XEP_0320(host)
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
54
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 transport_elt = domish.Element((None, "transport"))
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
56
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 ice_data = {
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 "fingerprint": {
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 "hash": "sha-256",
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 "setup": "active",
4285
f1d0cde61af7 tests (unit): fix tests + black reformatting.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
61 "fingerprint": "6D:8F:6A:53:A3:7E:10:B2:58:16:AB:A3:92:6F:8A:5B:2D:55:1C:"
4049
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 "FB:2F:E3:6E:94:FE:4F:4E:FE:D4:77:49:B6",
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 },
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 }
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
65
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 result = xep_0320._build_transport_trigger(transport_elt, ice_data)
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
67
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 expected_transport_elt = xml_tools.parse(
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 f"<transport><fingerprint xmlns='{NS_JINGLE_DTLS}' hash='sha-256' "
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 "setup='active'>6D:8F:6A:53:A3:7E:10:B2:58:16:AB:A3:92:6F:8A:5B:2D:55:1C:FB:"
4285
f1d0cde61af7 tests (unit): fix tests + black reformatting.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
71 "2F:E3:6E:94:FE:4F:4E:FE:D4:77:49:B6</fingerprint></transport>"
f1d0cde61af7 tests (unit): fix tests + black reformatting.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
72 ""
4049
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 )
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
74
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 assert transport_elt.toXml() == expected_transport_elt.toXml()
b56bf0c6c064 tests (unit): XEP-0320 tests:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 assert result