3636from synapse .rest import admin
3737from synapse .rest .client import knock , login , room
3838from synapse .server import HomeServer
39- from synapse .types import JsonDict , StreamKeyType , UserID , create_requester
39+ from synapse .types import (
40+ JsonDict ,
41+ MultiWriterStreamToken ,
42+ RoomStreamToken ,
43+ StreamKeyType ,
44+ UserID ,
45+ create_requester ,
46+ )
4047from synapse .util import Clock
4148
4249import tests .unittest
@@ -999,7 +1006,13 @@ def test_wait_for_future_sync_token(self) -> None:
9991006
10001007 self .get_success (sync_d , by = 1.0 )
10011008
1002- def test_wait_for_invalid_future_sync_token (self ) -> None :
1009+ @parameterized .expand (
1010+ [(key ,) for key in StreamKeyType .__members__ .values ()],
1011+ name_func = lambda func , _ , param : f"{ func .__name__ } _{ param .args [0 ].name } " ,
1012+ )
1013+ def test_wait_for_invalid_future_sync_token (
1014+ self , stream_key : StreamKeyType
1015+ ) -> None :
10031016 """Like the previous test, except we give a token that has a stream
10041017 position ahead of what is in the DB, i.e. its invalid and we shouldn't
10051018 wait for the stream to advance (as it may never do so).
@@ -1010,11 +1023,23 @@ def test_wait_for_invalid_future_sync_token(self) -> None:
10101023 """
10111024 user = self .register_user ("alice" , "password" )
10121025
1013- # Create a token and arbitrarily advance one of the streams.
1026+ # Create a token and advance one of the streams.
10141027 current_token = self .hs .get_event_sources ().get_current_token ()
1015- since_token = current_token .copy_and_advance (
1016- StreamKeyType .PRESENCE , current_token .presence_key + 1
1017- )
1028+ token_value = current_token .get_field (stream_key )
1029+
1030+ # How we advance the streams depends on the type.
1031+ if isinstance (token_value , int ):
1032+ since_token = current_token .copy_and_advance (stream_key , token_value + 1 )
1033+ elif isinstance (token_value , MultiWriterStreamToken ):
1034+ since_token = current_token .copy_and_advance (
1035+ stream_key , MultiWriterStreamToken (stream = token_value .stream + 1 )
1036+ )
1037+ elif isinstance (token_value , RoomStreamToken ):
1038+ since_token = current_token .copy_and_advance (
1039+ stream_key , RoomStreamToken (stream = token_value .stream + 1 )
1040+ )
1041+ else :
1042+ raise Exception ("Unreachable" )
10181043
10191044 sync_d = defer .ensureDeferred (
10201045 self .sync_handler .wait_for_sync_for_user (
0 commit comments