From 4aacefb2825be9cf36769a3297cd922541137560 Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Thu, 20 Oct 2022 10:08:02 +0200 Subject: [PATCH 1/8] Add presence test from people in 2 different rooms in incremental sync Signed-off-by: Mathieu Velten --- tests/csapi/sync_test.go | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 0d0e8fda..9dfd3314 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -382,6 +382,50 @@ func TestSync(t *testing.T) { }) } +// Test presence from people in 2 different rooms in incremental sync +func TestPresenceSyncDifferentRooms(t *testing.T) { + runtime.SkipIf(t, runtime.Dendrite) // does not yet pass + + deployment := Deploy(t, b.BlueprintOneToOneRoom) + defer deployment.Destroy(t) + + alice := deployment.Client(t, "hs1", "@alice:hs1") + bob := deployment.Client(t, "hs1", "@bob:hs1") + + deployment.RegisterUser(t, "hs1", "charlie", "charlie", false) + charlie := deployment.Client(t, "hs1", "@charlie:hs1") + + bobRoomID := alice.CreateRoom(t, struct{}{}) + charlieRoomID := alice.CreateRoom(t, struct{}{}) + nextBatch := alice.MustSyncUntil(t, client.SyncReq{}, client.SyncJoinedTo(alice.UserID, bobRoomID), client.SyncJoinedTo(alice.UserID, charlieRoomID)) + + alice.InviteRoom(t, bobRoomID, bob.UserID) + alice.InviteRoom(t, charlieRoomID, charlie.UserID) + bob.JoinRoom(t, bobRoomID, nil) + charlie.JoinRoom(t, charlieRoomID, nil) + + nextBatch = alice.MustSyncUntil(t, + client.SyncReq{Since: nextBatch}, + client.SyncJoinedTo(bob.UserID, bobRoomID), + client.SyncJoinedTo(charlie.UserID, charlieRoomID), + ) + + reqBody := client.WithJSONBody(t, map[string]interface{}{ + "presence": "online", + }) + bob.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@bob:hs1", "status"}, reqBody) + charlie.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@charlie:hs1", "status"}, reqBody) + + nextBatch = alice.MustSyncUntil(t, client.SyncReq{Since: nextBatch}, func(clientUserID string, sync gjson.Result) error { + presence := sync.Get("presence") + if len(presence.Get("events").Array()) == 0 { + return fmt.Errorf("presence.events is empty: %+v", presence) + } + usersInPresenceEvents(t, presence, []string{bob.UserID, charlie.UserID}) + return nil + }) +} + func sendMessages(t *testing.T, client *client.CSAPI, roomID string, prefix string, count int) { t.Helper() for i := 0; i < count; i++ { From 8fcaa387c4de9a7a37a56e6258ac3ec1d7bf24fa Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Thu, 20 Oct 2022 18:22:36 +0200 Subject: [PATCH 2/8] Try Dendrite --- tests/csapi/sync_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 9dfd3314..82098ced 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -384,8 +384,6 @@ func TestSync(t *testing.T) { // Test presence from people in 2 different rooms in incremental sync func TestPresenceSyncDifferentRooms(t *testing.T) { - runtime.SkipIf(t, runtime.Dendrite) // does not yet pass - deployment := Deploy(t, b.BlueprintOneToOneRoom) defer deployment.Destroy(t) From 39f729f439eb14cd96117a140b844deb5fa47d4e Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Fri, 21 Oct 2022 09:22:23 +0200 Subject: [PATCH 3/8] Skip Dendrite with FIXME comment --- tests/csapi/sync_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 82098ced..16a118fb 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -384,6 +384,8 @@ func TestSync(t *testing.T) { // Test presence from people in 2 different rooms in incremental sync func TestPresenceSyncDifferentRooms(t *testing.T) { + runtime.SkipIf(t, runtime.Dendrite) // FIXME: https://github.com/matrix-org/dendrite/issues/2803 + deployment := Deploy(t, b.BlueprintOneToOneRoom) defer deployment.Destroy(t) From 459130dea2f5a09c57df3bcdc8ed2af0d6cca0f4 Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Fri, 21 Oct 2022 10:13:26 +0200 Subject: [PATCH 4/8] Allow presence events to come in different syncs --- tests/csapi/sync_test.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 16a118fb..e4684ffd 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -416,13 +416,28 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { bob.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@bob:hs1", "status"}, reqBody) charlie.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@charlie:hs1", "status"}, reqBody) - nextBatch = alice.MustSyncUntil(t, client.SyncReq{Since: nextBatch}, func(clientUserID string, sync gjson.Result) error { - presence := sync.Get("presence") - if len(presence.Get("events").Array()) == 0 { - return fmt.Errorf("presence.events is empty: %+v", presence) + presenceBob, presenceCharlie := false, false + + alice.MustSyncUntil(t, client.SyncReq{Since: nextBatch}, func(clientUserID string, sync gjson.Result) error { + presenceArray := sync.Get("presence").Get("events").Array() + if len(presenceArray) == 0 { + return fmt.Errorf("presence.events is empty") + } + for _, x := range presenceArray { + if x.Get("content").Get("presence").Str != "online" { + continue + } + if x.Get("sender").Str == bob.UserID { + presenceBob = true + } + if x.Get("sender").Str == charlie.UserID { + presenceCharlie = true + } + if presenceBob && presenceCharlie { + return nil + } } - usersInPresenceEvents(t, presence, []string{bob.UserID, charlie.UserID}) - return nil + return fmt.Errorf("all users not present yet, bob %t charlie %t", presenceBob, presenceCharlie) }) } From f809bae5b0d4de7292a378d7c2ce0a5d574dc815 Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Fri, 21 Oct 2022 10:32:04 +0200 Subject: [PATCH 5/8] Update tests/csapi/sync_test.go Co-authored-by: Jonathan de Jong --- tests/csapi/sync_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index e4684ffd..178bf009 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -392,7 +392,7 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { alice := deployment.Client(t, "hs1", "@alice:hs1") bob := deployment.Client(t, "hs1", "@bob:hs1") - deployment.RegisterUser(t, "hs1", "charlie", "charlie", false) + deployment.RegisterUser(t, "hs1", "charlie", "charliepassword", false) charlie := deployment.Client(t, "hs1", "@charlie:hs1") bobRoomID := alice.CreateRoom(t, struct{}{}) From dab94e36fc656f854cd1ecedbe7801abc5826d12 Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Fri, 21 Oct 2022 10:33:29 +0200 Subject: [PATCH 6/8] Fix Dendrite run --- tests/csapi/sync_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 178bf009..a91bad68 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -384,8 +384,6 @@ func TestSync(t *testing.T) { // Test presence from people in 2 different rooms in incremental sync func TestPresenceSyncDifferentRooms(t *testing.T) { - runtime.SkipIf(t, runtime.Dendrite) // FIXME: https://github.com/matrix-org/dendrite/issues/2803 - deployment := Deploy(t, b.BlueprintOneToOneRoom) defer deployment.Destroy(t) From b4c7de3cc877889df85c0867811f496ce4676be9 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Thu, 27 Oct 2022 13:35:08 +0100 Subject: [PATCH 7/8] Signpost comments --- tests/csapi/sync_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index a91bad68..3eb63359 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -393,6 +393,7 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { deployment.RegisterUser(t, "hs1", "charlie", "charliepassword", false) charlie := deployment.Client(t, "hs1", "@charlie:hs1") + // Alice creates two rooms: one with her and Bob, and a second with her and Charlie. bobRoomID := alice.CreateRoom(t, struct{}{}) charlieRoomID := alice.CreateRoom(t, struct{}{}) nextBatch := alice.MustSyncUntil(t, client.SyncReq{}, client.SyncJoinedTo(alice.UserID, bobRoomID), client.SyncJoinedTo(alice.UserID, charlieRoomID)) @@ -408,6 +409,7 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { client.SyncJoinedTo(charlie.UserID, charlieRoomID), ) + // Bob and Charlie mark themselves as online. reqBody := client.WithJSONBody(t, map[string]interface{}{ "presence": "online", }) From f636aeba3c54c2d536f69dc6ac363c7017b32425 Mon Sep 17 00:00:00 2001 From: David Robertson Date: Thu, 27 Oct 2022 14:14:23 +0100 Subject: [PATCH 8/8] Tweak var names; another signpost --- tests/csapi/sync_test.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/csapi/sync_test.go b/tests/csapi/sync_test.go index 3eb63359..58c11ba6 100644 --- a/tests/csapi/sync_test.go +++ b/tests/csapi/sync_test.go @@ -416,7 +416,10 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { bob.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@bob:hs1", "status"}, reqBody) charlie.DoFunc(t, "PUT", []string{"_matrix", "client", "v3", "presence", "@charlie:hs1", "status"}, reqBody) - presenceBob, presenceCharlie := false, false + // Alice should see that Bob and Charlie are online. She may see this happen + // simultaneously in one /sync response, or separately in two /sync + // responses. + seenBobOnline, seenCharlieOnline := false, false alice.MustSyncUntil(t, client.SyncReq{Since: nextBatch}, func(clientUserID string, sync gjson.Result) error { presenceArray := sync.Get("presence").Get("events").Array() @@ -428,16 +431,16 @@ func TestPresenceSyncDifferentRooms(t *testing.T) { continue } if x.Get("sender").Str == bob.UserID { - presenceBob = true + seenBobOnline = true } if x.Get("sender").Str == charlie.UserID { - presenceCharlie = true + seenCharlieOnline = true } - if presenceBob && presenceCharlie { + if seenBobOnline && seenCharlieOnline { return nil } } - return fmt.Errorf("all users not present yet, bob %t charlie %t", presenceBob, presenceCharlie) + return fmt.Errorf("all users not present yet, bob %t charlie %t", seenBobOnline, seenCharlieOnline) }) }