diff options
author | Philipp Hörist <philipp@hoerist.com> | 2019-06-29 11:59:48 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2019-06-29 11:59:48 +0300 |
commit | f57bd1aef78ee7ddb37045efe7fc81434a2c2114 (patch) | |
tree | b151e044015161f37b3c49a12ec030f5f9944d4d /test | |
parent | f9532825b89abf55d6d41a0b7aa50c91dd4c9250 (diff) |
Add method and tests for entity caps hash computation
Diffstat (limited to 'test')
-rw-r--r-- | test/unit/test_entity_caps.py | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/test/unit/test_entity_caps.py b/test/unit/test_entity_caps.py new file mode 100644 index 0000000..3c913e5 --- /dev/null +++ b/test/unit/test_entity_caps.py @@ -0,0 +1,197 @@ +import unittest + +from nbxmpp.util import compute_caps_hash +from nbxmpp.modules.discovery import parse_disco_info +from nbxmpp.protocol import Iq +from nbxmpp.protocol import DiscoInfoMalformed + +class EntityCaps(unittest.TestCase): + + def test_multiple_field_values(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='el' category='client' name='Ψ 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE' type='hidden'> + <value>urn:xmpp:dataforms:softwareinfo</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + <field var='os'> + <value>Mac</value> + </field> + <field var='os_version'> + <value>10.5.1</value> + </field> + <field var='software'> + <value>Psi</value> + </field> + <field var='software_version'> + <value>0.11</value> + </field> + </x> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + hash_ = compute_caps_hash(info) + self.assertEqual(hash_, 'q07IKJEyjvHSyhy//CH0CxmKi8w=') + + def test_ignore_invalid_forms(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='el' category='client' name='Ψ 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE' type='hidden'> + <value>urn:xmpp:dataforms:softwareinfo</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + <field var='os'> + <value>Mac</value> + </field> + <field var='os_version'> + <value>10.5.1</value> + </field> + <field var='software'> + <value>Psi</value> + </field> + <field var='software_version'> + <value>0.11</value> + </field> + </x> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE'> + <value>urn:xmpp:dataforms:softwareinfo</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + </x> + <x xmlns='jabber:x:data' type='result'> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + </x> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + hash_ = compute_caps_hash(info) + self.assertEqual(hash_, 'q07IKJEyjvHSyhy//CH0CxmKi8w=') + + def test_multiple_form_type_values(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='el' category='client' name='Ψ 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE' type='hidden'> + <value>urn:xmpp:dataforms:softwareinfo</value> + <value>urn:xmpp:dataforms:softwareinfo_test</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + </x> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + with self.assertRaises(DiscoInfoMalformed): + hash_ = compute_caps_hash(info) + + def test_non_unique_form_type_value(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='el' category='client' name='Ψ 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE' type='hidden'> + <value>urn:xmpp:dataforms:softwareinfo</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + </x> + <x xmlns='jabber:x:data' type='result'> + <field var='FORM_TYPE' type='hidden'> + <value>urn:xmpp:dataforms:softwareinfo</value> + </field> + <field var='ip_version'> + <value>ipv4</value> + <value>ipv6</value> + </field> + </x> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + with self.assertRaises(DiscoInfoMalformed): + hash_ = compute_caps_hash(info) + + def test_non_unique_feature(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='el' category='client' name='Ψ 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/muc'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + with self.assertRaises(DiscoInfoMalformed): + hash_ = compute_caps_hash(info) + + def test_non_unique_identity(self): + node = """ + <iq from='benvolio@capulet.lit/230193' id='disco1' to='juliet@capulet.lit/chamber' type='result'> + <query xmlns='http://jabber.org/protocol/disco#info' node='http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w='> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <identity xml:lang='en' category='client' name='Psi 0.11' type='pc'/> + <feature var='http://jabber.org/protocol/caps'/> + <feature var='http://jabber.org/protocol/muc'/> + <feature var='http://jabber.org/protocol/disco#info'/> + <feature var='http://jabber.org/protocol/disco#items'/> + <feature var='http://jabber.org/protocol/muc'/> + </query> + </iq>""" + + info = parse_disco_info(Iq(node=node)) + with self.assertRaises(DiscoInfoMalformed): + hash_ = compute_caps_hash(info) |