|
| 1 | + |
| 2 | +""" |
| 3 | +Test PEP avatar support. |
| 4 | +""" |
| 5 | + |
| 6 | +import base64 |
| 7 | +import hashlib |
| 8 | + |
| 9 | +from servicetest import call_async, EventPattern, assertEquals, assertLength |
| 10 | +from gabbletest import exec_test, make_result_iq, acknowledge_iq, elem |
| 11 | +from caps_helper import receive_presence_and_ask_caps |
| 12 | + |
| 13 | +import constants as cs |
| 14 | +import ns |
| 15 | + |
| 16 | +NS_XMPP_AVATAR_META='urn:xmpp:avatar:metadata' |
| 17 | +NS_XMPP_AVATAR_DATA='urn:xmpp:avatar:data' |
| 18 | +png_pxl_b64=b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==' |
| 19 | + |
| 20 | +def test(q, bus, conn, stream): |
| 21 | + event, feats, forms, caps = receive_presence_and_ask_caps(q, stream, False) |
| 22 | + assert NS_XMPP_AVATAR_META in feats and NS_XMPP_AVATAR_META+'+notify' in feats, feats |
| 23 | + |
| 24 | + png_pxl_raw = base64.b64decode(png_pxl_b64) |
| 25 | + png_pxl_sha = hashlib.sha1(png_pxl_raw).hexdigest() |
| 26 | + |
| 27 | + msg = elem( 'message', from_='[email protected]')( |
| 28 | + elem((ns.PUBSUB_EVENT), 'event')( |
| 29 | + elem('items', node=NS_XMPP_AVATAR_META)( |
| 30 | + elem('item', id=png_pxl_sha)( |
| 31 | + elem(NS_XMPP_AVATAR_META, 'metadata')( |
| 32 | + elem('info', bytes='70', id=png_pxl_sha, type='image/png') |
| 33 | + ) |
| 34 | + ) |
| 35 | + ) |
| 36 | + ) |
| 37 | + ) |
| 38 | + stream.send(msg) |
| 39 | + |
| 40 | + handle = conn. get_contact_handle_sync( '[email protected]') |
| 41 | + |
| 42 | + event = q.expect('dbus-signal', signal='AvatarUpdated', args=[handle, png_pxl_sha]) |
| 43 | + conn.Avatars.RequestAvatars([handle]) |
| 44 | + |
| 45 | + event = q. expect( 'stream-iq', to='[email protected]', iq_type='get', |
| 46 | + query_ns=ns.PUBSUB, query_name='pubsub') |
| 47 | + |
| 48 | + items = event.query.firstChildElement() |
| 49 | + assertEquals('items', items.name) |
| 50 | + assertEquals(NS_XMPP_AVATAR_DATA, items['node']) |
| 51 | + |
| 52 | + result = make_result_iq(stream, event.stanza) |
| 53 | + pubsub = result.firstChildElement() |
| 54 | + items = pubsub.addElement('items') |
| 55 | + items['node'] = NS_XMPP_AVATAR_DATA |
| 56 | + item = items.addElement('item') |
| 57 | + item['id'] = png_pxl_sha |
| 58 | + item.addElement('data', NS_XMPP_AVATAR_DATA, content=png_pxl_b64.decode()) |
| 59 | + stream.send(result) |
| 60 | + |
| 61 | + q.expect('dbus-signal', signal='AvatarRetrieved', |
| 62 | + args=[handle, png_pxl_sha, png_pxl_raw, 'image/png']) |
| 63 | + |
| 64 | +if __name__ == '__main__': |
| 65 | + exec_test(test) |
0 commit comments