mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-17 03:43:11 -06:00
Add topology token test
This commit is contained in:
parent
c4ec66e892
commit
9e8fbe1338
|
|
@ -72,6 +72,7 @@ func SimpleRoom(t *testing.T, roomID, userA, userB string) (msgs []gomatrixserve
|
||||||
Type: "m.room.create",
|
Type: "m.room.create",
|
||||||
StateKey: &emptyStateKey,
|
StateKey: &emptyStateKey,
|
||||||
Sender: userA,
|
Sender: userA,
|
||||||
|
Depth: int64(len(events) + 1),
|
||||||
}))
|
}))
|
||||||
state = append(state, events[len(events)-1])
|
state = append(state, events[len(events)-1])
|
||||||
events = append(events, MustCreateEvent(t, roomID, []gomatrixserverlib.HeaderedEvent{events[len(events)-1]}, &gomatrixserverlib.EventBuilder{
|
events = append(events, MustCreateEvent(t, roomID, []gomatrixserverlib.HeaderedEvent{events[len(events)-1]}, &gomatrixserverlib.EventBuilder{
|
||||||
|
|
@ -79,6 +80,7 @@ func SimpleRoom(t *testing.T, roomID, userA, userB string) (msgs []gomatrixserve
|
||||||
Type: "m.room.member",
|
Type: "m.room.member",
|
||||||
StateKey: &userA,
|
StateKey: &userA,
|
||||||
Sender: userA,
|
Sender: userA,
|
||||||
|
Depth: int64(len(events) + 1),
|
||||||
}))
|
}))
|
||||||
state = append(state, events[len(events)-1])
|
state = append(state, events[len(events)-1])
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
|
|
@ -86,6 +88,7 @@ func SimpleRoom(t *testing.T, roomID, userA, userB string) (msgs []gomatrixserve
|
||||||
Content: []byte(fmt.Sprintf(`{"body":"Message A %d"}`, i+1)),
|
Content: []byte(fmt.Sprintf(`{"body":"Message A %d"}`, i+1)),
|
||||||
Type: "m.room.message",
|
Type: "m.room.message",
|
||||||
Sender: userA,
|
Sender: userA,
|
||||||
|
Depth: int64(len(events) + 1),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
events = append(events, MustCreateEvent(t, roomID, []gomatrixserverlib.HeaderedEvent{events[len(events)-1]}, &gomatrixserverlib.EventBuilder{
|
events = append(events, MustCreateEvent(t, roomID, []gomatrixserverlib.HeaderedEvent{events[len(events)-1]}, &gomatrixserverlib.EventBuilder{
|
||||||
|
|
@ -93,6 +96,7 @@ func SimpleRoom(t *testing.T, roomID, userA, userB string) (msgs []gomatrixserve
|
||||||
Type: "m.room.member",
|
Type: "m.room.member",
|
||||||
StateKey: &userB,
|
StateKey: &userB,
|
||||||
Sender: userB,
|
Sender: userB,
|
||||||
|
Depth: int64(len(events) + 1),
|
||||||
}))
|
}))
|
||||||
state = append(state, events[len(events)-1])
|
state = append(state, events[len(events)-1])
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
|
|
@ -100,6 +104,7 @@ func SimpleRoom(t *testing.T, roomID, userA, userB string) (msgs []gomatrixserve
|
||||||
Content: []byte(fmt.Sprintf(`{"body":"Message B %d"}`, i+1)),
|
Content: []byte(fmt.Sprintf(`{"body":"Message B %d"}`, i+1)),
|
||||||
Type: "m.room.message",
|
Type: "m.room.message",
|
||||||
Sender: userB,
|
Sender: userB,
|
||||||
|
Depth: int64(len(events) + 1),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -221,8 +226,8 @@ func TestSyncResponse(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The purpose of this test is to ensure that backfill does indeed go backwards.
|
// The purpose of this test is to ensure that backfill does indeed go backwards, using a stream token.
|
||||||
func TestGetEventsInRange(t *testing.T) {
|
func TestGetEventsInRangeWithStreamToken(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
db := MustCreateDatabase(t)
|
db := MustCreateDatabase(t)
|
||||||
events, _ := SimpleRoom(t, testRoomID, testUserIDA, testUserIDB)
|
events, _ := SimpleRoom(t, testRoomID, testUserIDA, testUserIDB)
|
||||||
|
|
@ -243,6 +248,29 @@ func TestGetEventsInRange(t *testing.T) {
|
||||||
assertEventsEqual(t, "", true, gots, reversed(events[len(events)-5:]))
|
assertEventsEqual(t, "", true, gots, reversed(events[len(events)-5:]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The purpose of this test is to ensure that backfill does indeed go backwards, using a topology token
|
||||||
|
func TestGetEventsInRangeWithTopologyToken(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
db := MustCreateDatabase(t)
|
||||||
|
events, _ := SimpleRoom(t, testRoomID, testUserIDA, testUserIDB)
|
||||||
|
MustWriteEvents(t, db, events)
|
||||||
|
latest, err := db.MaxTopologicalPosition(ctx, testRoomID)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to get MaxTopologicalPosition: %s", err)
|
||||||
|
}
|
||||||
|
from := types.NewPaginationTokenFromTypeAndPosition(types.PaginationTokenTypeTopology, latest, 0)
|
||||||
|
// head towards the beginning of time
|
||||||
|
to := types.NewPaginationTokenFromTypeAndPosition(types.PaginationTokenTypeTopology, 0, 0)
|
||||||
|
|
||||||
|
// backpaginate 5 messages starting at the latest position.
|
||||||
|
paginatedEvents, err := db.GetEventsInRange(ctx, from, to, testRoomID, 5, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("GetEventsInRange returned an error: %s", err)
|
||||||
|
}
|
||||||
|
gots := gomatrixserverlib.HeaderedToClientEvents(db.StreamEventsToEvents(&testUserDeviceA, paginatedEvents), gomatrixserverlib.FormatAll)
|
||||||
|
assertEventsEqual(t, "", true, gots, reversed(events[len(events)-5:]))
|
||||||
|
}
|
||||||
|
|
||||||
func assertEventsEqual(t *testing.T, msg string, checkRoomID bool, gots []gomatrixserverlib.ClientEvent, wants []gomatrixserverlib.HeaderedEvent) {
|
func assertEventsEqual(t *testing.T, msg string, checkRoomID bool, gots []gomatrixserverlib.ClientEvent, wants []gomatrixserverlib.HeaderedEvent) {
|
||||||
if len(gots) != len(wants) {
|
if len(gots) != len(wants) {
|
||||||
t.Fatalf("%s response returned %d events, want %d", msg, len(gots), len(wants))
|
t.Fatalf("%s response returned %d events, want %d", msg, len(gots), len(wants))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue