annotate libervia/backend/test/test_plugin_xep_0334.py @ 4309:b56b1eae7994

component email gateway: add multicasting: XEP-0033 multicasting is now supported both for incoming and outgoing messages. XEP-0033 metadata are converted to suitable Email headers and vice versa. Email address and JID are both supported, and delivery is done by the gateway when suitable on incoming messages. rel 450
author Goffi <goffi@goffi.org>
date Thu, 26 Sep 2024 16:12:01 +0200
parents 0d7bb4df2343
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
3
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT: a jabber client
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
7
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # This program is free software: you can redistribute it and/or modify
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
11 # (at your option) any later version.
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
12
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # This program is distributed in the hope that it will be useful,
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
16 # GNU Affero General Public License for more details.
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
17
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
20
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
21 """ Plugin XEP-0334 """
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
22
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
23 from .constants import Const as C
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
24 from libervia.backend.test import helpers
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
25 from libervia.backend.plugins.plugin_xep_0334 import XEP_0334
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from twisted.internet import defer
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
27 from wokkel.generic import parseXml
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
28 from libervia.backend.core import exceptions
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
29
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
30 HINTS = ("no-permanent-storage", "no-storage", "no-copy")
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
31
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
32
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
33 class XEP_0334Test(helpers.SatTestCase):
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
34 def setUp(self):
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
35 self.host = helpers.FakeSAT()
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
36 self.plugin = XEP_0334(self.host)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
37
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
38 def test_message_send_trigger(self):
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
39 template_xml = """
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
40 <message
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
41 from='romeo@montague.net/orchard'
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
42 to='juliet@capulet.com'
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
43 type='chat'>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
44 <body>text</body>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
45 %s
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
46 </message>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
47 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
48 original_xml = template_xml % ""
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
49
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
50 d_list = []
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
51
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
52 def cb(data, expected_xml):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
53 result_xml = data["xml"].toXml().encode("utf-8")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
54 self.assert_equal_xml(result_xml, expected_xml, True)
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
55
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
56 for key in HINTS + ("", "dummy_hint"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
57 mess_data = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
58 "xml": parseXml(original_xml.encode("utf-8")),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
59 "extra": {key: True},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
60 }
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
61 treatments = defer.Deferred()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
62 self.plugin.messageSendTrigger(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
63 self.host.get_client(C.PROFILE[0]),
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
64 mess_data,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
65 defer.Deferred(),
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
66 treatments,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
67 )
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
68 if treatments.callbacks: # the trigger added a callback
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
69 expected_xml = template_xml % ('<%s xmlns="urn:xmpp:hints"/>' % key)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
70 treatments.addCallback(cb, expected_xml)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
71 treatments.callback(mess_data)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
72 d_list.append(treatments)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
73
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
74 return defer.DeferredList(d_list)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
75
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
76 def test_message_received_trigger(self):
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
77 template_xml = """
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
78 <message
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
79 from='romeo@montague.net/orchard'
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
80 to='juliet@capulet.com'
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
81 type='chat'>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
82 <body>text</body>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
83 %s
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
84 </message>
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
85 """
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
86
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
87 def cb(__):
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
88 raise Exception("Errback should not be ran instead of callback!")
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
89
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
90 def eb(failure):
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
91 failure.trap(exceptions.SkipHistory)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
92
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
93 d_list = []
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
94
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
95 for key in HINTS + ("dummy_hint",):
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
96 message = parseXml(template_xml % ('<%s xmlns="urn:xmpp:hints"/>' % key))
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
97 post_treat = defer.Deferred()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
98 self.plugin.message_received_trigger(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
99 self.host.get_client(C.PROFILE[0]), message, post_treat
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
100 )
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
101 if post_treat.callbacks:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
102 assert key in ("no-permanent-storage", "no-storage")
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
103 post_treat.addCallbacks(cb, eb)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
104 post_treat.callback(None)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
105 d_list.append(post_treat)
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
106 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
107 assert key not in ("no-permanent-storage", "no-storage")
1279
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
108
d84905c3e124 plugin XEP-0334: first draft
souliane <souliane@mailoo.org>
parents:
diff changeset
109 return defer.DeferredList(d_list)