[telepathy-gabble/master] Port jingle/hold-av.py to JingleTest2

Will Thompson will.thompson at collabora.co.uk
Sat Mar 28 03:28:41 PDT 2009


For GTalk, it just checks that asking for a video stream fails, and then
ends.
---
 tests/twisted/jingle/hold-av.py     |  140 ++++++++++++++---------------------
 tests/twisted/jingle/jingletest2.py |   38 ++++++++--
 2 files changed, 88 insertions(+), 90 deletions(-)

diff --git a/tests/twisted/jingle/hold-av.py b/tests/twisted/jingle/hold-av.py
index 841ad48..15967ef 100644
--- a/tests/twisted/jingle/hold-av.py
+++ b/tests/twisted/jingle/hold-av.py
@@ -5,67 +5,41 @@ Test the Hold API.
 from gabbletest import exec_test, make_result_iq, acknowledge_iq, sync_stream
 from servicetest import make_channel_proxy, unwrap, tp_path_prefix, \
         call_async, EventPattern
-import jingletest
 import gabbletest
 import dbus
 import time
 
 import constants as cs
 
+from jingletest2 import JingleTest2, test_all_dialects
 
-MEDIA_STREAM_TYPE_AUDIO = 0
-MEDIA_STREAM_TYPE_VIDEO = 0
-# Hold states
-S_UNHELD = 0
-S_HELD = 1
-S_PENDING_HOLD = 2
-S_PENDING_UNHOLD = 3
-# Reasons
-R_NONE = 0
-R_REQUESTED = 1
-R_RESOURCE_NOT_AVAILABLE = 2
+def test(jp, q, bus, conn, stream):
+    jt = JingleTest2(jp, conn, q, stream, 'test at localhost', 'foo at bar.com/Foo')
 
+    jt.prepare()
 
-def test(q, bus, conn, stream):
-    jt = jingletest.JingleTest(stream, 'test at localhost', 'foo at bar.com/Foo')
+    self_handle = conn.GetSelfHandle()
+    handle = conn.RequestHandles(cs.HT_CONTACT, [jt.peer])[0]
 
-    # If we need to override remote caps, feats, codecs or caps,
-    # this is a good time to do it
-
-    # Connecting
-    conn.Connect()
-
-    q.expect('dbus-signal', signal='StatusChanged', args=[1, 1])
-    q.expect('stream-authenticated')
-    q.expect('dbus-signal', signal='PresenceUpdate',
-        args=[{1L: (0L, {u'available': {}})}])
-    q.expect('dbus-signal', signal='StatusChanged', args=[0, 1])
-
-    # We need remote end's presence for capabilities
-    jt.send_remote_presence()
-
-    # Gabble doesn't trust it, so makes a disco
-    event = q.expect('stream-iq', query_ns='http://jabber.org/protocol/disco#info',
-             to='foo at bar.com/Foo')
-
-    jt.send_remote_disco_reply(event.stanza)
-
-    # Force Gabble to process the caps before calling RequestChannel
-    sync_stream(q, stream)
-
-    handle = conn.RequestHandles(1, [jt.remote_jid])[0]
-
-    path = conn.RequestChannel(
-        'org.freedesktop.Telepathy.Channel.Type.StreamedMedia',
-        1, handle, True)
+    path = conn.RequestChannel(cs.CHANNEL_TYPE_STREAMED_MEDIA,
+        cs.HT_CONTACT, handle, True)
 
     signalling_iface = make_channel_proxy(conn, path, 'Channel.Interface.MediaSignalling')
     media_iface = make_channel_proxy(conn, path, 'Channel.Type.StreamedMedia')
     group_iface = make_channel_proxy(conn, path, 'Channel.Interface.Group')
     hold_iface = make_channel_proxy(conn, path, 'Channel.Interface.Hold')
 
-    media_iface.RequestStreams(handle, [MEDIA_STREAM_TYPE_AUDIO,
-        MEDIA_STREAM_TYPE_VIDEO])
+    call_async(q, media_iface, 'RequestStreams', handle,
+        [cs.MEDIA_STREAM_TYPE_AUDIO, cs.MEDIA_STREAM_TYPE_VIDEO])
+
+    if jp.is_gtalk():
+        # Video on GTalk? Not so much.
+        e = q.expect('dbus-error', method='RequestStreams')
+        # The spec and implemention say this should be NotAvailable, but wjt
+        # thinks it should be NotCapable. The spec bug is #20920.
+        name = e.error.get_dbus_name()
+        #assert name == cs.NOT_CAPABLE, name
+        return
 
     # S-E gets notified about new session handler, and calls Ready on it
     e = q.expect('dbus-signal', signal='NewSessionHandler')
