package Ġtest Ċ Ċ import Ġch . hs r . dsl . dw rtc . signal ing . Client Service Ċ import Ġch . hs r . dsl . dw rtc . signal ing . I External Client Ċ import Ġio . kot lint est . Description Ċ import Ġio . kot lint est . TestCase Order Ċ import Ġio . kot lint est . TestResult Ċ import Ġio . kot lint est . extensions . Test Listener Ċ import Ġio . kot lint est . matchers . boolean . shouldBe True Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . Word Spec Ċ Ċ class ĠMessage Client Services Test Ġ: ĠWord Spec (), ĠTest Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġis Instance Per Test (): ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun ĠtestCase Order () Ġ= ĠTestCase Order . Random Ġ// Ġmake Ġsure Ġtests Ġare Ġnot Ġdependent Ġon Ġeach Ġother ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFIRST _ CLIENT _ ID Ġ= Ġ" FIRST _ CLIENT _ ID " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSE COND _ CLIENT _ ID Ġ= Ġ" SECOND _ CLIENT _ ID " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMESSAGE _ BODY Ġ= Ġ" MESSAGE _ BODY " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpeers Ġ= Ġgenerate D HT ( 5 ) ĊĊĠĠĠ Ġoverride Ġfun Ġafter Test ( description : ĠDescription , Ġresult : ĠTest Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpeers . forEach Ġ{ Ġit . shutdown (). await Listeners () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Service First Ġ= ĠClient Service ( peers . first (). peer Address ()) ĊĠĠĠĠĠĠĠ Ġval Ġclient Service Second Ġ= ĠClient Service ( peers . last (). peer Address ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġ( client First , Ġfirst Future ) Ġ= Ġclient Service First . add Client ( FIRST _ CLIENT _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġ( client Second , Ġsecond Future ) Ġ= Ġclient Service Second . add Client ( SECOND _ CLIENT _ ID ) ĊĊĠĠĠĠĠĠĠ Ġfirst Future . await () ĊĠĠĠĠĠĠĠ Ġsecond Future . await () ĊĊĠĠĠĠĠĠĠ Ġ" a Ġclient " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Client Second Future Ġ= Ġclient Service First . find Client ( SECOND _ CLIENT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexternal Client : ĠI External Client ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Client Second Future . on Get Ġ{ Ġclient Ġ-> Ġexternal Client Ġ= Ġclient Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Client Second Future . await (). await Listeners () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" be Ġable Ġto Ġsend Ġa Ġmessage " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Future Ġ= Ġclient First . sendMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Signal ing Message ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMESSAGE _ BODY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Client !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Future . onComplete Ġ{ Ġsuccess Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Future . await Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess . shouldBe True () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" be Ġable Ġto Ġreceive Ġa Ġmessage " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Second . on Receive Message Ġ{ Ġ_, Ġmessage Dto Ġ-> Ġmessage Ġ= Ġmessage Dto . message Body Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient First . sendMessage (" Signal ing Message ", ĠMESSAGE _ BODY , Ġexternal Client !! ). await Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . shouldBe ( MESSAGE _ BODY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