diff --git a/tests/handlers/test_presence.py b/tests/handlers/test_presence.py
index b85a89052a..c309fbb054 100644
--- a/tests/handlers/test_presence.py
+++ b/tests/handlers/test_presence.py
@@ -59,23 +59,29 @@ class JustPresenceHandlers(object):
def __init__(self, hs):
self.presence_handler = PresenceHandler(hs)
-class PresenceStateTestCase(unittest.TestCase):
- """ Tests presence management. """
+class PresenceTestCase(unittest.TestCase):
@defer.inlineCallbacks
def setUp(self):
db_pool = SQLiteMemoryDbPool()
yield db_pool.prepare()
+ self.clock = MockClock()
+
self.mock_config = NonCallableMock()
self.mock_config.signing_key = [MockKey()]
+ self.mock_federation_resource = MockHttpResource()
+
+ self.mock_http_client = Mock(spec=[])
+ self.mock_http_client.put_json = DeferredMockCallable()
+
hs = HomeServer("test",
- clock=MockClock(),
+ clock=self.clock,
db_pool=db_pool,
handlers=None,
- resource_for_federation=Mock(),
- http_client=None,
+ resource_for_federation=self.mock_federation_resource,
+ http_client=self.mock_http_client,
config=self.mock_config,
keyring=Mock(),
)
@@ -92,24 +98,33 @@ class PresenceStateTestCase(unittest.TestCase):
self.u_banana = hs.parse_userid("@banana:test")
self.u_clementine = hs.parse_userid("@clementine:test")
- yield self.store.create_presence(self.u_apple.localpart)
+ for u in self.u_apple, self.u_banana, self.u_clementine:
+ yield self.store.create_presence(u.localpart)
+
yield self.store.set_presence_state(
self.u_apple.localpart, {"state": ONLINE, "status_msg": "Online"}
)
+ # ID of a local user that does not exist
+ self.u_durian = hs.parse_userid("@durian:test")
+
+ # A remote user
+ self.u_cabbage = hs.parse_userid("@cabbage:elsewhere")
+
self.handler = hs.get_handlers().presence_handler
+ self.room_id = "a-room"
self.room_members = []
def get_rooms_for_user(user):
if user in self.room_members:
- return defer.succeed(["a-room"])
+ return defer.succeed([self.room_id])
else:
return defer.succeed([])
room_member_handler.get_rooms_for_user = get_rooms_for_user
def get_room_members(room_id):
- if room_id == "a-room":
+ if room_id == self.room_id:
return defer.succeed(self.room_members)
else:
return defer.succeed([])
@@ -128,6 +143,10 @@ class PresenceStateTestCase(unittest.TestCase):
self.handler.start_polling_presence = self.mock_start
self.handler.stop_polling_presence = self.mock_stop
+
+class PresenceStateTestCase(PresenceTestCase):
+ """ Tests presence management. """
+
@defer.inlineCallbacks
def test_get_my_state(self):
state = yield self.handler.get_state(
@@ -206,57 +225,10 @@ class PresenceStateTestCase(unittest.TestCase):
self.mock_stop.assert_called_with(self.u_apple)
-class PresenceInvitesTestCase(unittest.TestCase):
+class PresenceInvitesTestCase(PresenceTestCase):
""" Tests presence management. """
@defer.inlineCallbacks
- def setUp(self):
- self.mock_http_client = Mock(spec=[])
- self.mock_http_client.put_json = DeferredMockCallable()
-
- self.mock_federation_resource = MockHttpResource()
-
- db_pool = SQLiteMemoryDbPool()
- yield db_pool.prepare()
-
- self.mock_config = NonCallableMock()
- self.mock_config.signing_key = [MockKey()]
-
- hs = HomeServer("test",
- clock=MockClock(),
- db_pool=db_pool,
- handlers=None,
- resource_for_client=Mock(),
- resource_for_federation=self.mock_federation_resource,
- http_client=self.mock_http_client,
- config=self.mock_config,
- keyring=Mock(),
- )
- hs.handlers = JustPresenceHandlers(hs)
-
- self.store = hs.get_datastore()
-
- # Some local users to test with
- self.u_apple = hs.parse_userid("@apple:test")
- self.u_banana = hs.parse_userid("@banana:test")
- yield self.store.create_presence(self.u_apple.localpart)
- yield self.store.create_presence(self.u_banana.localpart)
-
- # ID of a local user that does not exist
- self.u_durian = hs.parse_userid("@durian:test")
-
- # A remote user
- self.u_cabbage = hs.parse_userid("@cabbage:elsewhere")
-
- self.handler = hs.get_handlers().presence_handler
-
- self.mock_start = Mock()
- self.mock_stop = Mock()
-
- self.handler.start_polling_presence = self.mock_start
- self.handler.stop_polling_presence = self.mock_stop
-
- @defer.inlineCallbacks
def test_invite_local(self):
# TODO(paul): This test will likely break if/when real auth permissions
# are added; for now the HS will always accept any invite
@@ -558,24 +530,25 @@ class PresencePushTestCase(unittest.TestCase):
])
self.room_member_handler = hs.handlers.room_member_handler
+ self.room_id = "a-room"
self.room_members = []
def get_rooms_for_user(user):
if user in self.room_members:
- return defer.succeed(["a-room"])
+ return defer.succeed([self.room_id])
else:
return defer.succeed([])
self.room_member_handler.get_rooms_for_user = get_rooms_for_user
def get_room_members(room_id):
- if room_id == "a-room":
+ if room_id == self.room_id:
return defer.succeed(self.room_members)
else:
return defer.succeed([])
self.room_member_handler.get_room_members = get_room_members
def get_room_hosts(room_id):
- if room_id == "a-room":
+ if room_id == self.room_id:
hosts = set([u.domain for u in self.room_members])
return defer.succeed(hosts)
else:
@@ -911,7 +884,7 @@ class PresencePushTestCase(unittest.TestCase):
)
yield self.distributor.fire("user_joined_room", self.u_clementine,
- "a-room"
+ self.room_id
)
self.room_members.append(self.u_clementine)
@@ -974,7 +947,7 @@ class PresencePushTestCase(unittest.TestCase):
self.room_members = [self.u_apple, self.u_banana]
yield self.distributor.fire("user_joined_room", self.u_potato,
- "a-room"
+ self.room_id
)
yield put_json.await_calls()
@@ -1003,7 +976,7 @@ class PresencePushTestCase(unittest.TestCase):
self.room_members.append(self.u_potato)
yield self.distributor.fire("user_joined_room", self.u_clementine,
- "a-room"
+ self.room_id
)
put_json.await_calls()
diff --git a/tests/handlers/test_room.py b/tests/handlers/test_room.py
index 0cb8aa4fbc..d3253b48b8 100644
--- a/tests/handlers/test_room.py
+++ b/tests/handlers/test_room.py
@@ -223,7 +223,7 @@ class RoomMemberHandlerTestCase(unittest.TestCase):
yield room_handler.change_membership(event, context)
self.federation.handle_new_event.assert_called_once_with(
- event, None, destinations=set()
+ event, destinations=set()
)
self.datastore.persist_event.assert_called_once_with(
@@ -301,7 +301,7 @@ class RoomMemberHandlerTestCase(unittest.TestCase):
yield room_handler.change_membership(event, context)
self.federation.handle_new_event.assert_called_once_with(
- event, None, destinations=set(['red'])
+ event, destinations=set(['red'])
)
self.datastore.persist_event.assert_called_once_with(
diff --git a/tests/handlers/test_typing.py b/tests/handlers/test_typing.py
index 0d4b368a43..6a498b23a4 100644
--- a/tests/handlers/test_typing.py
+++ b/tests/handlers/test_typing.py
@@ -352,3 +352,29 @@ class TypingNotificationsTestCase(unittest.TestCase):
}},
]
)
+
+ # SYN-230 - see if we can still set after timeout
+
+ yield self.handler.started_typing(
+ target_user=self.u_apple,
+ auth_user=self.u_apple,
+ room_id=self.room_id,
+ timeout=10000,
+ )
+
+ self.on_new_user_event.assert_has_calls([
+ call(rooms=[self.room_id]),
+ ])
+ self.on_new_user_event.reset_mock()
+
+ self.assertEquals(self.event_source.get_current_key(), 3)
+ self.assertEquals(
+ self.event_source.get_new_events_for_user(self.u_apple, 0, None)[0],
+ [
+ {"type": "m.typing",
+ "room_id": self.room_id,
+ "content": {
+ "user_ids": [self.u_apple.to_string()],
+ }},
+ ]
+ )
diff --git a/tests/rest/test_rooms.py b/tests/rest/test_rooms.py
index 84fd730afc..8e65ff9a1c 100644
--- a/tests/rest/test_rooms.py
+++ b/tests/rest/test_rooms.py
@@ -294,7 +294,7 @@ class RoomPermissionsTestCase(RestTestCase):
# set [invite/join/left] of self, set [invite/join/left] of other,
# expect all 403s
for usr in [self.user_id, self.rmcreator_id]:
- yield self.join(room=room, user=usr, expect_code=403)
+ yield self.join(room=room, user=usr, expect_code=404)
yield self.leave(room=room, user=usr, expect_code=403)
@defer.inlineCallbacks
diff --git a/tests/rest/test_typing.py b/tests/rest/test_typing.py
index c550294d59..18138af1b5 100644
--- a/tests/rest/test_typing.py
+++ b/tests/rest/test_typing.py
@@ -21,7 +21,7 @@ from twisted.internet import defer
import synapse.rest.room
from synapse.server import HomeServer
-from ..utils import MockHttpResource, SQLiteMemoryDbPool, MockKey
+from ..utils import MockHttpResource, MockClock, SQLiteMemoryDbPool, MockKey
from .utils import RestTestCase
from mock import Mock, NonCallableMock
@@ -36,6 +36,8 @@ class RoomTypingTestCase(RestTestCase):
@defer.inlineCallbacks
def setUp(self):
+ self.clock = MockClock()
+
self.mock_resource = MockHttpResource(prefix=PATH_PREFIX)
self.auth_user_id = self.user_id
@@ -47,6 +49,7 @@ class RoomTypingTestCase(RestTestCase):
hs = HomeServer(
"red",
+ clock=self.clock,
db_pool=db_pool,
http_client=None,
replication_layer=Mock(),
@@ -77,6 +80,30 @@ class RoomTypingTestCase(RestTestCase):
return defer.succeed(None)
hs.get_datastore().insert_client_ip = _insert_client_ip
+ def get_room_members(room_id):
+ if room_id == self.room_id:
+ return defer.succeed([hs.parse_userid(self.user_id)])
+ else:
+ return defer.succeed([])
+
+ @defer.inlineCallbacks
+ def fetch_room_distributions_into(room_id, localusers=None,
+ remotedomains=None, ignore_user=None):
+
+ members = yield get_room_members(room_id)
+ for member in members:
+ if ignore_user is not None and member == ignore_user:
+ continue
+
+ if hs.is_mine(member):
+ if localusers is not None:
+ localusers.add(member)
+ else:
+ if remotedomains is not None:
+ remotedomains.add(member.domain)
+ hs.get_handlers().room_member_handler.fetch_room_distributions_into = (
+ fetch_room_distributions_into)
+
synapse.rest.room.register_servlets(hs, self.mock_resource)
self.room_id = yield self.create_room_as(self.user_id)
@@ -113,3 +140,25 @@ class RoomTypingTestCase(RestTestCase):
'{"typing": false}'
)
self.assertEquals(200, code)
+
+ @defer.inlineCallbacks
+ def test_typing_timeout(self):
+ (code, _) = yield self.mock_resource.trigger("PUT",
+ "/rooms/%s/typing/%s" % (self.room_id, self.user_id),
+ '{"typing": true, "timeout": 30000}'
+ )
+ self.assertEquals(200, code)
+
+ self.assertEquals(self.event_source.get_current_key(), 1)
+
+ self.clock.advance_time(31);
+
+ self.assertEquals(self.event_source.get_current_key(), 2)
+
+ (code, _) = yield self.mock_resource.trigger("PUT",
+ "/rooms/%s/typing/%s" % (self.room_id, self.user_id),
+ '{"typing": true, "timeout": 30000}'
+ )
+ self.assertEquals(200, code)
+
+ self.assertEquals(self.event_source.get_current_key(), 3)
diff --git a/tests/storage/test_room.py b/tests/storage/test_room.py
index 11761fe29a..e7739776ec 100644
--- a/tests/storage/test_room.py
+++ b/tests/storage/test_room.py
@@ -57,17 +57,6 @@ class RoomStoreTestCase(unittest.TestCase):
)
@defer.inlineCallbacks
- def test_store_room_config(self):
- yield self.store.store_room_config(self.room.to_string(),
- visibility=False
- )
-
- self.assertObjectHasAttributes(
- {"is_public": False},
- (yield self.store.get_room(self.room.to_string()))
- )
-
- @defer.inlineCallbacks
def test_get_rooms(self):
# get_rooms does an INNER JOIN on the room_aliases table :(
diff --git a/tests/unittest.py b/tests/unittest.py
index a9c0e05541..fe26b7574f 100644
--- a/tests/unittest.py
+++ b/tests/unittest.py
@@ -69,6 +69,8 @@ class TestCase(unittest.TestCase):
return ret
logging.getLogger().setLevel(level)
+ # Don't set SQL logging
+ logging.getLogger("synapse.storage").setLevel(old_level)
return orig()
def assertObjectHasAttributes(self, attrs, obj):
diff --git a/tests/utils.py b/tests/utils.py
index 731e03f517..97fa8d8181 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -138,7 +138,8 @@ class MockClock(object):
now = 1000
def __init__(self):
- # list of tuples of (absolute_time, callback) in no particular order
+ # list of lists of [absolute_time, callback, expired] in no particular
+ # order
self.timers = []
def time(self):
@@ -154,11 +155,16 @@ class MockClock(object):
LoggingContext.thread_local.current_context = current_context
callback()
- t = (self.now + delay, wrapped_callback)
+ t = [self.now + delay, wrapped_callback, False]
self.timers.append(t)
+
return t
def cancel_call_later(self, timer):
+ if timer[2]:
+ raise Exception("Cannot cancel an expired timer")
+
+ timer[2] = True
self.timers = [t for t in self.timers if t != timer]
# For unit testing
@@ -168,11 +174,17 @@ class MockClock(object):
timers = self.timers
self.timers = []
- for time, callback in timers:
+ for t in timers:
+ time, callback, expired = t
+
+ if expired:
+ raise Exception("Timer already expired")
+
if self.now >= time:
+ t[2] = True
callback()
else:
- self.timers.append((time, callback))
+ self.timers.append(t)
class SQLiteMemoryDbPool(ConnectionPool, object):
|