@@ -99,19 +73,19 @@ def test(q, bus, conn, stream):
     video_stream_handler.Ready(jt.get_video_codecs_dbus())
     video_stream_handler.StreamState(cs.MEDIA_STREAM_STATE_CONNECTED)
 
-    e = q.expect('stream-iq')
-    assert e.query.name == 'jingle'
-    assert e.query['action'] == 'session-initiate'
-    stream.send(gabbletest.make_result_iq(stream, e.stanza))
+    e = q.expect('stream-iq', predicate=lambda e:
+        jp.match_jingle_action(e.query, 'session-initiate'))
+    stream.send(make_result_iq(stream, e.stanza))
 
-    jt.outgoing_call_reply(e.query['sid'], True)
+    jt.set_sid_from_initiate(e.query)
+    jt.accept(with_video=True)
 
     q.expect('stream-iq', iq_type='result')
 
     # ---- Test 1: GetHoldState returns unheld and unhold is a no-op ----
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_UNHELD, hold_state
+    assert hold_state[0] == cs.HS_UNHELD, hold_state
     hold_iface.RequestHold(False)
 
     # ---- Test 2: successful hold ----
@@ -119,7 +93,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', True)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -129,13 +103,13 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_REQUESTED]),
+            args=[cs.HS_HELD, cs.HSR_REQUESTED]),
         )
 
     # ---- Test 3: GetHoldState returns held and hold is a no-op ----
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_HELD, hold_state
+    assert hold_state[0] == cs.HS_HELD, hold_state
     hold_iface.RequestHold(True)
 
     # ---- Test 4: successful unhold ----
@@ -143,7 +117,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -153,26 +127,26 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_UNHELD, R_REQUESTED]),
+            args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
         )
 
     # ---- Test 5: GetHoldState returns False and unhold is a no-op ----
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_UNHELD, hold_state
+    assert hold_state[0] == cs.HS_UNHELD, hold_state
     hold_iface.RequestHold(False)
 
     # ---- Test 6: 3 parallel calls to hold ----
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_UNHELD, hold_state
+    assert hold_state[0] == cs.HS_UNHELD, hold_state
 
     call_async(q, hold_iface, 'RequestHold', True)
     call_async(q, hold_iface, 'RequestHold', True)
     call_async(q, hold_iface, 'RequestHold', True)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -182,7 +156,7 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_REQUESTED]),
+            args=[cs.HS_HELD, cs.HSR_REQUESTED]),
         )
 
     # ---- Test 7: 3 parallel calls to unhold ----
@@ -192,7 +166,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -202,24 +176,24 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_UNHELD, R_REQUESTED]),
+            args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
         )
 
     # ---- Test 8: hold, then change our minds before s-e has responded ----
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_UNHELD, hold_state
+    assert hold_state[0] == cs.HS_UNHELD, hold_state
 
     call_async(q, hold_iface, 'RequestHold', True)
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         )
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         )
 
@@ -230,11 +204,11 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_UNHELD, R_REQUESTED]),
+            args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
         )
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_UNHELD, hold_state
+    assert hold_state[0] == cs.HS_UNHELD, hold_state
 
     # ---- Test 9: unhold, then change our minds before s-e has responded ----
 
@@ -242,7 +216,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', True)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -251,24 +225,24 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_REQUESTED]),
+            args=[cs.HS_HELD, cs.HSR_REQUESTED]),
         )
 
     # Actually do test 9
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_HELD, hold_state
+    assert hold_state[0] == cs.HS_HELD, hold_state
 
     call_async(q, hold_iface, 'RequestHold', False)
     call_async(q, hold_iface, 'RequestHold', True)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         )
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         )
 
@@ -279,18 +253,18 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_REQUESTED]),
+            args=[cs.HS_HELD, cs.HSR_REQUESTED]),
         )
 
     hold_state = hold_iface.GetHoldState()
-    assert hold_state[0] == S_HELD, hold_state
+    assert hold_state[0] == cs.HS_HELD, hold_state
 
     # ---- Test 10: attempting to unhold fails (both streams) ----
 
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -301,7 +275,7 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='UnholdFailure', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+            args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
         )
 
     # ---- Test 11: attempting to unhold fails (first stream) ----
