Refactor client event test to remove duplication

This commit is contained in:
Devon Hudson 2023-08-31 09:15:04 -06:00
parent b4e8a02fef
commit 262197b614
No known key found for this signature in database
GPG key ID: CD06B18E77F6A628

View file

@ -29,6 +29,58 @@ import (
const testSenderID = "testSenderID" const testSenderID = "testSenderID"
const testUserID = "@test:localhost" const testUserID = "@test:localhost"
type EventFieldsToVerify struct {
EventID string
Type string
OriginServerTS spec.Timestamp
StateKey *string
Content spec.RawJSON
Unsigned spec.RawJSON
Sender string
Depth int64
PrevEvents []string
AuthEvents []string
}
func verifyEventFields(t *testing.T, got EventFieldsToVerify, want EventFieldsToVerify) {
if got.EventID != want.EventID {
t.Errorf("ClientEvent.EventID: wanted %s, got %s", want.EventID, got.EventID)
}
if got.OriginServerTS != want.OriginServerTS {
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", want.OriginServerTS, got.OriginServerTS)
}
if got.StateKey == nil && want.StateKey != nil {
t.Errorf("ClientEvent.StateKey: no state key present when one was wanted: %s", *want.StateKey)
}
if got.StateKey != nil && want.StateKey == nil {
t.Errorf("ClientEvent.StateKey: state key present when one was not wanted: %s", *got.StateKey)
}
if got.StateKey != nil && want.StateKey != nil && *got.StateKey != *want.StateKey {
t.Errorf("ClientEvent.StateKey: wanted %s, got %s", *want.StateKey, *got.StateKey)
}
if got.Type != want.Type {
t.Errorf("ClientEvent.Type: wanted %s, got %s", want.Type, got.Type)
}
if !bytes.Equal(got.Content, want.Content) {
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(want.Content), string(got.Content))
}
if !bytes.Equal(got.Unsigned, want.Unsigned) {
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(want.Unsigned), string(got.Unsigned))
}
if got.Sender != want.Sender {
t.Errorf("ClientEvent.Sender: wanted %s, got %s", want.Sender, got.Sender)
}
if got.Depth != want.Depth {
t.Errorf("ClientEvent.Depth: wanted %d, got %d", want.Depth, got.Depth)
}
if !reflect.DeepEqual(got.PrevEvents, want.PrevEvents) {
t.Errorf("ClientEvent.PrevEvents: wanted %v, got %v", want.PrevEvents, got.PrevEvents)
}
if !reflect.DeepEqual(got.AuthEvents, want.AuthEvents) {
t.Errorf("ClientEvent.AuthEvents: wanted %v, got %v", want.AuthEvents, got.AuthEvents)
}
}
func TestToClientEvent(t *testing.T) { // nolint: gocyclo func TestToClientEvent(t *testing.T) { // nolint: gocyclo
ev, err := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON([]byte(`{ ev, err := gomatrixserverlib.MustGetRoomVersion(gomatrixserverlib.RoomVersionV1).NewEventFromTrustedJSON([]byte(`{
"type": "m.room.name", "type": "m.room.name",
@ -55,27 +107,27 @@ func TestToClientEvent(t *testing.T) { // nolint: gocyclo
} }
sk := "" sk := ""
ce := ToClientEvent(ev, FormatAll, userID.String(), &sk, ev.Unsigned()) ce := ToClientEvent(ev, FormatAll, userID.String(), &sk, ev.Unsigned())
if ce.EventID != ev.EventID() {
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev.EventID(), ce.EventID) verifyEventFields(t,
} EventFieldsToVerify{
if ce.OriginServerTS != ev.OriginServerTS() { EventID: ce.EventID,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev.OriginServerTS(), ce.OriginServerTS) Type: ce.Type,
} OriginServerTS: ce.OriginServerTS,
if ce.StateKey == nil || *ce.StateKey != "" { StateKey: ce.StateKey,
t.Errorf("ClientEvent.StateKey: wanted '', got %v", ce.StateKey) Content: ce.Content,
} Unsigned: ce.Unsigned,
if ce.Type != ev.Type() { Sender: ce.Sender,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev.Type(), ce.Type) },
} EventFieldsToVerify{
if !bytes.Equal(ce.Content, ev.Content()) { EventID: ev.EventID(),
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev.Content()), string(ce.Content)) Type: ev.Type(),
} OriginServerTS: ev.OriginServerTS(),
if !bytes.Equal(ce.Unsigned, ev.Unsigned()) { StateKey: &sk,
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev.Unsigned()), string(ce.Unsigned)) Content: ev.Content(),
} Unsigned: ev.Unsigned(),
if ce.Sender != userID.String() { Sender: userID.String(),
t.Errorf("ClientEvent.Sender: wanted %s, got %s", userID.String(), ce.Sender) })
}
j, err := json.Marshal(ce) j, err := json.Marshal(ce)
if err != nil { if err != nil {
t.Fatalf("failed to Marshal ClientEvent: %s", err) t.Fatalf("failed to Marshal ClientEvent: %s", err)
@ -155,36 +207,32 @@ func TestToClientEventFormatSyncFederation(t *testing.T) { // nolint: gocyclo
} }
sk := "" sk := ""
ce := ToClientEvent(ev, FormatSyncFederation, userID.String(), &sk, ev.Unsigned()) ce := ToClientEvent(ev, FormatSyncFederation, userID.String(), &sk, ev.Unsigned())
if ce.EventID != ev.EventID() {
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev.EventID(), ce.EventID) verifyEventFields(t,
} EventFieldsToVerify{
if ce.OriginServerTS != ev.OriginServerTS() { EventID: ce.EventID,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev.OriginServerTS(), ce.OriginServerTS) Type: ce.Type,
} OriginServerTS: ce.OriginServerTS,
if ce.StateKey == nil || *ce.StateKey != "" { StateKey: ce.StateKey,
t.Errorf("ClientEvent.StateKey: wanted '', got %v", ce.StateKey) Content: ce.Content,
} Unsigned: ce.Unsigned,
if ce.Type != ev.Type() { Sender: ce.Sender,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev.Type(), ce.Type) Depth: ce.Depth,
} PrevEvents: ce.PrevEvents,
if !bytes.Equal(ce.Content, ev.Content()) { AuthEvents: ce.AuthEvents,
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev.Content()), string(ce.Content)) },
} EventFieldsToVerify{
if !bytes.Equal(ce.Unsigned, ev.Unsigned()) { EventID: ev.EventID(),
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev.Unsigned()), string(ce.Unsigned)) Type: ev.Type(),
} OriginServerTS: ev.OriginServerTS(),
if ce.Sender != userID.String() { StateKey: &sk,
t.Errorf("ClientEvent.Sender: wanted %s, got %s", userID.String(), ce.Sender) Content: ev.Content(),
} Unsigned: ev.Unsigned(),
if ce.Depth != ev.Depth() { Sender: userID.String(),
t.Errorf("ClientEvent.Depth: wanted %d, got %d", ev.Depth(), ce.Depth) Depth: ev.Depth(),
} PrevEvents: ev.PrevEventIDs(),
if !reflect.DeepEqual(ce.PrevEvents, ev.PrevEventIDs()) { AuthEvents: ev.AuthEventIDs(),
t.Errorf("ClientEvent.PrevEvents: wanted %v, got %v", ev.PrevEventIDs(), ce.PrevEvents) })
}
if !reflect.DeepEqual(ce.AuthEvents, ev.AuthEventIDs()) {
t.Errorf("ClientEvent.AuthEvents: wanted %v, got %v", ev.AuthEventIDs(), ce.AuthEvents)
}
} }
func userIDForSender(roomID spec.RoomID, senderID spec.SenderID) (*spec.UserID, error) { func userIDForSender(roomID spec.RoomID, senderID spec.SenderID) (*spec.UserID, error) {
@ -255,68 +303,59 @@ func TestToClientEventsFormatSyncFederation(t *testing.T) { // nolint: gocyclo
clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSyncFederation, userIDForSender) clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSyncFederation, userIDForSender)
ce := clientEvents[0] ce := clientEvents[0]
if ce.EventID != ev.EventID() { sk := testSenderID
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev.EventID(), ce.EventID) verifyEventFields(t,
} EventFieldsToVerify{
if ce.OriginServerTS != ev.OriginServerTS() { EventID: ce.EventID,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev.OriginServerTS(), ce.OriginServerTS) Type: ce.Type,
} OriginServerTS: ce.OriginServerTS,
if ce.StateKey == nil || *ce.StateKey != testSenderID { StateKey: ce.StateKey,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testSenderID, ce.StateKey) Content: ce.Content,
} Unsigned: ce.Unsigned,
if ce.Type != ev.Type() { Sender: ce.Sender,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev.Type(), ce.Type) Depth: ce.Depth,
} PrevEvents: ce.PrevEvents,
if !bytes.Equal(ce.Content, ev.Content()) { AuthEvents: ce.AuthEvents,
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev.Content()), string(ce.Content)) },
} EventFieldsToVerify{
if !bytes.Equal(ce.Unsigned, ev.Unsigned()) { EventID: ev.EventID(),
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev.Unsigned()), string(ce.Unsigned)) Type: ev.Type(),
} OriginServerTS: ev.OriginServerTS(),
if ce.Sender != testSenderID { StateKey: &sk,
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testSenderID, ce.Sender) Content: ev.Content(),
} Unsigned: ev.Unsigned(),
if ce.Depth != ev.Depth() { Sender: testSenderID,
t.Errorf("ClientEvent.Depth: wanted %d, got %d", ev.Depth(), ce.Depth) Depth: ev.Depth(),
} PrevEvents: ev.PrevEventIDs(),
if !reflect.DeepEqual(ce.PrevEvents, ev.PrevEventIDs()) { AuthEvents: ev.AuthEventIDs(),
t.Errorf("ClientEvent.PrevEvents: wanted %v, got %v", ev.PrevEventIDs(), ce.PrevEvents) })
}
if !reflect.DeepEqual(ce.AuthEvents, ev.AuthEventIDs()) {
t.Errorf("ClientEvent.AuthEvents: wanted %v, got %v", ev.AuthEventIDs(), ce.AuthEvents)
}
ce2 := clientEvents[1] ce2 := clientEvents[1]
if ce2.EventID != ev2.EventID() { verifyEventFields(t,
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev2.EventID(), ce2.EventID) EventFieldsToVerify{
} EventID: ce2.EventID,
if ce2.OriginServerTS != ev2.OriginServerTS() { Type: ce2.Type,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev2.OriginServerTS(), ce2.OriginServerTS) OriginServerTS: ce2.OriginServerTS,
} StateKey: ce2.StateKey,
if ce2.StateKey == nil || *ce.StateKey != testSenderID { Content: ce2.Content,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testSenderID, ce2.StateKey) Unsigned: ce2.Unsigned,
} Sender: ce2.Sender,
if ce2.Type != ev2.Type() { Depth: ce2.Depth,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev2.Type(), ce2.Type) PrevEvents: ce2.PrevEvents,
} AuthEvents: ce2.AuthEvents,
if !bytes.Equal(ce2.Content, ev2.Content()) { },
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev2.Content()), string(ce2.Content)) EventFieldsToVerify{
} EventID: ev2.EventID(),
if !bytes.Equal(ce2.Unsigned, ev2.Unsigned()) { Type: ev2.Type(),
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev2.Unsigned()), string(ce2.Unsigned)) OriginServerTS: ev2.OriginServerTS(),
} StateKey: &sk,
if ce2.Sender != testSenderID { Content: ev2.Content(),
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testSenderID, ce2.Sender) Unsigned: ev2.Unsigned(),
} Sender: testSenderID,
if ce2.Depth != ev2.Depth() { Depth: ev2.Depth(),
t.Errorf("ClientEvent.Depth: wanted %d, got %d", ev2.Depth(), ce2.Depth) PrevEvents: ev2.PrevEventIDs(),
} AuthEvents: ev2.AuthEventIDs(),
if !reflect.DeepEqual(ce2.PrevEvents, ev2.PrevEventIDs()) { })
t.Errorf("ClientEvent.PrevEvents: wanted %v, got %v", ev2.PrevEventIDs(), ce2.PrevEvents)
}
if !reflect.DeepEqual(ce2.AuthEvents, ev2.AuthEventIDs()) {
t.Errorf("ClientEvent.AuthEvents: wanted %v, got %v", ev2.AuthEventIDs(), ce2.AuthEvents)
}
} }
func TestToClientEventsFormatSync(t *testing.T) { // nolint: gocyclo func TestToClientEventsFormatSync(t *testing.T) { // nolint: gocyclo
@ -363,27 +402,26 @@ func TestToClientEventsFormatSync(t *testing.T) { // nolint: gocyclo
clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSync, userIDForSender) clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSync, userIDForSender)
ce := clientEvents[0] ce := clientEvents[0]
if ce.EventID != ev.EventID() { sk := testUserID
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev.EventID(), ce.EventID) verifyEventFields(t,
} EventFieldsToVerify{
if ce.OriginServerTS != ev.OriginServerTS() { EventID: ce.EventID,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev.OriginServerTS(), ce.OriginServerTS) Type: ce.Type,
} OriginServerTS: ce.OriginServerTS,
if ce.StateKey == nil || *ce.StateKey != testUserID { StateKey: ce.StateKey,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testUserID, ce.StateKey) Content: ce.Content,
} Unsigned: ce.Unsigned,
if ce.Type != ev.Type() { Sender: ce.Sender,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev.Type(), ce.Type) },
} EventFieldsToVerify{
if !bytes.Equal(ce.Content, ev.Content()) { EventID: ev.EventID(),
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev.Content()), string(ce.Content)) Type: ev.Type(),
} OriginServerTS: ev.OriginServerTS(),
if !bytes.Equal(ce.Unsigned, ev.Unsigned()) { StateKey: &sk,
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev.Unsigned()), string(ce.Unsigned)) Content: ev.Content(),
} Unsigned: ev.Unsigned(),
if ce.Sender != testUserID { Sender: testUserID,
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testUserID, ce.Sender) })
}
var prev PrevEventRef var prev PrevEventRef
prev.PrevContent = []byte(`{"name": "Goodbye World 2"}`) prev.PrevContent = []byte(`{"name": "Goodbye World 2"}`)
@ -391,27 +429,25 @@ func TestToClientEventsFormatSync(t *testing.T) { // nolint: gocyclo
expectedUnsigned, _ := json.Marshal(prev) expectedUnsigned, _ := json.Marshal(prev)
ce2 := clientEvents[1] ce2 := clientEvents[1]
if ce2.EventID != ev2.EventID() { verifyEventFields(t,
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev2.EventID(), ce2.EventID) EventFieldsToVerify{
} EventID: ce2.EventID,
if ce2.OriginServerTS != ev2.OriginServerTS() { Type: ce2.Type,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev2.OriginServerTS(), ce2.OriginServerTS) OriginServerTS: ce2.OriginServerTS,
} StateKey: ce2.StateKey,
if ce2.StateKey == nil || *ce.StateKey != testUserID { Content: ce2.Content,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testUserID, ce2.StateKey) Unsigned: ce2.Unsigned,
} Sender: ce2.Sender,
if ce2.Type != ev2.Type() { },
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev2.Type(), ce2.Type) EventFieldsToVerify{
} EventID: ev2.EventID(),
if !bytes.Equal(ce2.Content, ev2.Content()) { Type: ev2.Type(),
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev2.Content()), string(ce2.Content)) OriginServerTS: ev2.OriginServerTS(),
} StateKey: &sk,
if !bytes.Equal(ce2.Unsigned, expectedUnsigned) { Content: ev2.Content(),
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(expectedUnsigned), string(ce2.Unsigned)) Unsigned: expectedUnsigned,
} Sender: testUserID,
if ce2.Sender != testUserID { })
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testUserID, ce2.Sender)
}
} }
func TestToClientEventsFormatSyncUnknownPrevSender(t *testing.T) { // nolint: gocyclo func TestToClientEventsFormatSyncUnknownPrevSender(t *testing.T) { // nolint: gocyclo
@ -458,27 +494,26 @@ func TestToClientEventsFormatSyncUnknownPrevSender(t *testing.T) { // nolint: go
clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSync, userIDForSender) clientEvents := ToClientEvents([]gomatrixserverlib.PDU{ev, ev2}, FormatSync, userIDForSender)
ce := clientEvents[0] ce := clientEvents[0]
if ce.EventID != ev.EventID() { sk := testUserID
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev.EventID(), ce.EventID) verifyEventFields(t,
} EventFieldsToVerify{
if ce.OriginServerTS != ev.OriginServerTS() { EventID: ce.EventID,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev.OriginServerTS(), ce.OriginServerTS) Type: ce.Type,
} OriginServerTS: ce.OriginServerTS,
if ce.StateKey == nil || *ce.StateKey != testUserID { StateKey: ce.StateKey,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testUserID, ce.StateKey) Content: ce.Content,
} Unsigned: ce.Unsigned,
if ce.Type != ev.Type() { Sender: ce.Sender,
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev.Type(), ce.Type) },
} EventFieldsToVerify{
if !bytes.Equal(ce.Content, ev.Content()) { EventID: ev.EventID(),
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev.Content()), string(ce.Content)) Type: ev.Type(),
} OriginServerTS: ev.OriginServerTS(),
if !bytes.Equal(ce.Unsigned, ev.Unsigned()) { StateKey: &sk,
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(ev.Unsigned()), string(ce.Unsigned)) Content: ev.Content(),
} Unsigned: ev.Unsigned(),
if ce.Sender != testUserID { Sender: testUserID,
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testUserID, ce.Sender) })
}
var prev PrevEventRef var prev PrevEventRef
prev.PrevContent = []byte(`{"name": "Goodbye World 2"}`) prev.PrevContent = []byte(`{"name": "Goodbye World 2"}`)
@ -486,25 +521,23 @@ func TestToClientEventsFormatSyncUnknownPrevSender(t *testing.T) { // nolint: go
expectedUnsigned, _ := json.Marshal(prev) expectedUnsigned, _ := json.Marshal(prev)
ce2 := clientEvents[1] ce2 := clientEvents[1]
if ce2.EventID != ev2.EventID() { verifyEventFields(t,
t.Errorf("ClientEvent.EventID: wanted %s, got %s", ev2.EventID(), ce2.EventID) EventFieldsToVerify{
} EventID: ce2.EventID,
if ce2.OriginServerTS != ev2.OriginServerTS() { Type: ce2.Type,
t.Errorf("ClientEvent.OriginServerTS: wanted %d, got %d", ev2.OriginServerTS(), ce2.OriginServerTS) OriginServerTS: ce2.OriginServerTS,
} StateKey: ce2.StateKey,
if ce2.StateKey == nil || *ce.StateKey != testUserID { Content: ce2.Content,
t.Errorf("ClientEvent.StateKey: wanted %s, got %v", testUserID, ce2.StateKey) Unsigned: ce2.Unsigned,
} Sender: ce2.Sender,
if ce2.Type != ev2.Type() { },
t.Errorf("ClientEvent.Type: wanted %s, got %s", ev2.Type(), ce2.Type) EventFieldsToVerify{
} EventID: ev2.EventID(),
if !bytes.Equal(ce2.Content, ev2.Content()) { Type: ev2.Type(),
t.Errorf("ClientEvent.Content: wanted %s, got %s", string(ev2.Content()), string(ce2.Content)) OriginServerTS: ev2.OriginServerTS(),
} StateKey: &sk,
if !bytes.Equal(ce2.Unsigned, expectedUnsigned) { Content: ev2.Content(),
t.Errorf("ClientEvent.Unsigned: wanted %s, got %s", string(expectedUnsigned), string(ce2.Unsigned)) Unsigned: expectedUnsigned,
} Sender: testUserID,
if ce2.Sender != testUserID { })
t.Errorf("ClientEvent.Sender: wanted %s, got %s", testUserID, ce2.Sender)
}
} }