Skip to content

Commit 6e2a45c

Browse files
committed
Merge branch 'develop' of github.com:matrix-org/sytest into neilj/privacy_by_default_room_dir
2 parents 8d3b785 + afd2b6f commit 6e2a45c

File tree

3 files changed

+109
-0
lines changed

3 files changed

+109
-0
lines changed

lib/SyTest/Homeserver/Synapse.pm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ sub start
262262

263263
require_membership_for_aliases => "false",
264264

265+
# Enable ephemeral message support (MSC2228)
266+
enable_ephemeral_messages => "true",
267+
265268
$self->{recaptcha_config} ? (
266269
recaptcha_siteverify_api => $self->{recaptcha_config}->{siteverify_api},
267270
recaptcha_public_key => $self->{recaptcha_config}->{public_key},

tests/30rooms/04messages.pl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,3 +349,53 @@
349349
})
350350
});
351351
};
352+
353+
# Test for MSC2228 for local messages.
354+
test "Ephemeral messages received from clients are correctly expired",
355+
requires => [ local_user_and_room_fixtures() ],
356+
357+
do => sub {
358+
my ( $user, $room_id ) = @_;
359+
360+
my $now_ms = int( time() * 1000 );
361+
my $filter = '{"types":["m.room.message"]}';
362+
363+
matrix_send_room_message( $user, $room_id,
364+
content => {
365+
msgtype => "m.text",
366+
body => "This is a message",
367+
"org.matrix.self_destruct_after" => $now_ms + 1000,
368+
},
369+
)->then( sub {
370+
await_sync_timeline_contains($user, $room_id, check => sub {
371+
my ($event) = @_;
372+
return $event->{content}{body} eq "This is a message"
373+
})
374+
})->then( sub {
375+
# wait for the message to expire
376+
delay( 1.5 )
377+
})->then( sub {
378+
my $iter = 0;
379+
retry_until_success {
380+
matrix_get_room_messages( $user, $room_id, filter => $filter )->then( sub {
381+
$iter++;
382+
my ( $body ) = @_;
383+
log_if_fail "Iteration $iter: response body after expiry", $body;
384+
385+
my $chunk = $body->{chunk};
386+
387+
@$chunk == 1 or
388+
die "Expected 1 message";
389+
390+
# Check that we can't read the message's content after its expiry.
391+
assert_deeply_eq( $chunk->[0]{content}, {}, 'chunk[0] content size' );
392+
393+
Future->done(1);
394+
})->on_fail( sub {
395+
my ( $exc ) = @_;
396+
chomp $exc;
397+
log_if_fail "Iteration $iter: not ready yet: $exc";
398+
});
399+
}
400+
});
401+
};

tests/50federation/31room-send.pl

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use Time::HiRes qw( time );
12
use Protocol::Matrix qw( redact_event );
23

34

@@ -145,3 +146,58 @@
145146
});
146147
});
147148
};
149+
150+
# Test for MSC2228 for messages received through federation.
151+
test "Ephemeral messages received from servers are correctly expired",
152+
requires => [ local_user_and_room_fixtures(), remote_user_fixture() ],
153+
154+
do => sub {
155+
my ( $local_user, $room_id, $federated_user ) = @_;
156+
157+
my $filter = '{"types":["m.room.message"]}';
158+
159+
matrix_invite_user_to_room( $local_user, $federated_user, $room_id )->then( sub {
160+
matrix_join_room( $federated_user, $room_id )
161+
})->then( sub {
162+
my $now_ms = int( time() * 1000 );
163+
164+
matrix_send_room_message( $local_user, $room_id,
165+
content => {
166+
msgtype => "m.text",
167+
body => "This is a message",
168+
"org.matrix.self_destruct_after" => $now_ms + 1000,
169+
},
170+
)
171+
})->then( sub {
172+
await_sync_timeline_contains($local_user, $room_id, check => sub {
173+
my ($event) = @_;
174+
return $event->{content}{body} eq "This is a message"
175+
})
176+
})->then( sub {
177+
# wait for the message to expire
178+
delay( 1.5 )
179+
})->then( sub {
180+
my $iter = 0;
181+
retry_until_success {
182+
matrix_get_room_messages( $local_user, $room_id, filter => $filter )->then( sub {
183+
$iter++;
184+
my ( $body ) = @_;
185+
log_if_fail "Iteration $iter: response body after expiry", $body;
186+
187+
my $chunk = $body->{chunk};
188+
189+
@$chunk == 1 or
190+
die "Expected 1 message";
191+
192+
# Check that we can't read the message's content after its expiry.
193+
assert_deeply_eq( $chunk->[0]{content}, {}, 'chunk[0] content size' );
194+
195+
Future->done(1);
196+
})->on_fail( sub {
197+
my ( $exc ) = @_;
198+
chomp $exc;
199+
log_if_fail "Iteration $iter: not ready yet: $exc";
200+
});
201+
}
202+
});
203+
};

0 commit comments

Comments
 (0)