Skip to content

Commit 687ad36

Browse files
committed
Faster joins tests: make request handlers more specific
I'm going to add a test which will involve *multiple* /state and /state_ids requests, so we need to make the registered handlers more selective.
1 parent 4418d2c commit 687ad36

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

tests/federation_room_join_partial_state_test.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,23 @@ func beginPartialStateJoin(t *testing.T, deployment *docker.Deployment, joiningU
589589
},
590590
}))
591591

592-
// register a handler for /state_ids requests, which finishes fedStateIdsRequestReceivedWaiter, then
592+
// register a handler for /state_ids requests for the most recent event,
593+
// which finishes fedStateIdsRequestReceivedWaiter, then
593594
// waits for fedStateIdsSendResponseWaiter and sends a reply
594-
handleStateIdsRequests(t, result.Server, result.ServerRoom, result.fedStateIdsRequestReceivedWaiter, result.fedStateIdsSendResponseWaiter)
595+
lastEvent := result.ServerRoom.Timeline[len(result.ServerRoom.Timeline)-1]
596+
currentState := result.ServerRoom.AllCurrentState()
597+
handleStateIdsRequests(
598+
t, result.Server, result.ServerRoom,
599+
lastEvent.EventID(), currentState,
600+
result.fedStateIdsRequestReceivedWaiter, result.fedStateIdsSendResponseWaiter,
601+
)
595602

596603
// a handler for /state requests, which sends a sensible response
597-
handleStateRequests(t, result.Server, result.ServerRoom, nil, nil)
604+
handleStateRequests(
605+
t, result.Server, result.ServerRoom,
606+
lastEvent.EventID(), currentState,
607+
nil, nil,
608+
)
598609

599610
// have joiningUser join the room by room ID.
600611
joiningUser.JoinRoom(t, result.ServerRoom.RoomID, []string{result.Server.ServerName()})
@@ -630,16 +641,20 @@ func (psj *partialStateJoinResult) FinishStateRequest() {
630641
psj.fedStateIdsSendResponseWaiter.Finish()
631642
}
632643

633-
// handleStateIdsRequests registers a handler for /state_ids requests for serverRoom.
644+
// handleStateIdsRequests registers a handler for /state_ids requests for 'eventID'
645+
//
646+
// the returned state is as passed in 'roomState'
634647
//
635648
// if requestReceivedWaiter is not nil, it will be Finish()ed when the request arrives.
636649
// if sendResponseWaiter is not nil, we will Wait() for it to finish before sending the response.
637650
func handleStateIdsRequests(
638651
t *testing.T, srv *federation.Server, serverRoom *federation.ServerRoom,
652+
eventID string, roomState []*gomatrixserverlib.Event,
639653
requestReceivedWaiter *Waiter, sendResponseWaiter *Waiter,
640654
) {
641-
srv.Mux().Handle(
655+
srv.Mux().NewRoute().Methods("GET").Path(
642656
fmt.Sprintf("/_matrix/federation/v1/state_ids/%s", serverRoom.RoomID),
657+
).Queries("event_id", eventID).Handler(
643658
http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
644659
queryParams := req.URL.Query()
645660
t.Logf("Incoming state_ids request for event %s in room %s", queryParams["event_id"], serverRoom.RoomID)
@@ -652,8 +667,8 @@ func handleStateIdsRequests(
652667
t.Logf("Replying to /state_ids request")
653668

654669
res := gomatrixserverlib.RespStateIDs{
655-
AuthEventIDs: eventIDsFromEvents(serverRoom.AuthChain()),
656-
StateEventIDs: eventIDsFromEvents(serverRoom.AllCurrentState()),
670+
AuthEventIDs: eventIDsFromEvents(serverRoom.AuthChainForEvents(roomState)),
671+
StateEventIDs: eventIDsFromEvents(roomState),
657672
}
658673
w.WriteHeader(200)
659674
jsonb, _ := json.Marshal(res)
@@ -662,19 +677,24 @@ func handleStateIdsRequests(
662677
t.Errorf("Error writing to request: %v", err)
663678
}
664679
}),
665-
).Methods("GET")
680+
)
681+
t.Logf("Registered state_ids handler for event %s", eventID)
666682
}
667683

668-
// makeStateHandler returns a handler for /state requests for serverRoom.
684+
// makeStateHandler returns a handler for /state requests for 'eventID'
685+
//
686+
// the returned state is as passed in 'roomState'
669687
//
670688
// if requestReceivedWaiter is not nil, it will be Finish()ed when the request arrives.
671689
// if sendResponseWaiter is not nil, we will Wait() for it to finish before sending the response.
672690
func handleStateRequests(
673691
t *testing.T, srv *federation.Server, serverRoom *federation.ServerRoom,
692+
eventID string, roomState []*gomatrixserverlib.Event,
674693
requestReceivedWaiter *Waiter, sendResponseWaiter *Waiter,
675694
) {
676-
srv.Mux().Handle(
695+
srv.Mux().NewRoute().Methods("GET").Path(
677696
fmt.Sprintf("/_matrix/federation/v1/state/%s", serverRoom.RoomID),
697+
).Queries("event_id", eventID).Handler(
678698
http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
679699
queryParams := req.URL.Query()
680700
t.Logf("Incoming state request for event %s in room %s", queryParams["event_id"], serverRoom.RoomID)
@@ -685,8 +705,8 @@ func handleStateRequests(
685705
sendResponseWaiter.Waitf(t, 60*time.Second, "Waiting for /state request")
686706
}
687707
res := gomatrixserverlib.RespState{
688-
AuthEvents: gomatrixserverlib.NewEventJSONsFromEvents(serverRoom.AuthChain()),
689-
StateEvents: gomatrixserverlib.NewEventJSONsFromEvents(serverRoom.AllCurrentState()),
708+
AuthEvents: gomatrixserverlib.NewEventJSONsFromEvents(serverRoom.AuthChainForEvents(roomState)),
709+
StateEvents: gomatrixserverlib.NewEventJSONsFromEvents(roomState),
690710
}
691711
w.WriteHeader(200)
692712
jsonb, _ := json.Marshal(res)
@@ -695,7 +715,7 @@ func handleStateRequests(
695715
t.Errorf("Error writing to request: %v", err)
696716
}
697717
}),
698-
).Methods("GET")
718+
)
699719
}
700720

701721
func eventIDsFromEvents(he []*gomatrixserverlib.Event) []string {

0 commit comments

Comments
 (0)