/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠMatrix . org ĠFoundation ĠC . I . C . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . matrix . android . sdk . session . room . timeline Ċ Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Fix Method Order Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . junit . runners . Method Sort ers Ċ import Ġorg . matrix . android . sdk . Instrument ed Test Ċ import Ġorg . matrix . android . sdk . api . extensions . or False Ċ import Ġorg . matrix . android . sdk . api . session . events . model . to Model Ċ import Ġorg . matrix . android . sdk . api . session . room . model . message . Message Content Ċ import Ġorg . matrix . android . sdk . api . session . room . timeline . Timeline Settings Ċ import Ġorg . matrix . android . sdk . common . Common TestHelper Ċ import Ġorg . matrix . android . sdk . common . Crypto TestHelper Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ /** Ġ!! ĠNot Ġworking Ġwith Ġthe Ġnew Ġtimeline Ċ Ġ* Ġ ĠDis abling Ġit Ġuntil Ġthe Ġfix Ġis Ġmade Ċ Ġ*/ Ċ @ RunWith ( JUnit 4 :: class ) Ċ @ Fix Method Order ( Method Sort ers . JVM ) Ċ @ Ignore (" This Ġtest Ġwill Ġbe Ġignored Ġuntil Ġit Ġis Ġfixed ") Ċ @ Large Test Ċ class ĠTimeline With Many Members Test Ġ: ĠInstrument ed Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNUMBER _ OF _ MEMBER S Ġ= Ġ 6 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcommon TestHelper Ġ= ĠCommon TestHelper ( context ()) ĊĠĠĠ Ġprivate Ġval Ġcrypto TestHelper Ġ= ĠCrypto TestHelper ( common TestHelper ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEns ures Ġwhen Ġsomeone Ġsends Ġa Ġmessage Ġto Ġa Ġc row ded Ġroom , Ġeveryone Ġcan Ġdecrypt Ġthe Ġmessage . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġeveryone _ should _ decrypt _ message _ in _ a _ c row ded _ room () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcrypto TestData Ġ= Ġcrypto TestHelper . do E 2 E Test With Many Members ( NUMBER _ OF _ MEMBER S ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsession For First Member Ġ= Ġcrypto TestData . first Session ĊĠĠĠĠĠĠĠ Ġval Ġroom For First Member Ġ= Ġsession For First Member . get Room ( crypto TestData . roomId ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Message Ġ= Ġ" First Ġmessages Ġfrom ĠAlice " ĊĠĠĠĠĠĠĠ Ġcommon TestHelper . send Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom For First Member , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 0 _ 0 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 Ġuntil Ġcrypto TestData . sessions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġcrypto TestData . sessions [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom For Current Member Ġ= Ġsession . get Room ( crypto TestData . roomId ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimeline For Current Member Ġ= Ġroom For Current Member . create Timeline ( null , ĠTimeline Settings ( 3 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimeline For Current Member . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . start Sync ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlock Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Listener Ġ= Ġcommon TestHelper . create EventListener ( lock ) Ġ{ Ġsnapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnapshot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . is Encrypted () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġit . root . get Clear Content ()?. to Model < Message Content >() ?. body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body ?. startsWith ( first Message ). or False ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" User Ġ" Ġ+ Ġsession . my UserId Ġ+ Ġ" Ġdecrypted Ġas Ġ" Ġ+ Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create EventListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" User Ġ" Ġ+ Ġsession . my UserId Ġ+ Ġ" Ġdecrypted Ġas Ġ" Ġ+ Ġbody Ġ+ Ġ" ĠCrypto Error : Ġ" Ġ+ Ġit . root . m Crypto Error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ create EventListener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeline For Current Member . addListener ( events Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon TestHelper . await ( lock , Ġ 6 0 0 _ 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . stop Sync () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