package Ġcom . bug sn ag . android Ċ Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġjava . util . Date Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ private Ġconst Ġval ĠSESSION _ CONF INE MENT _ AT TEMP TS Ġ= Ġ 2 0 Ċ Ċ /** Ċ Ġ* ĠConf ir ms Ġthat Ġdelivery Ġof Ġsessions Ġis Ġconf ined Ġto Ġa Ġsingle Ġthread , Ġresulting Ġin Ġno Ċ Ġ* Ġduplicate Ġrequests . Ċ Ġ*/ Ċ internal Ġclass ĠSession Tracker Con fin ement Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtracking Sessions Is Thread Conf ined () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup Ġdelivery Ġfor Ġinter ception ĊĠĠĠĠĠĠĠ Ġval Ġret aining Delivery Ġ= ĠRet aining Delivery () ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠBug sn ag TestUtils . generate Configuration (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Track Sessions Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelivery Ġ= Ġret aining Delivery ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠClient ( Application Provider . getApplicationContext (), Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsend Ġ 2 0 Ġsessions ĊĠĠĠĠĠĠĠ Ġrepeat ( SESSION _ CONF INE MENT _ AT TEMP TS ) Ġ{ Ġcount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . session Tracker . start New Session ( Date ( 0 ), ĠUser ("$ count "), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret aining Delivery . latch . await ( 1 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġconfirm Ġthat Ġno Ġdu pe Ġrequests Ġare Ġsent Ġand Ġthat Ġthe Ġrequest Ġorder Ġis Ġdeterministic ĊĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ CONF INE MENT _ AT TEMP TS , Ġret aining Delivery . payload s . size ) ĊĊĠĠĠĠĠĠĠ Ġret aining Delivery . payload s . forEach Indexed Ġ{ Ġindex , Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("$ index ", Ġsession . getUser (). id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRet ains Ġall Ġthe Ġsent Ġsession Ġpayload s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠRet aining Delivery Ġ: ĠDelivery Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpayload s Ġ= Ġmutable ListOf < Session >() ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( SESSION _ CONF INE MENT _ AT TEMP TS ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeliver ( payload : ĠSession , Ġdelivery Params : ĠDelivery Params ): ĠDelivery Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload s . add ( payload ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelivery Status . DE LI VER ED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeliver ( payload : ĠEvent Payload , Ġdelivery Params : ĠDelivery Params ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDelivery Status . DE LI VER ED ĊĠĠĠ Ġ} Ċ } Ċ