Skip to content

Commit 66f1c69

Browse files
committed
Merge commit '86ceaf920b21c4405794c867d60ad13552fec98e' into dinsic-release-v1.10.x
* commit '86ceaf920b21c4405794c867d60ad13552fec98e': Update tests that assumed PL50 for room upgrade, fix others (#805) Test /user/devices/ on fed reader (#799) Update tests to match removal of Synapse sending events when creating or deleting aliases. Route GET /groups queries to workers (#798) Don't push Dendrite images to Docker Hub (#797) Test that remote device list is refetched on leave/rejoin (#793) Update build.sh Update dendrite.Dockerfile Apply suggestions from code review add test for device key signatures over federation
2 parents e9221c3 + 86ceaf9 commit 66f1c69

File tree

20 files changed

+366
-259
lines changed

20 files changed

+366
-259
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@
1111
/var
1212
\#*
1313
.vscode
14-
.coverage*
14+
.coverage*
15+
.idea

docker/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ Included currently is:
99
- matrixdotorg/sytest:stretch and matrixdotorg/sytest:buster, base containers with SyTest dependencies installed
1010
- matrixdotorg/sytest-synapse:py35, a container which will run SyTest against Synapse on Python 3.5 + Stretch
1111
- matrixdotorg/sytest-synapse:py37, a container which will run SyTest against Synapse on Python 3.7 + Buster
12-
- matrixdotorg/sytest-dendrite:go111, a container which will run SyTest against Dendrite on Go 1.11 + Stretch
1312
- matrixdotorg/sytest-dendrite:go113, a container which will run SyTest against Dendrite on Go 1.13 + Buster
1413

1514
## Using the containers

docker/dendrite.Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
ARG DEBIAN_VERSION=buster
2-
32
FROM matrixdotorg/sytest:${DEBIAN_VERSION}
43

5-
ARG GO_VERSION
4+
ARG GO_VERSION=1.13.7
65
ENV GO_DOWNLOAD https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz
76

8-
# Install Go 1.11
97
RUN mkdir -p /goroot /gopath
108
RUN wget -q $GO_DOWNLOAD -O go.tar.gz
119
RUN tar xf go.tar.gz -C /goroot --strip-components=1

docker/push.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,3 @@ docker push matrixdotorg/sytest:bullseye
1010
docker push matrixdotorg/sytest-synapse:py35
1111
docker push matrixdotorg/sytest-synapse:py37
1212
docker push matrixdotorg/sytest-synapse:py38
13-
docker push matrixdotorg/sytest-dendrite:latest
14-
docker push matrixdotorg/sytest-dendrite:go111
15-
docker push matrixdotorg/sytest-dendrite:go113

lib/SyTest/Federation/Client.pm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ sub join_room
271271

272272
$room->insert_event( $member_event );
273273

274+
$store->{rooms_by_id}{ $room->room_id } = $room;
275+
274276
Future->done( $room );
275277
});
276278
});

lib/SyTest/Federation/Datastore.pm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,10 @@ sub get_auth_chain_events
301301
while( @event_ids ) {
302302
my $event = $events_by_id{shift @event_ids};
303303

304-
my @auth_ids = map { $_->[0] } @{ $event->{auth_events} };
304+
my $room = $self->get_room( $event->{room_id} ) or
305+
croak "Unknown room $event->{room_id}";
306+
307+
my @auth_ids = @{ $room->event_ids_from_refs( $event->{auth_events} ) };
305308

306309
foreach my $id ( @auth_ids ) {
307310
next if $events_by_id{$id};

lib/SyTest/Federation/Room.pm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,10 @@ sub insert_outlier_event
321321

322322
croak "Event not ref" unless ref $event;
323323

324+
my $event_id = $self->id_for_event( $event );
325+
326+
$self->{datastore}->put_event( $event_id, $event );
327+
324328
if( defined $event->{state_key} ) {
325329
$self->{current_state}{ join "\0", $event->{type}, $event->{state_key} }
326330
= $event;

lib/SyTest/Federation/Server.pm

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,13 @@ sub on_request_federation_v1_make_join
274274
404, "Not found", [ Content_length => 0 ], "",
275275
) );
276276

277+
my $room_version = $room->room_version;
278+
277279
Future->done( json => {
278280
event => $room->make_join_protoevent(
279281
user_id => $user_id,
280282
),
283+
room_version => "$room_version",
281284
} );
282285
}
283286

@@ -308,7 +311,7 @@ sub on_request_federation_v2_send_join
308311
my $event = $req->body_from_json;
309312

310313
my @auth_chain = $store->get_auth_chain_events(
311-
map { $_->[0] } @{ $event->{auth_events} }
314+
@{ $room->event_ids_from_refs( $event->{auth_events} ) }
312315
);
313316
my @state_events = $room->current_state_events;
314317

@@ -477,6 +480,15 @@ sub on_request_federation_v1_send
477480

