Mercurial > libervia-backend
annotate src/test/test_plugin_xep_0033.py @ 1005:b4af31a8a4f2
core (logs): added formatting, name filter and outputs management:
- formatting is inspired from, and use when possible, standard logging. "message", "levelname", and "name" are the only format managed, depending on backend more can be managed (standard backend formats are specified in official python logging doc)
- name filter use regular expressions. It's possible to log only plugins with SAT_LOG_LOGGER="^sat.plugins". To log only XEPs 96 & 65, we can use SAT_LOG_LOGGER='(xep_0095|xep_0065)'
- output management use a particular syntax:
- output handler are name with "//", so far there are "//default" (most of time stderr), "//memory" and "//file"
- options can be specified in parenthesis, e.g. "//memory(50)" mean a 50 lines memory buffer (50 is the current default, so that's equivalent to "//memory")
- several handlers can be specified: "//file(/tmp/sat.log)//default" will use the default logging + a the /tmp/sat.log file
- if there is only one handler, it use the file handler: "/tmp/sat.log" is the same as "//file(/tmp/sat.log)"
- not finished, need more work for twisted and basic backends
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 05 May 2014 18:58:34 +0200 |
parents | c37a24922f27 |
children | 7ea0215e7092 |
rev | line source |
---|---|
787 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 # SAT: a jabber client | |
811 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) |
6 # Copyright (C) 2013, 2014 Adrien Cossa (souliane@mailoo.org) | |
787 | 7 |
8 # This program is free software: you can redistribute it and/or modify | |
9 # it under the terms of the GNU Affero General Public License as published by | |
10 # the Free Software Foundation, either version 3 of the License, or | |
11 # (at your option) any later version. | |
12 | |
13 # This program is distributed in the hope that it will be useful, | |
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 # GNU Affero General Public License for more details. | |
17 | |
18 # You should have received a copy of the GNU Affero General Public License | |
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 | |
21 """ Plugin extended addressing stanzas """ | |
22 | |
23 from constants import Const | |
24 from sat.test import helpers | |
25 from sat.plugins import plugin_xep_0033 as plugin | |
26 from sat.core.sat_main import AbortSendMessage, MessageSentAndStored | |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
27 from sat.core.log import getLogger |
787 | 28 from copy import deepcopy |
29 from twisted.internet import defer | |
30 from wokkel.generic import parseXml | |
31 from twisted.words.protocols.jabber.jid import JID | |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
32 from logging import ERROR |
787 | 33 |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
34 PROFILE = Const.PROFILE[0] |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
35 JID_STR_FROM = Const.JID_STR[1] |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
36 JID_STR_TO = Const.PROFILE_DICT[PROFILE].host |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
37 JID_STR_X_TO = Const.JID_STR[0] |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
38 JID_STR_X_CC = Const.JID_STR[1] |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
39 JID_STR_X_BCC = Const.JID_STR[2] |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
40 |
787 | 41 |
42 class XEP_0033Test(helpers.SatTestCase): | |
43 | |
44 def setUp(self): | |
45 self.host = helpers.FakeSAT() | |
46 self.plugin = plugin.XEP_0033(self.host) | |
47 | |
48 def test_messageReceived(self): | |
49 self.host.memory.init() | |
50 xml = u""" | |
51 <message type="chat" from="%s" to="%s" id="test_1"> | |
52 <body>test</body> | |
53 <addresses xmlns='http://jabber.org/protocol/address'> | |
54 <address type='to' jid='%s'/> | |
55 <address type='cc' jid='%s'/> | |
56 <address type='bcc' jid='%s'/> | |
57 </addresses> | |
58 </message> | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
59 """ % (JID_STR_FROM, JID_STR_TO, JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC) |
787 | 60 stanza = parseXml(xml.encode("utf-8")) |
61 treatments = defer.Deferred() | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
62 self.plugin.messageReceivedTrigger(stanza, treatments, PROFILE) |
787 | 63 data = {'extra': {}} |
64 | |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
65 def cb(data): |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
66 expected = ('to', JID_STR_X_TO, 'cc', JID_STR_X_CC, 'bcc', JID_STR_X_BCC) |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
67 msg = 'Expected: %s\nGot: %s' % (expected, data['extra']['addresses']) |
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
68 self.assertEqual(data['extra']['addresses'], '%s:%s\n%s:%s\n%s:%s\n' % expected, msg) |
787 | 69 |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
70 treatments.addCallback(cb) |
787 | 71 treatments.callback(data) |
72 | |
73 def test_sendMessageTrigger(self): | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
74 mess_data = {"to": JID(JID_STR_TO), |
787 | 75 "type": "chat", |
76 "message": "content", | |
77 "extra": {} | |
78 } | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
79 addresses = ('to', JID_STR_X_TO, 'cc', JID_STR_X_CC, 'bcc', JID_STR_X_BCC) |
787 | 80 mess_data["extra"]["address"] = '%s:%s\n%s:%s\n%s:%s\n' % addresses |
81 original_stanza = u""" | |
82 <message type="chat" from="%s" to="%s" id="test_1"> | |
83 <body>content</body> | |
84 </message> | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
85 """ % (JID_STR_FROM, JID_STR_TO) |
787 | 86 mess_data['xml'] = parseXml(original_stanza.encode("utf-8")) |
87 expected = deepcopy(mess_data['xml']) | |
88 addresses_extra = """ | |
89 <addresses xmlns='http://jabber.org/protocol/address'> | |
90 <address type='%s' jid='%s'/> | |
91 <address type='%s' jid='%s'/> | |
92 <address type='%s' jid='%s'/> | |
93 </addresses>""" % addresses | |
94 addresses_element = parseXml(addresses_extra.encode('utf-8')) | |
95 expected.addChild(addresses_element) | |
96 | |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
97 def assertAddresses(mess_data): |
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
98 """The mess_data that we got here has been modified by self.plugin.sendMessageTrigger, |
787 | 99 check that the addresses element has been added to the stanza.""" |
100 self.assertEqualXML(mess_data['xml'].toXml().encode("utf-8"), expected.toXml().encode("utf-8")) | |
101 | |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
102 def sendMessageErrback(failure, exception_class): |
787 | 103 """If the failure does encapsulate the expected exception, it will be silently |
104 trapped, otherwise it will be re-raised and will make the test fail""" | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
105 failure.trap(exception_class) |
787 | 106 if exception_class == MessageSentAndStored: |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
107 assertAddresses(failure.value.mess_data) |
787 | 108 |
109 def checkSentAndStored(): | |
110 """Check that all the recipients got their messages and that the history has been filled. | |
111 /!\ see the comments in XEP_0033.sendAndStoreMessage""" | |
112 sent = [] | |
113 stored = [] | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
114 for to_s in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): |
787 | 115 to_jid = JID(to_s) |
116 host = JID(to_jid.host) | |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
117 logger = getLogger() |
793
cb2db0d85029
test: silent info/warning that were polluting the output
souliane <souliane@mailoo.org>
parents:
792
diff
changeset
|
118 level = logger.getEffectiveLevel() |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
119 logger.setLevel(ERROR) # remove log.warning pollution |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
120 entities = yield self.host.findFeaturesSet([plugin.NS_ADDRESS], jid_=host, profile_key=PROFILE) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
121 if host in entities: |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
122 if host not in sent: # send the message to the entity offering the feature |
787 | 123 sent.append(host) |
124 stored.append(host) | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
125 stored.append(to_jid) # store in history for each recipient |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
126 else: # feature not supported, use normal behavior |
787 | 127 sent.append(to_jid) |
128 stored.append(to_jid) | |
793
cb2db0d85029
test: silent info/warning that were polluting the output
souliane <souliane@mailoo.org>
parents:
792
diff
changeset
|
129 logger.setLevel(level) |
789
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
130 msg = "/!\ see the comments in XEP_0033.sendAndStoreMessage" |
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
131 self.assertEqualUnsortedList(self.host.sent_messages, sent, msg) |
0cb423500fbb
test: use the SatTestCase methods instead of builtin "assert" in tests for memory, plugin xep-0033
souliane <souliane@mailoo.org>
parents:
787
diff
changeset
|
132 self.assertEqualUnsortedList(self.host.stored_messages, stored, msg) |
787 | 133 |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
134 def trigger(data, exception): |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
135 """Execute self.plugin.sendMessageTrigger with a different logging |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
136 level to not pollute the output, then check that the plugin did its |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
137 job. It should abort sending the message or add the extended |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
138 addressing information to the stanza. |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
139 @param data: the data to be processed by self.plugin.sendMessageTrigger |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
140 @param exception: AbortSendMessage or MessageSentAndStored |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
141 """ |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
142 logger = getLogger() |
793
cb2db0d85029
test: silent info/warning that were polluting the output
souliane <souliane@mailoo.org>
parents:
792
diff
changeset
|
143 level = logger.getEffectiveLevel() |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
144 logger.setLevel(ERROR) # remove log.warning pollution |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
145 pre_treatments = defer.Deferred() |
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
146 post_treatments = defer.Deferred() |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
147 self.plugin.sendMessageTrigger(data, pre_treatments, post_treatments, PROFILE) |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
148 post_treatments.callback(data) |
793
cb2db0d85029
test: silent info/warning that were polluting the output
souliane <souliane@mailoo.org>
parents:
792
diff
changeset
|
149 logger.setLevel(level) |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
150 post_treatments.addCallbacks(assertAddresses, lambda failure: sendMessageErrback(failure, exception)) |
793
cb2db0d85029
test: silent info/warning that were polluting the output
souliane <souliane@mailoo.org>
parents:
792
diff
changeset
|
151 |
787 | 152 # feature is not supported, abort the message |
153 self.host.memory.init() | |
154 data = deepcopy(mess_data) | |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
155 trigger(data, AbortSendMessage) |
787 | 156 |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
157 # feature is supported by the main target server |
787 | 158 self.host.init() |
159 self.host.memory.init() | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
160 self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
161 data = deepcopy(mess_data) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
162 trigger(data, MessageSentAndStored) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
163 checkSentAndStored() |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
164 |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
165 # feature is supported by all target servers |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
166 self.host.init() |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
167 self.host.memory.init() |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
168 self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
169 for dest in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
170 self.host.addFeature(JID(JID(dest).host), plugin.NS_ADDRESS, PROFILE) |
787 | 171 data = deepcopy(mess_data) |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
172 trigger(data, MessageSentAndStored) |
787 | 173 checkSentAndStored() |
174 | |
175 # check that a wrong recipient entity is fixed by the backend | |
176 self.host.init() | |
177 self.host.memory.init() | |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
178 self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
179 for dest in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): |
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
180 self.host.addFeature(JID(JID(dest).host), plugin.NS_ADDRESS, PROFILE) |
787 | 181 data = deepcopy(mess_data) |
999
c37a24922f27
plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents:
997
diff
changeset
|
182 data["to"] = JID(JID_STR_X_TO) |
924
861593a5652b
test: fix tests fo plugins XEP-0033 and XEP-0085
souliane <souliane@mailoo.org>
parents:
915
diff
changeset
|
183 trigger(data, MessageSentAndStored) |
787 | 184 checkSentAndStored() |