@@ -309,7 +283,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -319,7 +293,7 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='UnholdFailure', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+            args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
         )
 
     # ---- Test 12: attempting to unhold partially fails, so roll back ----
@@ -327,7 +301,7 @@ def test(q, bus, conn, stream):
     call_async(q, hold_iface, 'RequestHold', False)
     q.expect_many(
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_UNHOLD, R_REQUESTED]),
+            args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
         EventPattern('dbus-return', method='RequestHold', value=()),
         )
@@ -341,7 +315,7 @@ def test(q, bus, conn, stream):
         EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
         EventPattern('dbus-return', method='UnholdFailure', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_PENDING_HOLD, R_RESOURCE_NOT_AVAILABLE]),
+            args=[cs.HS_PENDING_HOLD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
         )
 
     call_async(q, audio_stream_handler, 'HoldState', True)
@@ -349,12 +323,12 @@ def test(q, bus, conn, stream):
     q.expect_many(
         EventPattern('dbus-return', method='HoldState', value=()),
         EventPattern('dbus-signal', signal='HoldStateChanged',
-            args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+            args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
         )
 
     # ---- The end ----
 
-    group_iface.RemoveMembers([dbus.UInt32(1)], 'closed')
+    group_iface.RemoveMembers([self_handle], 'closed')
 
     # Test completed, close the connection
 
@@ -367,5 +341,5 @@ def test(q, bus, conn, stream):
 
 
 if __name__ == '__main__':
-    exec_test(test)
+    test_all_dialects(test)
 
diff --git a/tests/twisted/jingle/jingletest2.py b/tests/twisted/jingle/jingletest2.py
index 215e764..5daeb45 100644
--- a/tests/twisted/jingle/jingletest2.py
+++ b/tests/twisted/jingle/jingletest2.py
@@ -109,6 +109,9 @@ class JingleProtocol:
     def extract_session_id(self, query):
         return query['sid']
 
+    def is_gtalk(self):
+        return False
+
     def is_modern_jingle(self):
         return False
 
@@ -157,6 +160,9 @@ class GtalkProtocol03(JingleProtocol):
     def extract_session_id(self, query):
         return query['id']
 
+    def is_gtalk(self):
+        return True
+
 class GtalkProtocol04(JingleProtocol):
     features = [ 'http://www.google.com/xmpp/protocol/voice/v1',
           'http://www.google.com/transport/p2p' ]
@@ -199,6 +205,9 @@ class GtalkProtocol04(JingleProtocol):
     def extract_session_id(self, query):
         return query['id']
 
+    def is_gtalk(self):
+        return True
+
 class JingleProtocol015(JingleProtocol):
     features = [ 'http://www.google.com/transport/p2p',
           'http://jabber.org/protocol/jingle',
@@ -339,15 +348,30 @@ class JingleTest2:
     def set_sid_from_initiate(self, query):
         self.sid = self.jp.extract_session_id(query)
 
-    def accept(self):
+    def accept(self, with_video=False):
         jp = self.jp
-        node = jp.SetIq(self.peer, self.jid, [
-            jp.Jingle(self.sid, self.peer, 'session-accept', [
-                jp.Content('stream1', 'initiator', 'both', [
-                    jp.Description('audio', [
+        audio = [
+            jp.Content('stream1', 'initiator', 'both', [
+                jp.Description('audio', [
+                    jp.PayloadType(name, str(rate), str(id)) for
+                        (name, id, rate) in self.audio_codecs ]),
+                jp.TransportGoogleP2P() ])
+            ]
+
+        if with_video:
+            video = [
+                jp.Content('stream2', 'initiator', 'both', [
+                    jp.Description('video', [
                         jp.PayloadType(name, str(rate), str(id)) for
-                            (name, id, rate) in self.audio_codecs ]),
-                jp.TransportGoogleP2P() ]) ]) ])
+                            (name, id, rate) in self.video_codecs ]),
+                    jp.TransportGoogleP2P() ])
+                ]
+        else:
+            video = []
+
+        node = jp.SetIq(self.peer, self.jid, [
+            jp.Jingle(self.sid, self.peer, 'session-accept',
+                audio + video) ])
         self.stream.send(jp.xml(node))
 
     def terminate(self, reason=None):
-- 
1.5.6.5




More information about the telepathy-commits mailing list