Skip to content

Commit 7a28e9f

Browse files
authored
federated_rooms_fixture (#701)
A test fixture which creates one or more rooms and joins them over federation. We have quite a lot of tests that do this, and the boilerplate is boilerplatey.
1 parent 9c91100 commit 7a28e9f

File tree

4 files changed

+327
-327
lines changed

4 files changed

+327
-327
lines changed

tests/50federation/00prepare.pl

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,94 @@ sub federation_user_id_fixture
192192
);
193193
}
194194
push @EXPORT, qw( federation_user_id_fixture );
195+
196+
197+
=head2 federated_rooms_fixture
198+
199+
test "foo",
200+
requires => [ federated_rooms_fixture( %options ) ],
201+
do => sub {
202+
my ( $creator_user, $joining_user_id, $room1, $room2, ... ) = @_;
203+
};
204+
205+
Returns a new Fixture, which:
206+
207+
=over
208+
209+
=item * creates a user on the main test server
210+
211+
=item * uses that user to create one or more rooms
212+
213+
=item * uses a test user to join those rooms over federation
214+
215+
=back
216+
217+
The results of the Fixture are:
218+
219+
=over
220+
221+
=item * A User struct for the user on the server under test
222+
223+
=item * A string giving the user id of the sytest user which has joined the rooms
224+
225+
=item * A SyTest::Federation::Room object for each room
226+
227+
=back
228+
229+
The following options are supported:
230+
231+
=over
232+
233+
=item room_count => SCALAR
234+
235+
The number of rooms to be created. Defaults to 1.
236+
237+
=item room_opts => HASH
238+
239+
A set of options to be passed into C<matrix_create_room> for all of the rooms.
240+
241+
=back
242+
243+
=cut
244+
245+
sub federated_rooms_fixture {
246+
my %options = @_;
247+
248+
my $room_count = $options{room_count} // 1;
249+
my $room_opts = $options{room_opts} // {};
250+
251+
return fixture(
252+
requires => [
253+
local_user_fixture(),
254+
$main::OUTBOUND_CLIENT,
255+
federation_user_id_fixture(),
256+
],
257+
258+
setup => sub {
259+
my ( $synapse_user, $outbound_client, $sytest_user_id ) = @_;
260+
my $synapse_server_name = $synapse_user->http->server_name;
261+
262+
my @rooms;
263+
264+
repeat( sub {
265+
my ( $idx ) = @_;
266+
matrix_create_room( $synapse_user, %$room_opts )->then( sub {
267+
my ( $room_id ) = @_;
268+
$outbound_client->join_room(
269+
server_name => $synapse_server_name,
270+
room_id => $room_id,
271+
user_id => $sytest_user_id,
272+
);
273+
})->on_done( sub {
274+
my ( $room ) = @_;
275+
log_if_fail "Joined room $idx: " . $room->room_id;
276+
push @rooms, $room;
277+
});
278+
}, foreach => [ 1 .. $room_count ]) -> then( sub {
279+
Future->done( $synapse_user, $sytest_user_id, @rooms );
280+
});
281+
},
282+
);
283+
}
284+
285+
push @EXPORT, qw( federated_rooms_fixture );

tests/50federation/32room-getevent.pl

Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,23 @@
11
test "Inbound federation can return events",
2-
requires => [ $main::OUTBOUND_CLIENT,
3-
local_user_and_room_fixtures(),
4-
federation_user_id_fixture() ],
2+
requires => [
3+
$main::OUTBOUND_CLIENT,
4+
federated_rooms_fixture(),
5+
],
56

67
do => sub {
7-
my ( $outbound_client, $creator, $room_id, $user_id ) = @_;
8+
my ( $outbound_client, $creator, $user_id, $room ) = @_;
89
my $first_home_server = $creator->server_name;
910

10-
my $local_server_name = $outbound_client->server_name;
11+
my $member_event = $room->get_current_state_event( "m.room.member", $user_id );
12+
log_if_fail "Member event", $member_event;
1113

12-
my ( $member_event, $room );
14+
my $event_id = $room->id_for_event( $member_event );
1315

14-
$outbound_client->join_room(
15-
server_name => $first_home_server,
16-
room_id => $room_id,
17-
user_id => $user_id,
16+
$outbound_client->do_request_json(
17+
method => "GET",
18+
hostname => $first_home_server,
19+
uri => "/v1/event/$event_id",
1820
)->then( sub {
19-
( $room ) = @_;
20-
21-
$member_event = $room->get_current_state_event( "m.room.member", $user_id );
22-
log_if_fail "Member event", $member_event;
23-
24-
my $event_id = $room->id_for_event( $member_event );
25-
26-
$outbound_client->do_request_json(
27-
method => "GET",
28-
hostname => $first_home_server,
29-
uri => "/v1/event/$event_id",
30-
);
31-
})->then( sub {
3221
my ( $body ) = @_;
3322
log_if_fail "Body", $body;
3423

@@ -53,27 +42,22 @@
5342

5443

5544
test "Inbound federation redacts events from erased users",
56-
requires => [ $main::OUTBOUND_CLIENT,
57-
local_user_and_room_fixtures(),
58-
federation_user_id_fixture() ],
45+
requires => [
46+
$main::OUTBOUND_CLIENT,
47+
federated_rooms_fixture(),
48+
],
5949

6050
do => sub {
61-
my ( $outbound_client, $creator, $room_id, $user_id ) = @_;
51+
my ( $outbound_client, $creator, $user_id, $room ) = @_;
6252
my $first_home_server = $creator->server_name;
53+
my $room_id = $room->room_id;
6354

6455
my $message_id;
6556

66-
$outbound_client->join_room(
67-
server_name => $first_home_server,
68-
room_id => $room_id,
69-
user_id => $user_id,
70-
)->then( sub {
71-
my ( $room ) = @_;
72-
73-
# have the creator send a message into the room, which we will try to
74-
# fetch.
75-
matrix_send_room_text_message( $creator, $room_id, body => "body1" );
76-
})->then( sub {
57+
# have the creator send a message into the room, which we will try to
58+
# fetch.
59+
matrix_send_room_text_message( $creator, $room_id, body => "body1" )
60+
->then( sub {
7761
( $message_id ) = @_;
7862

7963
$outbound_client->do_request_json(

0 commit comments

Comments
 (0)