@@ -29,55 +29,6 @@ var maxCanonicalJSONInt = math.Pow(2, 53) - 1
2929
3030const roomVersion12 = "12"
3131
32- var V12ServerRoom = federation.ServerRoomImplCustom {
33- ProtoEventCreatorFn : Protov12EventCreator ,
34- }
35-
36- // Override how Complement makes proto events so we can conditionally disable/enable the inclusion of the create event
37- // depending on whether we're running in combined mode or not.
38- // Complement also doesn't set the room version correctly on the ProtoEvent as this was a new addition to GMSL.
39- func Protov12EventCreator (def federation.ServerRoomImpl , room * federation.ServerRoom , ev federation.Event ) (* gomatrixserverlib.ProtoEvent , error ) {
40- var prevEvents interface {}
41- if ev .PrevEvents != nil {
42- // We deliberately want to set the prev events.
43- prevEvents = ev .PrevEvents
44- } else {
45- // No other prev events were supplied so we'll just
46- // use the forward extremities of the room, which is
47- // the usual behaviour.
48- prevEvents = room .ForwardExtremities
49- }
50- proto := gomatrixserverlib.ProtoEvent {
51- SenderID : ev .Sender ,
52- Depth : int64 (room .Depth + 1 ), // depth starts at 1
53- Type : ev .Type ,
54- StateKey : ev .StateKey ,
55- RoomID : room .RoomID ,
56- PrevEvents : prevEvents ,
57- AuthEvents : ev .AuthEvents ,
58- Redacts : ev .Redacts ,
59- Version : gomatrixserverlib .MustGetRoomVersion (room .Version ),
60- }
61- if err := proto .SetContent (ev .Content ); err != nil {
62- return nil , fmt .Errorf ("EventCreator: failed to marshal event content: %s - %+v" , err , ev .Content )
63- }
64- if err := proto .SetUnsigned (ev .Content ); err != nil {
65- return nil , fmt .Errorf ("EventCreator: failed to marshal event unsigned: %s - %+v" , err , ev .Unsigned )
66- }
67- if proto .AuthEvents == nil {
68- var stateNeeded gomatrixserverlib.StateNeeded
69- // this does the right thing for v12
70- stateNeeded , err := gomatrixserverlib .StateNeededForProtoEvent (& proto )
71- if err != nil {
72- return nil , fmt .Errorf ("EventCreator: failed to work out auth_events : %s" , err )
73- }
74- // we never include the create event if the HS supports MSC4291
75- stateNeeded .Create = false
76- proto .AuthEvents = room .AuthEvents (stateNeeded )
77- }
78- return & proto , nil
79- }
80-
8132// Test that the creator can kick an admin created both via
8233// trusted_private_chat and by explicit promotion, including beyond PL100.
8334// Also checks the creator isn't in the PL event.
@@ -246,7 +197,7 @@ func TestMSC4289PrivilegedRoomCreators(t *testing.T) {
246197 "room_version" : roomVersion12 ,
247198 "preset" : "public_chat" ,
248199 })
249- room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , bob , federation . WithRoomOpts ( federation . WithImpl ( & V12ServerRoom )) )
200+ room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , bob )
250201 plEventID := alice .SendEventSynced (t , roomID , b.Event {
251202 Type : spec .MRoomPowerLevels ,
252203 StateKey : b .Ptr ("" ),
@@ -663,6 +614,36 @@ func TestMSC4291RoomIDAsHashOfCreateEvent(t *testing.T) {
663614 assertCreateEventIsRoomID (t , alice , roomID )
664615}
665616
617+ func TestComplementCanCreateValidV12Rooms (t * testing.T ) {
618+ deployment := complement .Deploy (t , 1 )
619+ defer deployment .Destroy (t )
620+ alice := deployment .Register (t , "hs1" , helpers.RegistrationOpts {})
621+ srv := federation .NewServer (t , deployment ,
622+ federation .HandleKeyRequests (),
623+ federation .HandleMakeSendJoinRequests (),
624+ federation .HandleTransactionRequests (nil , nil ),
625+ federation .HandleEventRequests (),
626+ )
627+ srv .UnexpectedRequestsAreErrors = false
628+ cancel := srv .Listen ()
629+ defer cancel ()
630+ bob := srv .UserID ("bob" )
631+ srvRoom := srv .MustMakeRoom (t , roomVersion12 , federation .InitialRoomEvents (roomVersion12 , bob ))
632+ alice .MustJoinRoom (t , srvRoom .RoomID , []spec.ServerName {srv .ServerName ()})
633+
634+ msg := srv .MustCreateEvent (t , srvRoom , federation.Event {
635+ Type : "m.room.message" ,
636+ Sender : bob ,
637+ Content : map [string ]interface {}{
638+ "msgtype" : "m.text" ,
639+ "body" : "Hello world" ,
640+ },
641+ })
642+ srvRoom .AddEvent (msg )
643+ srv .MustSendTransaction (t , deployment , "hs1" , []json.RawMessage {msg .JSON ()}, nil )
644+ alice .MustSyncUntil (t , client.SyncReq {}, client .SyncTimelineHasEventID (srvRoom .RoomID , msg .EventID ()))
645+ }
646+
666647func TestMSC4291RoomIDAsHashOfCreateEvent_AuthEventsOmitsCreateEvent (t * testing.T ) {
667648 deployment := complement .Deploy (t , 1 )
668649 defer deployment .Destroy (t )
@@ -683,7 +664,7 @@ func TestMSC4291RoomIDAsHashOfCreateEvent_AuthEventsOmitsCreateEvent(t *testing.
683664 defer cancel ()
684665 bob := srv .UserID ("bob" )
685666
686- room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , bob , federation . WithRoomOpts ( federation . WithImpl ( & V12ServerRoom )) )
667+ room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , bob )
687668
688669 createEvent := room .CurrentState (spec .MRoomCreate , "" )
689670 if createEvent == nil {
@@ -954,7 +935,7 @@ func TestMSC4297StateResolutionV2_1_starts_from_empty_set(t *testing.T) {
954935 "preset" : "public_chat" ,
955936 })
956937 bob .MustJoinRoom (t , roomID , []spec.ServerName {"hs1" })
957- room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , charlie , federation . WithRoomOpts ( federation . WithImpl ( & V12ServerRoom )) )
938+ room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , charlie )
958939 joinRulePublic := room .CurrentState (spec .MRoomJoinRules , "" )
959940 aliceJoin := room .CurrentState (spec .MRoomMember , alice .UserID )
960941 synchronisationEventID := bob .SendEventSynced (t , room .RoomID , b.Event {
@@ -1150,7 +1131,7 @@ func TestMSC4297StateResolutionV2_1_includes_conflicted_subgraph(t *testing.T) {
11501131 })
11511132 alice .MustJoinRoom (t , roomID , []spec.ServerName {"hs1" })
11521133 bob .MustJoinRoom (t , roomID , []spec.ServerName {"hs1" })
1153- room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , charlie , federation . WithRoomOpts ( federation . WithImpl ( & V12ServerRoom )) )
1134+ room := srv .MustJoinRoom (t , deployment , "hs1" , roomID , charlie )
11541135 firstPowerLevelEvent := room .CurrentState (spec .MRoomPowerLevels , "" )
11551136 alice .SendEventSynced (t , roomID , b.Event {
11561137 Type : spec .MRoomPowerLevels ,
0 commit comments