@@ -14,13 +14,12 @@ See the License for the specific language governing permissions and
14
14
limitations under the License.
15
15
*/
16
16
17
- import { encodeBase64 , EventType , MatrixClient , MatrixError , type MatrixEvent , type Room } from "../../../src" ;
17
+ import { encodeBase64 , EventType , MatrixClient , type MatrixError , type MatrixEvent , type Room } from "../../../src" ;
18
18
import { KnownMembership } from "../../../src/@types/membership" ;
19
19
import { DEFAULT_EXPIRE_DURATION , type SessionMembershipData } from "../../../src/matrixrtc/CallMembership" ;
20
20
import { MatrixRTCSession , MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession" ;
21
21
import { type EncryptionKeysEventContent } from "../../../src/matrixrtc/types" ;
22
22
import { secureRandomString } from "../../../src/randomstring" ;
23
- import { flushPromises } from "../../test-utils/flushPromises" ;
24
23
import { makeMockRoom , makeMockRoomState , membershipTemplate } from "./mocks" ;
25
24
26
25
const mockFocus = { type : "mock" } ;
@@ -37,10 +36,10 @@ describe("MatrixRTCSession", () => {
37
36
client . getDeviceId = jest . fn ( ) . mockReturnValue ( "AAAAAAA" ) ;
38
37
} ) ;
39
38
40
- afterEach ( ( ) => {
39
+ afterEach ( async ( ) => {
41
40
client . stopClient ( ) ;
42
41
client . matrixRTC . stop ( ) ;
43
- if ( sess ) sess . stop ( ) ;
42
+ if ( sess ) await sess . stop ( ) ;
44
43
sess = undefined ;
45
44
} ) ;
46
45
@@ -322,11 +321,9 @@ describe("MatrixRTCSession", () => {
322
321
let sendStateEventMock : jest . Mock ;
323
322
let sendDelayedStateMock : jest . Mock ;
324
323
let sendEventMock : jest . Mock ;
325
- let updateDelayedEventMock : jest . Mock ;
326
324
327
325
let sentStateEvent : Promise < void > ;
328
326
let sentDelayedState : Promise < void > ;
329
- let updatedDelayedEvent : Promise < void > ;
330
327
331
328
beforeEach ( ( ) => {
332
329
sentStateEvent = new Promise ( ( resolve ) => {
@@ -340,15 +337,12 @@ describe("MatrixRTCSession", () => {
340
337
} ;
341
338
} ) ;
342
339
} ) ;
343
- updatedDelayedEvent = new Promise ( ( r ) => {
344
- updateDelayedEventMock = jest . fn ( r ) ;
345
- } ) ;
346
340
sendEventMock = jest . fn ( ) ;
347
341
client . sendStateEvent = sendStateEventMock ;
348
342
client . _unstable_sendDelayedStateEvent = sendDelayedStateMock ;
349
343
client . sendEvent = sendEventMock ;
350
344
351
- client . _unstable_updateDelayedEvent = updateDelayedEventMock ;
345
+ client . _unstable_updateDelayedEvent = jest . fn ( ) ;
352
346
353
347
mockRoom = makeMockRoom ( [ ] ) ;
354
348
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
@@ -432,120 +426,6 @@ describe("MatrixRTCSession", () => {
432
426
expect ( client . _unstable_sendDelayedStateEvent ) . toHaveBeenCalledTimes ( 1 ) ;
433
427
jest . useRealTimers ( ) ;
434
428
} ) ;
435
-
436
- describe ( "calls" , ( ) => {
437
- const activeFocusConfig = { type : "livekit" , livekit_service_url : "https://active.url" } ;
438
- const activeFocus = { type : "livekit" , focus_selection : "oldest_membership" } ;
439
-
440
- async function testJoin ( useOwnedStateEvents : boolean ) : Promise < void > {
441
- if ( useOwnedStateEvents ) {
442
- mockRoom . getVersion = jest . fn ( ) . mockReturnValue ( "org.matrix.msc3757.default" ) ;
443
- }
444
-
445
- jest . useFakeTimers ( ) ;
446
-
447
- // preparing the delayed disconnect should handle the delay being too long
448
- const sendDelayedStateExceedAttempt = new Promise < void > ( ( resolve ) => {
449
- const error = new MatrixError ( {
450
- "errcode" : "M_UNKNOWN" ,
451
- "org.matrix.msc4140.errcode" : "M_MAX_DELAY_EXCEEDED" ,
452
- "org.matrix.msc4140.max_delay" : 7500 ,
453
- } ) ;
454
- sendDelayedStateMock . mockImplementationOnce ( ( ) => {
455
- resolve ( ) ;
456
- return Promise . reject ( error ) ;
457
- } ) ;
458
- } ) ;
459
-
460
- const userStateKey = `${ ! useOwnedStateEvents ? "_" : "" } @alice:example.org_AAAAAAA` ;
461
- // preparing the delayed disconnect should handle ratelimiting
462
- const sendDelayedStateAttempt = new Promise < void > ( ( resolve ) => {
463
- const error = new MatrixError ( { errcode : "M_LIMIT_EXCEEDED" } ) ;
464
- sendDelayedStateMock . mockImplementationOnce ( ( ) => {
465
- resolve ( ) ;
466
- return Promise . reject ( error ) ;
467
- } ) ;
468
- } ) ;
469
-
470
- // setting the membership state should handle ratelimiting (also with a retry-after value)
471
- const sendStateEventAttempt = new Promise < void > ( ( resolve ) => {
472
- const error = new MatrixError (
473
- { errcode : "M_LIMIT_EXCEEDED" } ,
474
- 429 ,
475
- undefined ,
476
- undefined ,
477
- new Headers ( { "Retry-After" : "1" } ) ,
478
- ) ;
479
- sendStateEventMock . mockImplementationOnce ( ( ) => {
480
- resolve ( ) ;
481
- return Promise . reject ( error ) ;
482
- } ) ;
483
- } ) ;
484
-
485
- sess ! . joinRoomSession ( [ activeFocusConfig ] , activeFocus , {
486
- membershipServerSideExpiryTimeout : 9000 ,
487
- } ) ;
488
-
489
- await sendDelayedStateExceedAttempt . then ( ) ; // needed to resolve after the send attempt catches
490
- await sendDelayedStateAttempt ;
491
- const callProps = ( d : number ) => {
492
- return [ mockRoom ! . roomId , { delay : d } , "org.matrix.msc3401.call.member" , { } , userStateKey ] ;
493
- } ;
494
- expect ( client . _unstable_sendDelayedStateEvent ) . toHaveBeenNthCalledWith ( 1 , ...callProps ( 9000 ) ) ;
495
- expect ( client . _unstable_sendDelayedStateEvent ) . toHaveBeenNthCalledWith ( 2 , ...callProps ( 7500 ) ) ;
496
-
497
- jest . advanceTimersByTime ( 5000 ) ;
498
-
499
- await sendStateEventAttempt . then ( ) ; // needed to resolve after resendIfRateLimited catches
500
- jest . advanceTimersByTime ( 1000 ) ;
501
-
502
- await sentStateEvent ;
503
- expect ( client . sendStateEvent ) . toHaveBeenCalledWith (
504
- mockRoom ! . roomId ,
505
- EventType . GroupCallMemberPrefix ,
506
- {
507
- application : "m.call" ,
508
- scope : "m.room" ,
509
- call_id : "" ,
510
- expires : 14400000 ,
511
- device_id : "AAAAAAA" ,
512
- foci_preferred : [ activeFocusConfig ] ,
513
- focus_active : activeFocus ,
514
- } satisfies SessionMembershipData ,
515
- userStateKey ,
516
- ) ;
517
- await sentDelayedState ;
518
-
519
- // should have prepared the heartbeat to keep delaying the leave event while still connected
520
- await updatedDelayedEvent ;
521
- expect ( client . _unstable_updateDelayedEvent ) . toHaveBeenCalledTimes ( 1 ) ;
522
-
523
- // ensures that we reach the code that schedules the timeout for the next delay update before we advance the timers.
524
- await flushPromises ( ) ;
525
- jest . advanceTimersByTime ( 5000 ) ;
526
- // should update delayed disconnect
527
- expect ( client . _unstable_updateDelayedEvent ) . toHaveBeenCalledTimes ( 2 ) ;
528
-
529
- jest . useRealTimers ( ) ;
530
- }
531
-
532
- it ( "sends a membership event with session payload when joining a call" , async ( ) => {
533
- await testJoin ( false ) ;
534
- } ) ;
535
-
536
- it ( "does not prefix the state key with _ for rooms that support user-owned state events" , async ( ) => {
537
- await testJoin ( true ) ;
538
- } ) ;
539
- } ) ;
540
-
541
- it ( "does nothing if join called when already joined" , async ( ) => {
542
- sess ! . joinRoomSession ( [ mockFocus ] , mockFocus ) ;
543
- await sentStateEvent ;
544
- expect ( client . sendStateEvent ) . toHaveBeenCalledTimes ( 1 ) ;
545
-
546
- sess ! . joinRoomSession ( [ mockFocus ] , mockFocus ) ;
547
- expect ( client . sendStateEvent ) . toHaveBeenCalledTimes ( 1 ) ;
548
- } ) ;
549
429
} ) ;
550
430
551
431
describe ( "onMembershipsChanged" , ( ) => {
@@ -616,9 +496,9 @@ describe("MatrixRTCSession", () => {
616
496
sess = MatrixRTCSession . roomSessionForRoom ( client , mockRoom ) ;
617
497
} ) ;
618
498
619
- afterEach ( ( ) => {
499
+ afterEach ( async ( ) => {
620
500
// stop the timers
621
- sess ! . leaveRoomSession ( ) ;
501
+ await sess ! . leaveRoomSession ( ) ;
622
502
} ) ;
623
503
624
504
it ( "creates a key when joining" , ( ) => {
@@ -715,7 +595,7 @@ describe("MatrixRTCSession", () => {
715
595
}
716
596
} ) ;
717
597
718
- it ( "cancels key send event that fail" , async ( ) => {
598
+ it ( "cancels key send event that fail" , ( ) => {
719
599
const eventSentinel = { } as unknown as MatrixEvent ;
720
600
721
601
client . cancelPendingEvent = jest . fn ( ) ;
0 commit comments