Merge pull request #704 from matrix-org/markh/slaveIII
Add tests for get_latest_event_ids_in_room and get_current_state
This commit is contained in:
commit
8c82b06904
|
@ -89,8 +89,11 @@ class SlavedEventStore(BaseSlavedStore):
|
||||||
_invalidate_get_event_cache = DataStore._invalidate_get_event_cache.__func__
|
_invalidate_get_event_cache = DataStore._invalidate_get_event_cache.__func__
|
||||||
_parse_events_txn = DataStore._parse_events_txn.__func__
|
_parse_events_txn = DataStore._parse_events_txn.__func__
|
||||||
_get_events_txn = DataStore._get_events_txn.__func__
|
_get_events_txn = DataStore._get_events_txn.__func__
|
||||||
|
_enqueue_events = DataStore._enqueue_events.__func__
|
||||||
|
_do_fetch = DataStore._do_fetch.__func__
|
||||||
_fetch_events_txn = DataStore._fetch_events_txn.__func__
|
_fetch_events_txn = DataStore._fetch_events_txn.__func__
|
||||||
_fetch_event_rows = DataStore._fetch_event_rows.__func__
|
_fetch_event_rows = DataStore._fetch_event_rows.__func__
|
||||||
|
_get_event_from_row = DataStore._get_event_from_row.__func__
|
||||||
_get_event_from_row_txn = DataStore._get_event_from_row_txn.__func__
|
_get_event_from_row_txn = DataStore._get_event_from_row_txn.__func__
|
||||||
_get_rooms_for_user_where_membership_is_txn = (
|
_get_rooms_for_user_where_membership_is_txn = (
|
||||||
DataStore._get_rooms_for_user_where_membership_is_txn.__func__
|
DataStore._get_rooms_for_user_where_membership_is_txn.__func__
|
||||||
|
@ -158,6 +161,8 @@ class SlavedEventStore(BaseSlavedStore):
|
||||||
|
|
||||||
self._invalidate_get_event_cache(event.event_id)
|
self._invalidate_get_event_cache(event.event_id)
|
||||||
|
|
||||||
|
self.get_latest_event_ids_in_room.invalidate((event.room_id,))
|
||||||
|
|
||||||
if not backfilled:
|
if not backfilled:
|
||||||
self._events_stream_cache.entity_has_changed(
|
self._events_stream_cache.entity_has_changed(
|
||||||
event.room_id, event.internal_metadata.stream_ordering
|
event.room_id, event.internal_metadata.stream_ordering
|
||||||
|
|
|
@ -14,20 +14,47 @@
|
||||||
|
|
||||||
from ._base import BaseSlavedStoreTestCase
|
from ._base import BaseSlavedStoreTestCase
|
||||||
|
|
||||||
from synapse.events import FrozenEvent
|
from synapse.events import FrozenEvent, _EventInternalMetadata
|
||||||
from synapse.events.snapshot import EventContext
|
from synapse.events.snapshot import EventContext
|
||||||
from synapse.storage.roommember import RoomsForUser
|
from synapse.storage.roommember import RoomsForUser
|
||||||
|
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
|
||||||
|
|
||||||
USER_ID = "@feeling:blue"
|
USER_ID = "@feeling:blue"
|
||||||
USER_ID_2 = "@bright:blue"
|
USER_ID_2 = "@bright:blue"
|
||||||
OUTLIER = {"outlier": True}
|
OUTLIER = {"outlier": True}
|
||||||
ROOM_ID = "!room:blue"
|
ROOM_ID = "!room:blue"
|
||||||
|
|
||||||
|
|
||||||
|
def dict_equals(self, other):
|
||||||
|
return self.__dict__ == other.__dict__
|
||||||
|
|
||||||
|
|
||||||
|
def patch__eq__(cls):
|
||||||
|
eq = getattr(cls, "__eq__", None)
|
||||||
|
cls.__eq__ = dict_equals
|
||||||
|
|
||||||
|
def unpatch():
|
||||||
|
if eq is not None:
|
||||||
|
cls.__eq__ = eq
|
||||||
|
return unpatch
|
||||||
|
|
||||||
|
|
||||||
class SlavedEventStoreTestCase(BaseSlavedStoreTestCase):
|
class SlavedEventStoreTestCase(BaseSlavedStoreTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
# Patch up the equality operator for events so that we can check
|
||||||
|
# whether lists of events match using assertEquals
|
||||||
|
self.unpatches = [
|
||||||
|
patch__eq__(_EventInternalMetadata),
|
||||||
|
patch__eq__(FrozenEvent),
|
||||||
|
]
|
||||||
|
return super(SlavedEventStoreTestCase, self).setUp()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
[unpatch() for unpatch in self.unpatches]
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def test_room_name_and_aliases(self):
|
def test_room_name_and_aliases(self):
|
||||||
create = yield self.persist(type="m.room.create", key="", creator=USER_ID)
|
create = yield self.persist(type="m.room.create", key="", creator=USER_ID)
|
||||||
|
@ -116,6 +143,68 @@ class SlavedEventStoreTestCase(BaseSlavedStoreTestCase):
|
||||||
yield self.check("get_users_in_room", (ROOM_ID,), [USER_ID])
|
yield self.check("get_users_in_room", (ROOM_ID,), [USER_ID])
|
||||||
yield self.check("get_rooms_for_user", (USER_ID_2,), [])
|
yield self.check("get_rooms_for_user", (USER_ID_2,), [])
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def test_get_latest_event_ids_in_room(self):
|
||||||
|
create = yield self.persist(type="m.room.create", key="", creator=USER_ID)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_latest_event_ids_in_room", (ROOM_ID,), [create.event_id]
|
||||||
|
)
|
||||||
|
|
||||||
|
join = yield self.persist(
|
||||||
|
type="m.room.member", key=USER_ID, membership="join",
|
||||||
|
prev_events=[(create.event_id, {})],
|
||||||
|
)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_latest_event_ids_in_room", (ROOM_ID,), [join.event_id]
|
||||||
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def test_get_current_state(self):
|
||||||
|
# Create the room.
|
||||||
|
create = yield self.persist(type="m.room.create", key="", creator=USER_ID)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_current_state_for_key", (ROOM_ID, "m.room.member", USER_ID), []
|
||||||
|
)
|
||||||
|
|
||||||
|
# Join the room.
|
||||||
|
join1 = yield self.persist(
|
||||||
|
type="m.room.member", key=USER_ID, membership="join",
|
||||||
|
)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_current_state_for_key", (ROOM_ID, "m.room.member", USER_ID),
|
||||||
|
[join1]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add some other user to the room.
|
||||||
|
join2 = yield self.persist(
|
||||||
|
type="m.room.member", key=USER_ID_2, membership="join",
|
||||||
|
)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_current_state_for_key", (ROOM_ID, "m.room.member", USER_ID_2),
|
||||||
|
[join2]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Leave the room, then rejoin the room clobbering state.
|
||||||
|
yield self.persist(type="m.room.member", key=USER_ID, membership="leave")
|
||||||
|
join3 = yield self.persist(
|
||||||
|
type="m.room.member", key=USER_ID, membership="join",
|
||||||
|
reset_state=[create]
|
||||||
|
)
|
||||||
|
yield self.replicate()
|
||||||
|
yield self.check(
|
||||||
|
"get_current_state_for_key", (ROOM_ID, "m.room.member", USER_ID_2),
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
yield self.check(
|
||||||
|
"get_current_state_for_key", (ROOM_ID, "m.room.member", USER_ID),
|
||||||
|
[join3]
|
||||||
|
)
|
||||||
|
|
||||||
event_id = 0
|
event_id = 0
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
|
Loading…
Reference in New Issue