def sign_in_a_cat(jid, identities, show=None): caps['ver'] = compute_caps_hash(identities, features, {}) presence_and_disco(q, conn, stream, jid, expect_disco, client, caps, features, identities=identities, initial=False, show=show) # Make sure Gabble's got the caps sync_stream(q, stream)
def receive_caps(q, conn, stream, contact, contact_handle, features, expected_caps, expect_disco=True, expect_ccc=True): caps = {'node': client, 'ver': compute_caps_hash([], features, {}), 'hash': 'sha-1'} presence_and_disco(q, conn, stream, contact, expect_disco, client, caps, features, initial=False) if expect_ccc: event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged') announced_ccs, = event.args assertSameElements(expected_caps, announced_ccs[contact_handle]) else: # Make sure Gabble's got the caps sync_stream(q, stream) caps = get_contacts_capabilities_sync(conn, [contact_handle]) assertSameElements(expected_caps, caps[contact_handle]) # test again, to check GetContactCapabilities does not have side effect caps = get_contacts_capabilities_sync(conn, [contact_handle]) assertSameElements(expected_caps, caps[contact_handle]) # check the Contacts interface give the same caps caps_via_contacts_iface = conn.Contacts.GetContactAttributes( [contact_handle], [cs.CONN_IFACE_CONTACT_CAPS], False) \ [contact_handle][cs.ATTR_CONTACT_CAPABILITIES] assertSameElements(caps[contact_handle], caps_via_contacts_iface)
def sending_request_to_cappy_contact(q, bus, conn, stream, chan): """ Test that Gabble requests a receipt from a contact whom we know supports this extension, but only if asked. """ # Convince Gabble that Guybrush supports this extension caps = { 'node': 'http://whatever', 'ver': caps_helper.compute_caps_hash([], [ns.RECEIPTS], {}), 'hash': 'sha-1', } caps_helper.presence_and_disco(q, conn, stream, GUYBRUSH_FULL_JID, disco=True, client=caps['node'], caps=caps, features=[ns.RECEIPTS]) sync_stream(q, stream) # Don't ask, don't tell — even if we know Guybrush does support this. not_sending_request_to_contact(q, bus, conn, stream, chan) # Ask, tell. message = [ { 'message-type': cs.MT_NORMAL, }, { 'content-type': 'text/plain', 'content': 'Ulysses?', }] chan.Messages.SendMessage(message, cs.MSG_SENDING_FLAGS_REPORT_DELIVERY) e = q.expect('stream-message', to=GUYBRUSH) assertLength(1, list(e.stanza.elements(uri=ns.RECEIPTS, name='request')))
def contact_online(q, conn, stream, contact, identities, disco=True, dataforms={}, initial=True, show=None): (caps, client, types) = build_stuff(identities) handle = conn.get_contact_handle_sync(contact) # make contact come online presence_and_disco(q, conn, stream, contact, disco, client, caps, features, identities, dataforms=dataforms, initial=initial, show=show) if initial: event = q.expect('dbus-signal', signal='ClientTypesUpdated') assertEquals([handle, types], event.args)
def contact_online(q, conn, stream, contact, identities, disco=True, dataforms={}, initial=True, show=None): (caps, client, types) = build_stuff(identities) handle = conn.get_contact_handle_sync(contact) # make contact come online presence_and_disco (q, conn, stream, contact, disco, client, caps, features, identities, dataforms=dataforms, initial = initial, show = show) if initial: event = q.expect('dbus-signal', signal='ClientTypesUpdated') assertEquals([handle, types], event.args)
def test_caps(q, conn, stream, contact, features, audio, video, google=False): caps['ver'] = compute_caps_hash([], features, {}) h = presence_and_disco(q, conn, stream, contact, True, client, caps, features) cflags = 0 call_expected_media_caps = [] if audio: cflags |= cs.MEDIA_CAP_AUDIO call_expected_media_caps.append(cs.CALL_INITIAL_AUDIO) call_expected_media_caps.append(cs.CALL_INITIAL_AUDIO_NAME) if video: cflags |= cs.MEDIA_CAP_VIDEO call_expected_media_caps.append(cs.CALL_INITIAL_VIDEO) call_expected_media_caps.append(cs.CALL_INITIAL_VIDEO_NAME) # If the contact can only do one of audio or video, or uses a Google # client, they'll have the ImmutableStreams cap. if cflags < (cs.MEDIA_CAP_AUDIO | cs.MEDIA_CAP_VIDEO) or google: cflags |= cs.MEDIA_CAP_IMMUTABLE_STREAMS else: call_expected_media_caps.append(cs.CALL_MUTABLE_CONTENTS) event, = q.expect_many( EventPattern('dbus-signal', signal='ContactCapabilitiesChanged')) # Check Contact capabilities assertEquals(len(event.args), 1) assertEquals(event.args[0], get_contacts_capabilities_sync(conn, [h])) check_contact_caps(event.args[0][h], cs.CHANNEL_TYPE_CALL, call_expected_media_caps)
def receive_caps(q, conn, stream, contact, contact_handle, features, expected_caps, expect_disco=True, expect_ccc=True): caps = { 'node': client, 'ver': compute_caps_hash([], features, {}), 'hash': 'sha-1' } presence_and_disco(q, conn, stream, contact, expect_disco, client, caps, features, initial=False) if expect_ccc: event = q.expect('dbus-signal', signal='ContactCapabilitiesChanged') announced_ccs, = event.args assertSameElements(expected_caps, announced_ccs[contact_handle]) else: # Make sure Gabble's got the caps sync_stream(q, stream) caps = get_contacts_capabilities_sync(conn, [contact_handle]) assertSameElements(expected_caps, caps[contact_handle]) # test again, to check GetContactCapabilities does not have side effect caps = get_contacts_capabilities_sync(conn, [contact_handle]) assertSameElements(expected_caps, caps[contact_handle]) # check the Contacts interface give the same caps caps_via_contacts_iface = conn.Contacts.GetContactAttributes( [contact_handle], [cs.CONN_IFACE_CONTACT_CAPS], False) \ [contact_handle][cs.ATTR_CONTACT_CAPABILITIES] assertSameElements(caps[contact_handle], caps_via_contacts_iface)
def test_caps(q, conn, stream, contact, features, audio, video, google=False): caps['ver'] = compute_caps_hash ([], features, {}) h = presence_and_disco(q, conn, stream, contact, True, client, caps, features) cflags = 0 stream_expected_media_caps = [] call_expected_media_caps = [] if audio: cflags |= cs.MEDIA_CAP_AUDIO stream_expected_media_caps.append (cs.INITIAL_AUDIO) call_expected_media_caps.append (cs.CALL_INITIAL_AUDIO) call_expected_media_caps.append (cs.CALL_INITIAL_AUDIO_NAME) if video: cflags |= cs.MEDIA_CAP_VIDEO stream_expected_media_caps.append (cs.INITIAL_VIDEO) call_expected_media_caps.append (cs.CALL_INITIAL_VIDEO) call_expected_media_caps.append (cs.CALL_INITIAL_VIDEO_NAME) # If the contact can only do one of audio or video, or uses a Google # client, they'll have the ImmutableStreams cap. if cflags < (cs.MEDIA_CAP_AUDIO | cs.MEDIA_CAP_VIDEO) or google: cflags |= cs.MEDIA_CAP_IMMUTABLE_STREAMS stream_expected_media_caps.append(cs.IMMUTABLE_STREAMS) else: call_expected_media_caps.append(cs.CALL_MUTABLE_CONTENTS) _, event = q.expect_many( EventPattern('dbus-signal', signal='CapabilitiesChanged', args = [[ ( h, cs.CHANNEL_TYPE_STREAMED_MEDIA, 0, # old generic 3, # new generic (can create and receive these) 0, # old specific cflags ) ]] # new specific ), EventPattern('dbus-signal', signal='ContactCapabilitiesChanged') ) assertContains((h, cs.CHANNEL_TYPE_STREAMED_MEDIA, 3, cflags), conn.Capabilities.GetCapabilities([h])) # Check Contact capabilities for streamed media assertEquals(len(event.args), 1) assertEquals (event.args[0], conn.ContactCapabilities.GetContactCapabilities([h])) check_contact_caps (event.args[0][h], cs.CHANNEL_TYPE_STREAMED_MEDIA, stream_expected_media_caps) check_contact_caps (event.args[0][h], cs.CHANNEL_TYPE_CALL, call_expected_media_caps)
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_caps(q, conn, stream, contact, features, audio, video, google=False): caps['ver'] = compute_caps_hash ([], features, {}) h = presence_and_disco(q, conn, stream, contact, True, client, caps, features) cflags = 0 call_expected_media_caps = [] if audio: cflags |= cs.MEDIA_CAP_AUDIO call_expected_media_caps.append (cs.CALL_INITIAL_AUDIO) call_expected_media_caps.append (cs.CALL_INITIAL_AUDIO_NAME) if video: cflags |= cs.MEDIA_CAP_VIDEO call_expected_media_caps.append (cs.CALL_INITIAL_VIDEO) call_expected_media_caps.append (cs.CALL_INITIAL_VIDEO_NAME) # If the contact can only do one of audio or video, or uses a Google # client, they'll have the ImmutableStreams cap. if cflags < (cs.MEDIA_CAP_AUDIO | cs.MEDIA_CAP_VIDEO) or google: cflags |= cs.MEDIA_CAP_IMMUTABLE_STREAMS else: call_expected_media_caps.append(cs.CALL_MUTABLE_CONTENTS) event, = q.expect_many( EventPattern('dbus-signal', signal='ContactCapabilitiesChanged') ) # Check Contact capabilities assertEquals(len(event.args), 1) assertEquals (event.args[0], get_contacts_capabilities_sync(conn, [h])) check_contact_caps (event.args[0][h], cs.CHANNEL_TYPE_CALL, call_expected_media_caps)
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)