From 42e363fafc0715242fff46a01830301829d2d196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Wed, 19 Jun 2019 11:57:01 +0200 Subject: [PATCH] tests: Test pan client syncs. --- tests/data/sync.json | 222 +++++++++++++++++++++++++++++++++++++++++++ tests/proxy_test.py | 46 +++++++++ 2 files changed, 268 insertions(+) create mode 100644 tests/data/sync.json diff --git a/tests/data/sync.json b/tests/data/sync.json new file mode 100644 index 0000000..a43cb57 --- /dev/null +++ b/tests/data/sync.json @@ -0,0 +1,222 @@ +{ + "device_one_time_keys_count": {}, + "next_batch": "s526_47314_0_7_1_1_1_11444_1", + "device_lists": { + "changed": [ + "@example:example.org" + ], + "left": [] + }, + + "rooms": { + "invite": {}, + "join": { + "!SVkFJHzfwvuaIEawgC:localhost": { + "account_data": { + "events": [] + }, + "ephemeral": { + "events": [ + { + "content": { + "$151680659217152dPKjd:localhost": { + "m.read": { + "@example:localhost": { + "ts": 1516809890615 + } + } + } + }, + "type": "m.receipt" + } + ] + }, + "state": { + "events": [ + { + "content": { + "join_rule": "public" + }, + "event_id": "$15139375514WsgmR:localhost", + "origin_server_ts": 1513937551539, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.join_rules", + "unsigned": { + "age": 7034220355 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example", + "membership": "join" + }, + "event_id": "$151800140517rfvjc:localhost", + "membership": "join", + "origin_server_ts": 1518001405556, + "sender": "@example:localhost", + "state_key": "@example:localhost", + "type": "m.room.member", + "unsigned": { + "age": 2970366338, + "replaces_state": "$151800111315tsynI:localhost" + } + }, + { + "content": { + "history_visibility": "shared" + }, + "event_id": "$15139375515VaJEY:localhost", + "origin_server_ts": 1513937551613, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.history_visibility", + "unsigned": { + "age": 7034220281 + } + }, + { + "content": { + "creator": "@example:localhost" + }, + "event_id": "$15139375510KUZHi:localhost", + "origin_server_ts": 1513937551203, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.create", + "unsigned": { + "age": 7034220691 + } + }, + { + "content": { + "aliases": [ + "#tutorial:localhost" + ] + }, + "event_id": "$15139375516NUgtD:localhost", + "origin_server_ts": 1513937551720, + "sender": "@example:localhost", + "state_key": "localhost", + "type": "m.room.aliases", + "unsigned": { + "age": 7034220174 + } + }, + { + "content": { + "topic": "\ud83d\ude00" + }, + "event_id": "$151957878228ssqrJ:localhost", + "origin_server_ts": 1519578782185, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.topic", + "unsigned": { + "age": 1392989709, + "prev_content": { + "topic": "test" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$151957069225EVYKm:localhost" + } + }, + { + "content": { + "ban": 50, + "events": { + "m.room.avatar": 50, + "m.room.canonical_alias": 50, + "m.room.history_visibility": 100, + "m.room.name": 50, + "m.room.power_levels": 100 + }, + "events_default": 0, + "invite": 0, + "kick": 50, + "redact": 50, + "state_default": 50, + "users": { + "@example:localhost": 100 + }, + "users_default": 0 + }, + "event_id": "$15139375512JaHAW:localhost", + "origin_server_ts": 1513937551359, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.power_levels", + "unsigned": { + "age": 7034220535 + } + }, + { + "content": { + "alias": "#tutorial:localhost" + }, + "event_id": "$15139375513VdeRF:localhost", + "origin_server_ts": 1513937551461, + "sender": "@example:localhost", + "state_key": "", + "type": "m.room.canonical_alias", + "unsigned": { + "age": 7034220433 + } + }, + { + "content": { + "avatar_url": null, + "displayname": "example2", + "membership": "join" + }, + "event_id": "$152034824468gOeNB:localhost", + "membership": "join", + "origin_server_ts": 1520348244605, + "sender": "@example2:localhost", + "state_key": "@example2:localhost", + "type": "m.room.member", + "unsigned": { + "age": 623527289, + "prev_content": { + "membership": "leave" + }, + "prev_sender": "@example:localhost", + "replaces_state": "$152034819067QWJxM:localhost" + } + } + ] + }, + "timeline": { + "events": [ + { + "content": { + "body": "baba", + "format": "org.matrix.custom.html", + "formatted_body": "baba", + "msgtype": "m.text" + }, + "event_id": "$152037280074GZeOm:localhost", + "origin_server_ts": 1520372800469, + "sender": "@example:localhost", + "type": "m.room.message", + "unsigned": { + "age": 598971425 + } + } + ], + "limited": true, + "prev_batch": "t392-516_47314_0_7_1_1_1_11444_1" + }, + "unread_notifications": { + "highlight_count": 0, + "notification_count": 11 + } + } + }, + "leave": {} + }, + "to_device": { + "events": [] + } +} diff --git a/tests/proxy_test.py b/tests/proxy_test.py index 68d14fd..2b1f334 100644 --- a/tests/proxy_test.py +++ b/tests/proxy_test.py @@ -1,10 +1,17 @@ import asyncio +import re +import json + from aiohttp import web from conftest import faker class TestClass(object): + @staticmethod + def _load_response(filename): + with open(filename) as f: + return json.loads(f.read(), encoding="utf-8") @property def login_response(self): @@ -15,6 +22,10 @@ class TestClass(object): "user_id": "@example:example.org" } + @property + def sync_response(self): + return self._load_response("tests/data/sync.json") + async def test_daemon_start(self, pan_proxy_server, aiohttp_client, aioresponse): server, daemon = pan_proxy_server @@ -48,3 +59,38 @@ class TestClass(object): assert pan_client.logged_in # Check if our pan client has a sync loop started assert pan_client.task + + async def test_pan_client_sync(self, pan_proxy_server, aiohttp_client, aioresponse): + server, daemon = pan_proxy_server + + client = await aiohttp_client(server) + + aioresponse.post( + "https://example.org/_matrix/client/r0/login", + status=200, + payload=self.login_response, + repeat=True + ) + + sync_url = re.compile( + r'^https://example\.org/_matrix/client/r0/sync\?access_token=.*' + ) + + aioresponse.get( + sync_url, + status=200, + payload=self.sync_response, + ) + + await client.post( + "/_matrix/client/r0/login", + json={ + "type": "m.login.password", + "user": "example", + "password": "wordpass", + } + ) + + # Check that the pan client started to sync after logging in. + pan_client = list(daemon.pan_clients.values())[0] + assert len(pan_client.rooms) == 1