/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠSIP 3 . IO , ĠCorp . Ċ Ġ* Ċ Ġ* Ġ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 Ġio . sip 3 . capt ain . ce . pipeline Ċ Ċ import Ġio . mock k .* Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġio . netty . buffer . Un p ooled Ċ import Ġio . sip 3 . capt ain . ce . domain . Packet Ċ import Ġio . sip 3 . commons . domain . payload . Byte Buf Payload Ċ import Ġio . sip 3 . commons . domain . payload . En codable Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ class ĠU dp Handler Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠPayload : ĠSIP ĊĠĠĠĠĠĠĠ Ġval ĠPACK ET _ 1 Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 xdf . to Byte (), Ġ 0 x 9 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xb 4 . to Byte (), Ġ 0 x 3 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 e . to Byte (), Ġ 0 x 5 3 . to Byte (), Ġ 0 x 4 9 . to Byte (), Ġ 0 x 5 0 . to Byte (), Ġ 0 x 2 f . to Byte (), Ġ 0 x 3 2 . to Byte (), Ġ 0 x 2 e . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 0 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 3 1 . to Byte (), Ġ 0 x 3 0 . to Byte (), Ġ 0 x 3 0 . to Byte (), Ġ 0 x 2 0 . to Byte (), Ġ 0 x 5 4 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 2 . to Byte (), Ġ 0 x 7 9 . to Byte (), Ġ 0 x 6 9 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPayload : ĠR TP ĊĠĠĠĠĠĠĠ Ġval ĠPACK ET _ 2 Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 xdf . to Byte (), Ġ 0 x 9 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xb 4 . to Byte (), Ġ 0 x 3 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 e . to Byte (), Ġ 0 x 8 0 . to Byte (), Ġ 0 x 8 8 . to Byte (), Ġ 0 x 9 5 . to Byte (), Ġ 0 x 9 1 . to Byte (), Ġ 0 xfd . to Byte (), Ġ 0 xe 6 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xf 6 . to Byte (), Ġ 0 xf 6 . to Byte (), Ġ 0 x 4 a . to Byte (), Ġ 0 xbf . to Byte (), Ġ 0 x 3 0 . to Byte (), Ġ 0 x 1 3 . to Byte (), Ġ 0 xd 5 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xd 5 . to Byte (), Ġ 0 xd 5 . to Byte (), Ġ 0 xd 5 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPayload : ĠR TCP ĊĠĠĠĠĠĠĠ Ġval ĠPACK ET _ 3 Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 xdf . to Byte (), Ġ 0 x 9 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xb 4 . to Byte (), Ġ 0 x 3 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 e . to Byte (), Ġ 0 x 8 1 . to Byte (), Ġ 0 xc 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 c . to Byte (), Ġ 0 x 5 9 . to Byte (), Ġ 0 xdb . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xe 3 . to Byte (), Ġ 0 x 0 c . to Byte (), Ġ 0 x 5 c . to Byte (), Ġ 0 xac . to Byte (), Ġ 0 xde . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 x 0 0 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 d . to Byte (), Ġ 0 xe 7 . to Byte (), Ġ 0 xb 1 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPayload : ĠTZ SP ĊĠĠĠĠĠĠĠ Ġval ĠPACK ET _ 4 Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 3 3 . to Byte (), Ġ 0 x 4 0 . to Byte (), Ġ 0 xdf . to Byte (), Ġ 0 x 9 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xb 4 . to Byte (), Ġ 0 x 3 1 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 e . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 0 1 . to Byte (), Ġ 0 x 3 3 . to Byte (), Ġ 0 x 4 0 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xdf . to Byte (), Ġ 0 x 9 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xb 4 . to Byte (), Ġ 0 x 3 1 . to Byte (), Ġ 0 x 4 e . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPayload : ĠV XL AN ĊĠĠĠĠĠĠĠ Ġval ĠPACK ET _ 5 Ġ= Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xff . to Byte (), Ġ 0 xfc . to Byte (), Ġ 0 x 1 2 . to Byte (), Ġ 0 xb 5 . to Byte (), Ġ 0 x 0 2 . to Byte (), Ġ 0 x 6 6 . to Byte (), Ġ 0 x 0 0 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 . to Byte (), Ġ 0 x 0 8 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 xa 1 . to Byte (), Ġ 0 x 4 9 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 7 3 . to Byte (), Ġ 0 x 0 0 . to Byte (), Ġ 0 x 0 2 . to Byte (), Ġ 0 x 0 3 . to Byte (), Ġ 0 xe 0 . to Byte (), Ġ 0 x 8 7 . to Byte (), Ġ 0 x 1 b . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 4 . to Byte (), Ġ 0 x 0 2 . to Byte (), Ġ 0 x 7 3 . to Byte (), Ġ 0 x 9 5 . to Byte (), Ġ 0 xb 2 . to Byte (), Ġ 0 xab . to Byte (), Ġ 0 xa 0 . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 8 . to Byte (), Ġ 0 x 0 0 . to Byte () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Parse ĠUDP Ġ- ĠSIP `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( S ip Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < S ip Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < S ip Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 1 2 0 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 7 2 4 0 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 6 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Parse ĠUDP Ġ- ĠR TP `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( R tp Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < R tp Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" rtp ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" enabled ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < R tp Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 1 2 0 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 7 2 4 0 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 6 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Parse ĠUDP Ġ- ĠR TCP `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( R tcp Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < R tcp Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" rt cp ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" enabled ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 3 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < R tcp Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 1 2 0 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 7 2 4 0 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 6 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Route ĠUDP Ġ- Ġrejected ĠR TP `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( R tp Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < R tp Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" rtp ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" enabled ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . rejected Ġ= ĠPacket () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < R tp Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 1 2 0 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 7 2 4 0 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 6 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Parse ĠUDP Ġ- ĠTZ SP `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( Tz sp Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < Tz sp Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" tz sp ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" enabled ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 4 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < Tz sp Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 3 1 2 0 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 7 2 4 0 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 2 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Parse ĠUDP Ġ- ĠV XL AN `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit ĊĠĠĠĠĠĠĠ Ġmock k Constructor ( Vx lan Handler :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġpacket Slot Ġ= Ġslot < Packet >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Construct ed < Vx lan Handler >(). handle ( capture ( packet Slot )) ĊĠĠĠĠĠĠĠ Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute ĊĠĠĠĠĠĠĠ Ġval Ġudp Handler Ġ= ĠU dp Handler ( Vert x . vertx (), ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" vx lan ", ĠJsonObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" enabled ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= ĠPacket (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . payload Ġ= ĠByte Buf Payload ( Un p ooled . wrapped Buffer ( PACKET _ 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġudp Handler . handle ( packet ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġany Construct ed < Vx lan Handler >(). handle ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġpacket Ġ= Ġpacket Slot . captured ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġ( packet . payload Ġas ĠEn codable ). encode () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 5 5 3 2 , Ġpacket . src Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 7 8 9 , Ġpacket . dst Port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 2 , Ġbuffer . readable Bytes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġ` Un mock Ġall `() Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠ Ġ} Ċ } Ċ