478481
# A PDU is an event
479482
foreach my $event ( @{ $body->{pdus} } ) {
483+
my $room = $self->{datastore}->get_room( $event->{room_id} );
484+
485+
if ( $room ) {
486+
my $event_id = $room->id_for_event( $event );
487+
$room->insert_event( $event );
488+
} else {
489+
warn "Unknown room ${ $event->{room_id} }"
490+
}
491+
480492
next if $self->on_event( $event );
481493

482494
warn "TODO: Unhandled incoming event of type '$event->{type}'";
@@ -545,4 +557,41 @@ sub on_event
545557
return 1;
546558
}
547559

560+
=head2 await_request_v1_send_join_reject_v2
561+
562+
$fut = $server->await_request_v1_send_join_reject_v2( $room_id );
563+
my ( $request, $room_id, $event_id ) = $fut->get;
564+
565+
Awaits inbound request for /v1/send_join endpoint while rejecting inbound
566+
requests to /v2/send_join. Using the C<await_request_v1_send_join> standard
567+
has the problem that C<SyTest::Federation::Server> will handle /v2/send_join
568+
appropriately unless overriden, and so remote servers that use v2 will never
569+
call v1 endpoint in such a case.
570+
571+
=cut
572+
573+
sub await_request_v1_send_join_reject_v2 {
574+
my $self = shift;
575+
my ( $room_id ) = @_;
576+
577+
my $v2_fut = $self->await_request_v2_send_join( $room_id )
578+
->then( sub {
579+
my ( $req, $room_id, $event_id ) = @_;
580+
$req->respond( HTTP::Response->new(
581+
404, "Not found", [ Content_length => 0 ], "",
582+
) );
583+
584+
Future->done
585+
});
586+
587+
$self->await_request_v1_send_join( $room_id )
588+
->then( sub {
589+
my ( $req, $room_id, $event_id ) = @_;
590+
591+
$v2_fut->cancel();
592+
593+
Future->done( $req, $room_id, $event_id )
594+
})
595+
}
596+
548597
1;

lib/SyTest/Homeserver/Synapse.pm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,6 +1073,7 @@ sub start
10731073

10741074
$self->{paths}{pem_file} = $self->write_file( "combined.pem", $cert . $key );
10751075
$self->{paths}{path_map_file} = $self->write_file( "path_map_file", $self->generate_haproxy_map );
1076+
$self->{paths}{get_path_map_file} = $self->write_file( "get_path_map_file", $self->generate_haproxy_get_map );
10761077

10771078
$self->{haproxy_config} = $self->write_file( "haproxy.conf", $self->generate_haproxy_config );
10781079

@@ -1132,6 +1133,9 @@ defaults
11321133
frontend http-in
11331134
bind ${bind_host}:$ports->{haproxy} ssl crt $self->{paths}{pem_file}
11341135
1136+
acl has_get_map path -m reg -M -f $self->{paths}{get_path_map_file}
1137+
use_backend %[path,map_reg($self->{paths}{get_path_map_file},synapse)] if has_get_map METH_GET
1138+
11351139
use_backend %[path,map_reg($self->{paths}{path_map_file},synapse)]
11361140
11371141
backend synapse
@@ -1187,6 +1191,8 @@ sub generate_haproxy_map
11871191
^/_matrix/federation/v1/event_auth/ federation_reader
11881192
^/_matrix/federation/v1/exchange_third_party_invite/ federation_reader
11891193
^/_matrix/federation/v1/send/ federation_reader
1194+
^/_matrix/federation/v1/get_groups_publicised federation_reader
1195+
^/_matrix/federation/v1/user/devices/ federation_reader
11901196
^/_matrix/key/v2/query federation_reader
11911197
11921198
^/_matrix/client/(api/v1|r0|unstable)/publicRooms$ client_reader
@@ -1202,6 +1208,8 @@ sub generate_haproxy_map
12021208
^/_matrix/client/(api/v1|r0|unstable)/voip/turnServer$ client_reader
12031209
^/_matrix/client/(r0|unstable)/register$ client_reader
12041210
^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/messages$ client_reader
1211+
^/_matrix/client/(api/v1|r0|unstable)/get_groups_publicised$ client_reader
1212+
^/_matrix/client/(api/v1|r0|unstable)/joined_groups$ client_reader
12051213
12061214
^/_matrix/client/(api/v1|r0|unstable)/keys/upload frontend_proxy
12071215
@@ -1215,6 +1223,16 @@ sub generate_haproxy_map
12151223
EOCONFIG
12161224
}
12171225

