/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . j its i . rtp . rt cp Ċ Ċ import Ġedu . umd . cs . find bugs . annotations . Suppress FB Warnings Ċ import Ġio . kot est . core . spec . Isolation Mode Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . collections . should Contain Ċ import Ġio . kot est . matchers . collections . should Have Size Ċ import Ġio . kot est . matchers . should Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġorg . j its i . rtp . extensions . byte array . byte ArrayOf Ċ import Ġorg . j its i . test _ helpers . matchers . have Same Content As Ċ import Ġjava . nio . charset . StandardCharsets Ċ Ċ @ Suppress FB Warnings ( ĊĠĠĠ Ġvalue Ġ= Ġ[" SA _ LOCAL _ SELF _ ASSIGN MENT "], ĊĠĠĠ Ġjust ification Ġ= Ġ" False Ġpositive " Ċ ) Ċ internal Ġclass ĠR tcp By e Packet Test Ġ: ĠShould Spec () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġisolation Mode (): ĠI sol ation Mode ? Ġ= ĠI sol ation Mode . Instance Per Leaf ĊĊĠĠĠ Ġprivate Ġval Ġr tcp By e No Reason Ġ= ĠR tcp Header Builder ( ĊĠĠĠĠĠĠĠ Ġpacket Type Ġ= ĠR tcp By e Packet . PT , ĊĠĠĠĠĠĠĠ Ġreport Count Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġsender S src Ġ= Ġ 1 2 3 4 5 L , ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġ 1 ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġprivate Ġval Ġby e Reason Ġ= Ġ" Connection Ġterminated " ĊĠĠĠ Ġprivate Ġval Ġby e Reason Data Ġ= Ġby e Reason . toByteArray ( StandardCharsets . US _ ASCII ) ĊĠĠĠ Ġprivate Ġval Ġr tcp By e Reason Data Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠ Ġby e Reason Data . size . to Byte (), Ġ* bye Reason Data . to Typed Array () ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġreason Size Ġ= Ġ 1 Ġ+ Ġby e Reason Data . size ĊĠĠĠ Ġprivate Ġval Ġpadding Ġ= Ġbyte ArrayOf ( 0 x 0 0 , Ġ 0 x 0 0 ) ĊĊĠĠĠ Ġprivate Ġval Ġr tcp By e With Reason Ġ= ĠR tcp Header Builder ( ĊĠĠĠĠĠĠĠ Ġpacket Type Ġ= ĠR tcp By e Packet . PT , ĊĠĠĠĠĠĠĠ Ġhas Padding Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġreport Count Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġsender S src Ġ= Ġ 1 2 3 4 5 L , ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġ 1 Ġ+ Ġ(( 1 Ġ+ Ġreason Size Ġ+ Ġ 3 ) Ġ/ Ġ 4 ) ĊĠĠĠ Ġ). build () Ġ+ Ġr tcp By e Reason Data Ġ+ Ġpadding ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" Creating Ġan ĠR tcp By e Packet ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" from Ġa Ġbuffer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" of Ġa Ġpacket Ġwithout Ġa Ġreason ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= ĠR tcp By e Packet ( rt cp By e No Reason , Ġ 0 , Ġr tcp By e No Reason . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġthe Ġvalues Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . ss rc s Ġshould Have Size Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . ss rc s Ġshould Contain Ġ 1 2 3 4 5 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . reason ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" of Ġa Ġpacket Ġwith Ġa Ġreason ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= ĠR tcp By e Packet ( rt cp By e With Reason , Ġ 0 , Ġr tcp By e With Reason . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" parse Ġthe Ġvalues Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . ss rc s Ġshould Have Size Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . ss rc s Ġshould Contain Ġ 1 2 3 4 5 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . reason ĠshouldBe Ġby e Reason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" and Ġthen Ġserial izing Ġit ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" via Ġrequesting Ġa Ġnew Ġbuffer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialized Buf Ġ= Ġpacket . get Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" write Ġall Ġvalues Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserialized Buf Ġshould Ġhave Same Content As ( rt cp By e With Reason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" to Ġan Ġexisting Ġbuffer ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Buf Ġ= ĠByteBuffer . allocate ( 8 Ġ+ Ġr tcp By e With Reason . limit ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Buf . position ( 8 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . serialize To ( existing Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" write Ġthe Ġdata Ġto Ġthe Ġproper Ġplace ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Buf Ġ= Ġexisting Buf . sub Buffer ( 8 , Ġr tcp By e With Reason . limit ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Buf Ġshould Ġhave Same Content As ( rt cp By e With Reason ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" leave Ġthe Ġbuffer 's Ġposition Ġafter Ġthe Ġfield Ġit Ġjust Ġwrote ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Buf . position () ĠshouldBe Ġ( 8 Ġ+ Ġr tcp By e With Reason . limit ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