From 515c098a8d75f6b74c62082e3a89f65b3f8224c8 Mon Sep 17 00:00:00 2001
From: Neil Alexander <neilalexander@users.noreply.github.com>
Date: Fri, 13 Aug 2021 15:54:00 +0100
Subject: [PATCH] Don't rely on device list being updated on invite/join for
 x-signing federation tests

---
 tests/41end-to-end-keys/08-cross-signing.pl | 60 +++++++++++++++++++--
 1 file changed, 56 insertions(+), 4 deletions(-)

diff --git a/tests/41end-to-end-keys/08-cross-signing.pl b/tests/41end-to-end-keys/08-cross-signing.pl
index 6368dca6d..5933b5422 100644
--- a/tests/41end-to-end-keys/08-cross-signing.pl
+++ b/tests/41end-to-end-keys/08-cross-signing.pl
@@ -527,11 +527,37 @@
       })->then( sub {
          matrix_invite_user_to_room( $user1, $user2, $room_id )
       })->then( sub {
-         sync_until_user_in_device_list( $user1, $user2 );
+         await_sync_timeline_contains( $user1, $room_id, check => sub {
+            my ( $event ) = @_;
+
+            assert_json_keys( $event, qw( type content sender state_key ));
+            return unless $event->{type} eq "m.room.member";
+            return unless $event->{sender} eq $user1->user_id;
+            return unless $event->{state_key} eq $user2->user_id;
+            
+            assert_json_keys( my $content = $event->{content}, qw( membership ));
+            $content->{membership} eq "invite" or
+                die "Expected invite membership";
+
+            return 1;
+         });
       })->then( sub {
          matrix_join_room( $user2, $room_id );
       })->then( sub {
-         sync_until_user_in_device_list( $user1, $user2 );
+         await_sync_timeline_contains( $user1, $room_id, check => sub {
+            my ( $event ) = @_;
+
+            assert_json_keys( $event, qw( type content sender state_key ));
+            return unless $event->{type} eq "m.room.member";
+            return unless $event->{sender} eq $user2->user_id;
+            return unless $event->{state_key} eq $user2->user_id;
+            
+            assert_json_keys( my $content = $event->{content}, qw( membership ));
+            $content->{membership} eq "join" or
+                die "Expected join membership";
+
+            return 1;
+         });
       })->then( sub {
          matrix_set_cross_signing_key( $user2, {
              "auth" => {
@@ -647,11 +673,37 @@
       })->then( sub {
          matrix_invite_user_to_room( $user1, $user2, $room_id )
       })->then( sub {
-         sync_until_user_in_device_list( $user1, $user2 );
+         await_sync_timeline_contains( $user1, $room_id, check => sub {
+            my ( $event ) = @_;
+
+            assert_json_keys( $event, qw( type content sender state_key ));
+            return unless $event->{type} eq "m.room.member";
+            return unless $event->{sender} eq $user1->user_id;
+            return unless $event->{state_key} eq $user2->user_id;
+
+            assert_json_keys( my $content = $event->{content}, qw( membership ));
+            $content->{membership} eq "invite" or
+                die "Expected ${\$user2->user_id} to have been invited";
+
+            return 1;
+         });
       })->then( sub {
          matrix_join_room( $user2, $room_id );
       })->then( sub {
-         sync_until_user_in_device_list( $user1, $user2 );
+         await_sync_timeline_contains( $user1, $room_id, check => sub {
+            my ( $event ) = @_;
+
+            assert_json_keys( $event, qw( type content sender state_key ));
+            return unless $event->{type} eq "m.room.member";
+            return unless $event->{sender} eq $user2->user_id;
+            return unless $event->{state_key} eq $user2->user_id;
+
+            assert_json_keys( my $content = $event->{content}, qw( membership ));
+            $content->{membership} eq "join" or
+                die "Expected ${\$user2->user_id} to have joined";
+
+            return 1;
+         });
       })->then( sub {
          sign_json(
             $device, secret_key => $self_signing_secret_key,