1226+
sub generate_haproxy_get_map
1227+
{
1228+
return <<'EOCONFIG';
1229+
^/_matrix/federation/v1/groups/ federation_reader
1230+
1231+
^/_matrix/client/(api/v1|r0|unstable)/groups/ client_reader
1232+
1233+
EOCONFIG
1234+
}
1235+
12181236
sub secure_port
12191237
{
12201238
my $self = shift;

tests/30rooms/05aliases.pl

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -177,40 +177,13 @@ sub _test_can_create_and_delete_alias {
177177

178178
content => { room_id => $room_id },
179179
)->then( sub {
180-
matrix_get_room_state( $user, $room_id,
181-
type => "m.room.aliases",
182-
state_key => $server_name,
183-
)
184-
})->then( sub {
185-
my ( $body ) = @_;
186-
187-
log_if_fail "Aliases after adding alias", $body;
188-
189-
assert_json_keys( $body, qw( aliases ) );
190-
assert_json_list( my $aliases = $body->{aliases} );
191-
192-
any { $_ eq $alias } @$aliases or die "Expected alias to be in list";
193-
194180
do_request_json_for( $user,
195181
method => "DELETE",
196182
uri => "/r0/directory/room/$alias",
197183

198184
content => {},
199185
)
200186
})->then( sub {
201-
matrix_get_room_state( $user, $room_id,
202-
type => "m.room.aliases",
203-
state_key => $server_name,
204-
)
205-
})->then( sub {
206-
my ( $body ) = @_;
207-
208-
log_if_fail "Aliases after deleting alias", $body;
209-
assert_json_keys( $body, qw( aliases ) );
210-
assert_json_list( my $aliases = $body->{aliases} );
211-
212-
none { $_ eq $alias } @$aliases or die "Expected alias to not be in list";
213-
214187
Future->done;
215188
});
216189
}
@@ -278,37 +251,13 @@ sub _test_can_create_and_delete_alias {
278251
content => { alias => $room_alias }
279252
)
280253
})->then( sub {
281-
matrix_get_room_state( $creator, $room_id,
282-
type => "m.room.aliases",
283-
state_key => $server_name,
284-
)
285-
})->then( sub {
286-
my ( $body ) = @_;
287-
288-
assert_json_keys( $body, qw( aliases ) );
289-
assert_json_list( my $aliases = $body->{aliases} );
290-
291-
any { $_ eq $room_alias } @$aliases or die "Expected alias to be in list";
292-
293254
do_request_json_for( $creator,
294255
method => "DELETE",
295256
uri => "/r0/directory/room/$room_alias",
296257

297258
content => {},
298259
)
299260
})->then( sub {
300-
matrix_get_room_state( $creator, $room_id,
301-
type => "m.room.aliases",
302-
state_key => $server_name,
303-
)
304-
})->then( sub {
305-
my ( $body ) = @_;
306-
307-
assert_json_keys( $body, qw( aliases ) );
308-
assert_json_list( my $aliases = $body->{aliases} );
309-
310-
none { $_ eq $room_alias } @$aliases or die "Expected alias to not be in list";
311-
312261
matrix_get_room_state( $creator, $room_id,
313262
type => "m.room.canonical_alias",
314263
)
@@ -340,37 +289,13 @@ sub _test_can_create_and_delete_alias {
340289
content => { room_id => $room_id },
341290
)
342291
})->then( sub {
343-
matrix_get_room_state( $creator, $room_id,
344-
type => "m.room.aliases",
345-
state_key => $server_name,
346-
)
347-
})->then( sub {
348-
my ( $body ) = @_;
349-
350-
assert_json_keys( $body, qw( aliases ) );
351-
assert_json_list( my $aliases = $body->{aliases} );
352-
353-
any { $_ eq $room_alias } @$aliases or die "Expected alias to be in list";
354-
355292
do_request_json_for( $other_user,
356293
method => "DELETE",
357294
uri => "/r0/directory/room/$room_alias",
358295

359296
content => {},
360297
)
361298
})->then( sub {
362-
matrix_get_room_state( $creator, $room_id,
363-
type => "m.room.aliases",
364-
state_key => $server_name,
365-
)
366-
})->then( sub {
367-
my ( $body ) = @_;
368-
369-
assert_json_keys( $body, qw( aliases ) );
370-
assert_json_list( my $aliases = $body->{aliases} );
371-
372-
none { $_ eq $room_alias } @$aliases or die "Expected alias to not be in list";
373-
374299
Future->done(1);
375300
})
376301
};
@@ -399,37 +324,13 @@ sub _test_can_create_and_delete_alias {
399324
content => { alias => $room_alias }
400325
)
401326
})->then( sub {
402-
matrix_get_room_state( $creator, $room_id,
403-
type => "m.room.aliases",
404-
state_key => $server_name,
405-
)
406-
})->then( sub {
407-
my ( $body ) = @_;
408-
409-
assert_json_keys( $body, qw( aliases ) );
410-
assert_json_list( my $aliases = $body->{aliases} );
411-
412-
any { $_ eq $room_alias } @$aliases or die "Expected alias to be in list";
413-
414327
do_request_json_for( $other_user,
415328
method => "DELETE",
416329
uri => "/r0/directory/room/$room_alias",
417330

418331
content => {},
419332
)
420333
})->then( sub {
421-
matrix_get_room_state( $creator, $room_id,
422-
type => "m.room.aliases",
423-
state_key => $server_name,
424-
)
425-
})->then( sub {
426-
my ( $body ) = @_;
427-
428-
assert_json_keys( $body, qw( aliases ) );
429-
assert_json_list( my $aliases = $body->{aliases} );
430-
431-
none { $_ eq $room_alias } @$aliases or die "Expected alias to not be in list";
432-
433334
Future->done(1);
434335
})
435336
};

0 commit comments

Comments
 (0)