[telepathy-gabble/telepathy-gabble-0.8] Factor a lot of useful code out of the caps-cache into the caps_helper
Sjoerd Simons
sjoerd.simons at collabora.co.uk
Mon Sep 28 13:17:46 PDT 2009
---
tests/twisted/caps/caps-cache.py | 84 +++++++++++--------------------------
tests/twisted/caps_helper.py | 47 +++++++++++++++++++++-
2 files changed, 71 insertions(+), 60 deletions(-)
diff --git a/tests/twisted/caps/caps-cache.py b/tests/twisted/caps/caps-cache.py
index bb379d5..a654d74 100644
--- a/tests/twisted/caps/caps-cache.py
+++ b/tests/twisted/caps/caps-cache.py
@@ -12,6 +12,7 @@ import constants as cs
import ns
from caps_helper import (
compute_caps_hash, make_caps_disco_reply, fake_client_dataforms,
+ presence_and_disco, send_presence, expect_disco, send_disco_reply
)
client = 'http://telepathy.freedesktop.org/fake-client'
@@ -21,50 +22,6 @@ features = [
'http://www.google.com/transport/p2p',
]
-def presence_and_disco(q, conn, stream, contact, disco,
- caps, dataforms={}, initial=True):
- h = send_presence(q, conn, stream, contact, caps, initial=initial)
-
- if disco:
- stanza = expect_disco(q, contact, caps)
- send_disco_reply(stream, stanza, dataforms)
-
- expect_caps(q, conn, h)
-
-def send_presence(q, conn, stream, contact, caps, initial=True):
- h = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
-
- if initial:
- stream.send(make_presence(contact, status='hello'))
-
- q.expect_many(
- EventPattern('dbus-signal', signal='PresenceUpdate',
- args=[{h:
- (0L, {u'available': {'message': 'hello'}})}]),
- EventPattern('dbus-signal', signal='PresencesChanged',
- args=[{h:
- (2, u'available', 'hello')}]))
-
- # no special capabilities
- assertEquals([(h, cs.CHANNEL_TYPE_TEXT, 3, 0)],
- conn.Capabilities.GetCapabilities([h]))
-
- # send updated presence with Jingle caps info
- stream.send(make_presence(contact, status='hello', caps=caps))
-
- return h
-
-def expect_disco(q, contact, caps):
- # Gabble looks up our capabilities
- event = q.expect('stream-iq', to=contact, query_ns=ns.DISCO_INFO)
- assertEquals(client + '#' + caps['ver'], event.query['node'])
-
- return event.stanza
-
-def send_disco_reply(stream, stanza, dataforms={}):
- # send good reply
- result = make_caps_disco_reply(stream, stanza, features, dataforms)
- stream.send(result)
def expect_caps(q, conn, h):
# we can now do audio calls
@@ -75,6 +32,12 @@ def check_caps(conn, h):
assertContains((h, cs.CHANNEL_TYPE_STREAMED_MEDIA, 3, cs.MEDIA_CAP_AUDIO),
conn.Capabilities.GetCapabilities([h]))
+def update_contact_caps(q, conn, stream, contact, caps, disco = True,
+ dataforms = {}, initial = True):
+ h = presence_and_disco (q, conn, stream, contact,
+ disco, client, caps, features, dataforms=dataforms, initial = initial)
+ expect_caps (q, conn, h)
+
def test(q, bus, conn, stream):
conn.Connect()
q.expect('dbus-signal', signal='StatusChanged',
@@ -85,11 +48,11 @@ def test(q, bus, conn, stream):
'ver': '0.1',
}
- presence_and_disco(q, conn, stream, 'bob1 at foo.com/Foo', True, caps)
- presence_and_disco(q, conn, stream, 'bob2 at foo.com/Foo', True, caps)
+ update_contact_caps(q, conn, stream, 'bob1 at foo.com/Foo', caps)
+ update_contact_caps(q, conn, stream, 'bob2 at foo.com/Foo', caps)
# Meredith signs in from one resource.
- presence_and_disco(q, conn, stream, 'meredith at foo.com/One', True, caps)
+ update_contact_caps(q, conn, stream, 'meredith at foo.com/One', caps)
# Meredith signs in from another resource with the same client. We don't
# need to disco her, even though we don't trust this caps node in general
# yet, because she's already told us what it means.
@@ -103,25 +66,28 @@ def test(q, bus, conn, stream):
# Jens signs in from one resource, which is slow to answer the disco query.
jens_one = 'jens at foo.com/One'
j = send_presence(q, conn, stream, jens_one, caps)
- j_stanza = expect_disco(q, jens_one, caps)
+ j_stanza = expect_disco(q, jens_one, client, caps)
# Jens now signs in elsewhere with the same client; we disco it (maybe
# it'll reply sooner? Maybe his first client's network connection went away
# and the server hasn't noticed yet?) and it replies immediately.
- presence_and_disco(q, conn, stream, 'jens at foo.com/Two', True, caps,
+ update_contact_caps (q, conn, stream, 'jens at foo.com/Two', caps,
initial=False)
# Jens' first client replies. We don't expect any caps changes here, and
# this shouldn't count as a second point towards the five we need to trust
# this caps node.
- send_disco_reply(stream, j_stanza)
+ send_disco_reply(stream, j_stanza, features)
+ check_caps (conn, j)
- presence_and_disco(q, conn, stream, 'bob5 at foo.com/Foo', True, caps)
+ update_contact_caps (q, conn, stream, 'bob5 at foo.com/Foo', caps)
# Now five distinct contacts have told us what this caps node means, we
# trust it.
- presence_and_disco(q, conn, stream, 'bob6 at foo.com/Foo', False, caps)
- presence_and_disco(q, conn, stream, 'bob7 at foo.com/Foo', False, caps)
+ update_contact_caps (q, conn, stream, 'bob6 at foo.com/Foo', caps,
+ disco = False)
+ update_contact_caps (q, conn, stream, 'bob7 at foo.com/Foo', caps,
+ disco = False)
caps = {
'node': client,
@@ -129,14 +95,14 @@ def test(q, bus, conn, stream):
'hash': 'sha-1',
}
- presence_and_disco(q, conn, stream, 'bilbo1 at foo.com/Foo', True, caps,
- fake_client_dataforms)
+ update_contact_caps(q, conn, stream, 'bilbo1 at foo.com/Foo',
+ caps, dataforms = fake_client_dataforms)
# We can verify the reply for these caps against the hash, and thus never
# need to disco it again.
- presence_and_disco(q, conn, stream, 'bilbo2 at foo.com/Foo', False, caps,
- fake_client_dataforms)
- presence_and_disco(q, conn, stream, 'bilbo3 at foo.com/Foo', False, caps,
- fake_client_dataforms)
+ update_contact_caps(q, conn, stream, 'bilbo2 at foo.com/Foo', caps,
+ disco = False, dataforms = fake_client_dataforms)
+ update_contact_caps(q, conn, stream, 'bilbo3 at foo.com/Foo', caps,
+ disco = False, dataforms = fake_client_dataforms)
if __name__ == '__main__':
exec_test(test)
diff --git a/tests/twisted/caps_helper.py b/tests/twisted/caps_helper.py
index 1a2c83b..c7a3ed8 100644
--- a/tests/twisted/caps_helper.py
+++ b/tests/twisted/caps_helper.py
@@ -4,7 +4,7 @@ import base64
import dbus
from twisted.words.xish import domish, xpath
-from gabbletest import make_result_iq
+from gabbletest import make_result_iq, make_presence
from servicetest import EventPattern, assertEquals, assertContains, \
assertDoesNotContain
@@ -235,6 +235,51 @@ def caps_contain(event, cap):
return False
return var == cap
+def presence_and_disco(q, conn, stream, contact, disco,
+ client, caps, features, dataforms={}, initial=True):
+ h = send_presence(q, conn, stream, contact, caps, initial=initial)
+
+ if disco:
+ stanza = expect_disco(q, contact, client, caps)
+ send_disco_reply(stream, stanza, features, dataforms)
+
+ return h
+
+def send_presence(q, conn, stream, contact, caps, initial=True):
+ h = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
+
+ if initial:
+ stream.send(make_presence(contact, status='hello'))
+
+ q.expect_many(
+ EventPattern('dbus-signal', signal='PresenceUpdate',
+ args=[{h:
+ (0L, {u'available': {'message': 'hello'}})}]),
+ EventPattern('dbus-signal', signal='PresencesChanged',
+ args=[{h:
+ (2, u'available', 'hello')}]))
+
+ # no special capabilities
+ assertEquals([(h, cs.CHANNEL_TYPE_TEXT, 3, 0)],
+ conn.Capabilities.GetCapabilities([h]))
+
+ # send updated presence with caps info
+ stream.send(make_presence(contact, status='hello', caps=caps))
+
+ return h
+
+def expect_disco(q, contact, client, caps):
+ # Gabble looks up our capabilities
+ event = q.expect('stream-iq', to=contact, query_ns=ns.DISCO_INFO)
+ assertEquals(client + '#' + caps['ver'], event.query['node'])
+
+ return event.stanza
+
+def send_disco_reply(stream, stanza, features, dataforms={}):
+ # send good reply
+ result = make_caps_disco_reply(stream, stanza, features, dataforms)
+ stream.send(result)
+
if __name__ == '__main__':
# example from XEP-0115
assert compute_caps_hash(['client/pc//Exodus 0.9.1'],
--
1.5.6.5
More information about the telepathy-commits
mailing list