/* Ċ Ġ* Ġ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 Ġio . kot est . core . spec . Isolation Mode Ċ import Ġio . kot est . core . spec . style . Should Spec Ċ import Ġio . kot est . matchers . collections . should Have Size Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . should Not Be Ċ import Ġorg . j its i . rtp . util . byte Buffer Of Ċ import Ġjava . nio . ByteBuffer Ċ Ċ internal Ġclass ĠR tcp Sr Packet Test Ġ: ĠShould Spec () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġisolation Mode (): ĠI sol ation Mode ? Ġ= ĠI sol ation Mode . Instance Per Leaf ĊĊĠĠĠ Ġprivate Ġval Ġexpected Sender Info Ġ= ĠSender Info Builder ( ĊĠĠĠĠĠĠĠ Ġn tp Timestamp M sw Ġ= Ġ 0 x 7 FFFF FFF , ĊĠĠĠĠĠĠĠ Ġn tp Timestamp L sw Ġ= Ġ 0 xFFFFFFFF , ĊĠĠĠĠĠĠĠ Ġr tp Timestamp Ġ= Ġ 0 xFFFFFFFF , ĊĠĠĠĠĠĠĠ Ġsend ers Packet Count Ġ= Ġ 0 xFFFFFFFF , ĊĠĠĠĠĠĠĠ Ġsend ers Oct et Count Ġ= Ġ 0 xFFFFFFFF ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġreport Block 1 Ġ= ĠR tcp Report Block ( ĊĠĠĠĠĠĠĠ Ġs src Ġ= Ġ 1 2 3 4 5 , ĊĠĠĠĠĠĠĠ Ġfraction Lost Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠ Ġcumulative Packets Lost Ġ= Ġ 4 2 4 2 , ĊĠĠĠĠĠĠĠ Ġseq Num Cycles Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġseq Num Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠ Ġinter arrival J itter Ġ= Ġ 4 2 4 2 , ĊĠĠĠĠĠĠĠ Ġlast Sr Timestamp Ġ= Ġ 2 3 4 5 6 , ĊĠĠĠĠĠĠĠ Ġdelay Since Last Sr Ġ= Ġ 3 4 5 6 7 ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġreport Block 2 Ġ= ĠR tcp Report Block ( ĊĠĠĠĠĠĠĠ Ġs src Ġ= Ġ 2 3 4 5 6 , ĊĠĠĠĠĠĠĠ Ġfraction Lost Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠ Ġcumulative Packets Lost Ġ= Ġ 4 2 4 2 , ĊĠĠĠĠĠĠĠ Ġseq Num Cycles Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġseq Num Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠ Ġinter arrival J itter Ġ= Ġ 4 2 4 2 , ĊĠĠĠĠĠĠĠ Ġlast Sr Timestamp Ġ= Ġ 2 3 4 5 6 , ĊĠĠĠĠĠĠĠ Ġdelay Since Last Sr Ġ= Ġ 3 4 5 6 7 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet Builder ( ĊĠĠĠĠĠĠĠ ĠR tcp Header Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsender S src Ġ= Ġ 1 2 3 4 5 ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġexpected Sender Info , ĊĠĠĠĠĠĠĠ Ġmutable ListOf ( report Block 1 , Ġreport Block 2 ) ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġval Ġsr Packet Data Ġ= Ġbyte Buffer Of ( ĊĠĠĠĠĠĠĠ Ġ// ĠV = 2 , P = false , RC = 0 , PT = 2 0 0 , L = 6 ( 2 8 Ġbytes ) ĊĠĠĠĠĠĠĠĠ 0 x 8 0 , Ġ 0 xc 8 , Ġ 0 x 0 0 , Ġ 0 x 0 6 , ĊĠĠĠĠĠĠĠ Ġ// ĠSender ĠS SRC : Ġ 1 8 2 9 7 9 0 3 3 1 ĊĠĠĠĠĠĠĠĠ 0 x 6 d , Ġ 0 x 1 0 , Ġ 0 x 6 2 , Ġ 0 x 7 b , ĊĠĠĠĠĠĠĠ Ġ// ĠTimestamp , ĠM SW : Ġ 3 7 6 1 5 9 5 3 5 7 ĊĠĠĠĠĠĠĠĠ 0 xe 0 , Ġ 0 x 3 5 , Ġ 0 x 6 3 , Ġ 0 xdd , ĊĠĠĠĠĠĠĠ Ġ// ĠTimestamp , ĠL SW : Ġ 1 7 2 1 8 5 2 3 ĊĠĠĠĠĠĠĠĠ 0 x 0 1 , Ġ 0 x 0 6 , Ġ 0 xbb , Ġ 0 xdb , ĊĠĠĠĠĠĠĠ Ġ// ĠR TP Ġtimestamp : Ġ 3 9 6 0 1 5 3 8 3 8 ĊĠĠĠĠĠĠĠĠ 0 xec , Ġ 0 x 0 b , Ġ 0 x 2 6 , Ġ 0 xee , ĊĠĠĠĠĠĠĠ Ġ// ĠSender 's Ġpacket Ġcount : Ġ 7 2 ĊĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 0 0 , Ġ 0 x 4 8 , ĊĠĠĠĠĠĠĠ Ġ// ĠSender 's Ġoct et Ġcount : Ġ 7 6 6 4 3 ĊĠĠĠĠĠĠĠĠ 0 x 0 0 , Ġ 0 x 0 1 , Ġ 0 x 2 b , Ġ 0 x 6 3 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġsr Packet Buffer Ġ= ĠByteBuffer . wrap ( sr Packet . buffer , Ġsr Packet . offset , Ġsr Packet . length ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext (" creation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" from Ġa Ġbuffer ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet ( sr Packet Buffer . array (), Ġsr Packet Buffer . array Offset (), Ġsr Packet Buffer . limit ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet ( sr Packet Data . array (), Ġsr Packet Data . array Offset (), Ġsr Packet Data . limit ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" read Ġeverything Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . version ĠshouldBe Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . has Padding ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Count ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Blocks Ġshould Have Size Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . packet Type ĠshouldBe Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . length Field ĠshouldBe Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender S src ĠshouldBe Ġ 1 8 2 9 7 9 0 3 3 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . ntp Timestamp M sw ĠshouldBe Ġ 3 7 6 1 5 9 5 3 5 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . ntp Timestamp L sw ĠshouldBe Ġ 1 7 2 1 8 5 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . compact ed N tp Timestamp ĠshouldBe Ġ 1 6 7 5 4 2 8 1 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . rtp Timestamp ĠshouldBe Ġ 3 9 6 0 1 5 3 8 3 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . send ers Packet Count ĠshouldBe Ġ 7 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . send ers Oct et Count ĠshouldBe Ġ 7 6 6 4 3 Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . packet Type ĠshouldBe ĠR tcp Sr Packet . PT Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Count ĠshouldBe Ġ 2 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . length Field ĠshouldBe Ġ 1 8 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . ntp Timestamp M sw ĠshouldBe Ġexpected Sender Info . ntp Timestamp M sw Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . ntp Timestamp L sw ĠshouldBe Ġexpected Sender Info . ntp Timestamp L sw Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . compact ed N tp Timestamp ĠshouldBe Ġ 0 xFFFFFFFF . to Positive Long () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . rtp Timestamp ĠshouldBe Ġexpected Sender Info . rtp Timestamp Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . send ers Packet Count ĠshouldBe Ġexpected Sender Info . send ers Packet Count Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info . send ers Oct et Count ĠshouldBe Ġexpected Sender Info . send ers Oct et Count Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Blocks Ġshould Ġhave Size ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġverify Ġreport Ġblock Ġparse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Blocks [ 0 ] ĠshouldBe Ġreport Block 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Blocks [ 1 ] ĠshouldBe Ġreport Block 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" clone Without Report Blocks ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" when Ġthere Ġwere Ġreport Ġblocks ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclone Ġ= Ġsr Packet . clone Without Report Blocks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" clone Ġeverything Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . version ĠshouldBe Ġsr Packet . version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . has Padding ĠshouldBe Ġsr Packet . has Padding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . report Count ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . packet Type ĠshouldBe Ġsr Packet . packet Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . length ĠshouldBe ĠR tcp Header . SIZE _ BYTES Ġ+ ĠSender Info Parser . SIZE _ BYTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . sender S src ĠshouldBe Ġsr Packet . sender S src ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . buffer Ġshould Not Be Ġsr Packet . buffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" when Ġthere Ġwere Ġno Ġreport Ġblocks ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet No Report Blocks Ġ= ĠR tcp Sr Packet Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR tcp Header Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender S src Ġ= Ġ 1 2 3 4 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Sender Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclone Ġ= Ġsr Packet No Report Blocks . clone Without Report Blocks () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" clone Ġeverything Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . version ĠshouldBe Ġsr Packet . version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . has Padding ĠshouldBe Ġsr Packet . has Padding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . report Count ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . packet Type ĠshouldBe Ġsr Packet . packet Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . length ĠshouldBe ĠR tcp Header . SIZE _ BYTES Ġ+ ĠSender Info Parser . SIZE _ BYTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . sender S src ĠshouldBe Ġsr Packet . sender S src ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclone . buffer Ġshould Not Be Ġsr Packet . buffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" from Ġexplicit Ġvalues ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġexpected Header , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Info Ġ= Ġexpected Sender Info , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Blocks Ġ= Ġmutable ListOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Block 1 , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Block 2 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" set Ġall Ġvalues Ġcorrectly ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . header ĠshouldBe Ġexpected Header Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . sender Info ĠshouldBe Ġexpected Sender Info Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . report Blocks Ġshould Ġcontain All ( report Block 1 , Ġreport Block 2 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" from Ġan Ġincomplete Ġset Ġof Ġvalues ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= ĠR tcp Header ( report Count Ġ= Ġ 2 , Ġsender S src Ġ= Ġ 1 2 3 4 5 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender Info Ġ= Ġexpected Sender Info , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Blocks Ġ= Ġmutable ListOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Block 1 , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Block 2 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparsed Packet Ġ= ĠR tcp Sr Packet . from Buffer ( sr Packet . get Buffer ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" set Ġall Ġvalues Ġcorrectly ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR tcp Header Test . rt cp Header Equals ( parsed Packet . header , Ġexpected Header ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Packet . sender Info ĠshouldBe Ġexpected Sender Info Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Packet . report Blocks Ġshould Ġcontain All ( report Block 1 , Ġreport Block 2 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġcontext (" serialization ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Buf Ġ= ĠByteBuffer . allocate ( 1 0 2 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Buf . put ( expected Header . get Buffer ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Buf . put ( expected Sender Info . get Buffer ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Buf . put ( report Block 1 . get Buffer ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Buf . put ( report Block 2 . get Buffer ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Buf . flip () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsr Packet Ġ= ĠR tcp Sr Packet . from Buffer ( expected Buf ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" via Ġgetting Ġits Ġbuffer ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Buf Ġ= Ġsr Packet . get Buffer () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" write Ġall Ġvalues Ġcorrectly ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Buf Ġshould Ġhave Same Content As ( expected Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcontext (" to Ġan Ġexisting Ġbuffer ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Buf Ġ= ĠByteBuffer . allocate ( 1 0 2 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Buf . position ( 8 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsr Packet . serialize To ( existing Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" write Ġthe Ġdata Ġto Ġthe Ġproper Ġplace ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Buf Ġ= Ġexisting Buf . sub Buffer ( 8 , Ġexpected Buf . limit ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Buf Ġshould Ġhave Same Content As ( expected Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" leave Ġthe Ġbuffer 's Ġposition Ġafter Ġthe Ġfield Ġit Ġjust Ġwrote ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Buf . position () ĠshouldBe Ġ( 8 Ġ+ Ġexpected Buf . limit ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