Skip to content

Commit bff6ad0

Browse files
authoredFeb 27, 2025··
Open up more ServerRoom functions (#765)
* Open up more ServerRoom functions This allows more experimentation because it allows Complement to make ServerRoom structs for unknown room versions. * Include AddRoom
1 parent 918bade commit bff6ad0

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed
 

‎federation/server.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func (s *Server) MustMakeRoom(t ct.TestLike, roomVer gomatrixserverlib.RoomVersi
183183
// * prevents homeservers from getting confused when multiple test cases re-use the same homeserver deployment.
184184
roomID := fmt.Sprintf("!%d-%s:%s", len(s.rooms), util.RandomString(18), s.serverName)
185185
t.Logf("Creating room %s with version %s", roomID, roomVer)
186-
room := newRoom(roomVer, roomID)
186+
room := NewServerRoom(roomVer, roomID)
187187

188188
// sign all these events
189189
for _, ev := range events {
@@ -425,9 +425,9 @@ func (s *Server) MustJoinRoom(t ct.TestLike, deployment FederationDeployment, re
425425
ct.Fatalf(t, "MustJoinRoom: send_join failed: %v", err)
426426
}
427427
stateEvents := sendJoinResp.StateEvents.UntrustedEvents(roomVer)
428-
room := newRoom(roomVer, roomID)
428+
room := NewServerRoom(roomVer, roomID)
429429
for _, ev := range stateEvents {
430-
room.replaceCurrentState(ev)
430+
room.ReplaceCurrentState(ev)
431431
}
432432
room.AddEvent(joinEvent)
433433
s.rooms[roomID] = room
@@ -480,6 +480,11 @@ func (s *Server) MustLeaveRoom(t ct.TestLike, deployment FederationDeployment, r
480480
t.Logf("Server.MustLeaveRoom left room ID %s", roomID)
481481
}
482482

483+
// AddRoom is a low-level function to add a custom room to the server. Useful to mix custom logic with helper functions.
484+
func (s *Server) AddRoom(room *ServerRoom) {
485+
s.rooms[room.RoomID] = room
486+
}
487+
483488
// ValidFederationRequest is a wrapper around http.HandlerFunc which automatically validates the incoming
484489
// federation request and supports sending back JSON. Fails the test if the request is not valid.
485490
func (s *Server) ValidFederationRequest(t ct.TestLike, handler func(fr *fclient.FederationRequest, pathParams map[string]string) util.JSONResponse) http.HandlerFunc {

‎federation/server_room.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ type ServerRoom struct {
4545
waitersMu *sync.Mutex
4646
}
4747

48-
// newRoom creates an empty room structure with no events
49-
func newRoom(roomVer gomatrixserverlib.RoomVersion, roomId string) *ServerRoom {
48+
// NewServerRoom creates an empty room structure with no events
49+
func NewServerRoom(roomVer gomatrixserverlib.RoomVersion, roomId string) *ServerRoom {
5050
return &ServerRoom{
5151
RoomID: roomId,
5252
Version: roomVer,
@@ -61,7 +61,7 @@ func newRoom(roomVer gomatrixserverlib.RoomVersion, roomId string) *ServerRoom {
6161
// Updates depth and forward extremities.
6262
func (r *ServerRoom) AddEvent(ev gomatrixserverlib.PDU) {
6363
if ev.StateKey() != nil {
64-
r.replaceCurrentState(ev)
64+
r.ReplaceCurrentState(ev)
6565
}
6666
r.TimelineMutex.Lock()
6767
r.Timeline = append(r.Timeline, ev)
@@ -135,9 +135,9 @@ func (r *ServerRoom) AuthEvents(sn gomatrixserverlib.StateNeeded) (eventIDs []st
135135
return
136136
}
137137

138-
// replaceCurrentState inserts a new state event for this room or replaces current state depending
139-
// on the (type, state_key) provided.
140-
func (r *ServerRoom) replaceCurrentState(ev gomatrixserverlib.PDU) {
138+
// ReplaceCurrentState inserts a new state event for this room or replaces current state depending
139+
// on the (type, state_key) provided. The event provided must be a state event.
140+
func (r *ServerRoom) ReplaceCurrentState(ev gomatrixserverlib.PDU) {
141141
tuple := fmt.Sprintf("%s\x1f%s", ev.Type(), *ev.StateKey())
142142
r.StateMutex.Lock()
143143
r.State[tuple] = ev

0 commit comments

Comments
 (0)
Please sign in to comment.