diff options
author | Will Thompson <will.thompson@collabora.co.uk> | 2012-11-27 18:40:29 +0000 |
---|---|---|
committer | Will Thompson <will.thompson@collabora.co.uk> | 2012-12-06 16:29:05 +0000 |
commit | 9687c65355f885bc17d7f5f6c849c5f333397021 (patch) | |
tree | 0b6cc7317f2ac7e1a2ad9b9b505eee662c02a77e | |
parent | 86ba1bdac4b88ae23b5f37e349afabacb840f03c (diff) |
Regression test for malformed privacy list replies
-rw-r--r-- | tests/twisted/presence/invisible_xep_0126.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/tests/twisted/presence/invisible_xep_0126.py b/tests/twisted/presence/invisible_xep_0126.py index fd39ef855..7dbfb36b7 100644 --- a/tests/twisted/presence/invisible_xep_0126.py +++ b/tests/twisted/presence/invisible_xep_0126.py @@ -18,6 +18,7 @@ import ns import constants as cs from twisted.words.xish import xpath, domish from invisible_helper import ManualPrivacyListStream +from functools import partial def test_create_invisible_list(q, bus, conn, stream): conn.SimplePresence.SetPresence("away", "") @@ -111,7 +112,8 @@ def test_invisible_on_connect_fail_no_list(q, bus, conn, stream): assertDoesNotContain("hidden", conn.Properties.Get(cs.CONN_IFACE_SIMPLE_PRESENCE, "Statuses")) -def test_invisible_on_connect_fail_invalid_list(q, bus, conn, stream): +def test_invisible_on_connect_fail_invalid_list(q, bus, conn, stream, + really_invalid=False): props = conn.Properties.GetAll(cs.CONN_IFACE_SIMPLE_PRESENCE) assertNotEquals({}, props['Statuses']) @@ -129,10 +131,15 @@ def test_invisible_on_connect_fail_invalid_list(q, bus, conn, stream): list_node = xpath.queryForNodes('//list', get_list.query)[0] assertEquals('invisible', list_node['name']) - stream.send_privacy_list(get_list.stanza, - [elem('item', type='jid', value='tybalt@example.com', action='allow', - order='1')(elem('presence-out')), - elem('item', action='deny', order='2')(elem('presence-out'))]) + if really_invalid: + # At one point Gabble would crash if the reply was of type 'result' but + # wasn't well-formed. + acknowledge_iq(stream, get_list.stanza) + else: + stream.send_privacy_list(get_list.stanza, + [elem('item', type='jid', value='tybalt@example.com', action='allow', + order='1')(elem('presence-out')), + elem('item', action='deny', order='2')(elem('presence-out'))]) create_list = q.expect('stream-iq', query_ns=ns.PRIVACY, iq_type='set') created = xpath.queryForNodes('//list', create_list.stanza)[0] @@ -348,6 +355,9 @@ if __name__ == '__main__': protocol=ManualPrivacyListStream, do_connect=False) exec_test(test_invisible_on_connect_fail_invalid_list, protocol=ManualPrivacyListStream, do_connect=False) + exec_test(partial(test_invisible_on_connect_fail_invalid_list, + really_invalid=True), + protocol=ManualPrivacyListStream, do_connect=False) exec_test(test_privacy_list_push_valid, protocol=ManualPrivacyListStream, do_connect=False) exec_test(test_privacy_list_push_conflict, protocol=ManualPrivacyListStream, |