package Ġcom . v ade en . dns . server Ċ Ċ import Ġcom . v ade en . dns . getTest Header Ċ import Ġcom . v ade en . dns . getTest Question Ċ import Ġcom . v ade en . dns . message . Message Ċ import Ġorg . junit . jupiter . api . Assertions . assertArrayEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Argument Captor Ċ import Ġorg . mockito . Argument Matchers . any Ċ import Ġorg . mockito . BDD Mockito . given Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġjava . net . Data gram Packet Ċ import Ġjava . net . Data gram Socket Ċ import Ġjava . net . Inet Address Ċ Ċ internal Ġclass ĠD ns Server Test Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠD ns Server ( 8 0 8 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠD ns Client ( Inet Address . get ByName (" 1 2 7 . 0 . 0 . 5 3 "), Ġ 5 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġmessage Ġfrom ĠDNS Ġserver . ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġserver . receive () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġmessage Ġto Ġa Ġreal ĠDNS Ġserver . ĊĠĠĠĠĠĠĠ Ġclient . send ( message ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWait Ġfor Ġresponse Ġform Ġreal ĠDNS Ġserver . ĊĠĠĠĠĠĠĠ Ġval Ġclient Reply Ġ= Ġclient . receive () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġreply Ġcontaining Ġthe Ġreal ĠDNS Ġreply . ĊĠĠĠĠĠĠĠ Ġmessage . reply ( client Reply ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġreply . ĊĠĠĠĠĠĠĠ Ġserver . send ( reply ) ĊĠĠĠ Ġ} ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest Server Send () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsocket Ġ= Ġmock ( Data gram Socket :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Header Ġ= Ġget Test Header ( 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Question Ġ= Ġget Test Question () ĊĠĠĠĠĠĠĠ Ġval Ġtest Message Ġ= ĠMessage ( test Header . obj , ĠlistOf ( test Question . obj ), Ġempty List (), Ġempty List (), Ġempty List ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠD ns Server ( socket ) ĊĠĠĠĠĠĠĠ Ġserver . send ( Dns Packet ( Inet Address . get ByName (" 1 2 7 . 0 . 0 . 1 "), Ġ 5 3 , Ġtest Message )) ĊĊĠĠĠĠĠĠĠ Ġval Ġpacket Captor Ġ= ĠArgument Captor . for Class ( Data gram Packet :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( socket , ĠMockito . times ( 1 )). send ( packet Captor . capture ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġpacket Captor . value ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Inet Address . get ByName (" 1 2 7 . 0 . 0 . 1 "), Ġpacket . address ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 3 , Ġpacket . port ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( test Header . data Ġ+ Ġtest Question . data , Ġpacket . data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest Server Receive () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsocket Ġ= Ġmock ( Data gram Socket :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Header Ġ= Ġget Test Header ( 1 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Question Ġ= Ġget Test Question () ĊĠĠĠĠĠĠĠ Ġval Ġtest Message Ġ= ĠMessage ( test Header . obj , ĠlistOf ( test Question . obj ), Ġempty List (), Ġempty List (), Ġempty List ()) ĊĊĠĠĠĠĠĠĠ Ġgiven ( socket . receive ( any ())). will Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġit . arguments [ 0 ] Ġas ĠData gram Packet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . address Ġ= ĠInet Address . get ByName (" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . port Ġ= Ġ 5 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpacket . data Ġ= Ġtest Header . data Ġ+ Ġtest Question . data ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= ĠD ns Server ( socket ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġserver . receive () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġrequest . message ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Inet Address . get ByName (" 1 2 7 . 0 . 0 . 1 "), Ġrequest . address ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 3 , Ġrequest . port ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( test Message , Ġmessage ) ĊĠĠĠ Ġ} Ċ }