package Ġtest Ċ Ċ import Ġch . hs r . dsl . dw rtc . signal ing . Client Message Ċ import Ġch . hs r . dsl . dw rtc . signal ing . Client Service Ċ import Ġch . hs r . dsl . dw rtc . util . find Free Port Ċ import Ġch . hs r . dsl . dw rtc . util . json To Ċ import Ġch . hs r . dsl . dw rtc . util . toJson Ċ import Ġch . hs r . dsl . dw rtc . websocket . WEB SOCKET _ PATH Ċ import Ġch . hs r . dsl . dw rtc . websocket . WebSocket Handler Ċ import Ġch . hs r . dsl . dw rtc . websocket . WebSocket Id Message Ċ import Ġio . jav al in . J aval in Ċ import Ġio . kot lint est . TestCase Order Ċ import Ġio . kot lint est . event ually Ċ import Ġio . kot lint est . extensions . Test Listener Ċ import Ġio . kot lint est . matchers . collections . should Contain All Ċ import Ġio . kot lint est . seconds Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . Word Spec Ċ import Ġmu . K Logging Ċ import Ġorg . http 4 k . client . Websocket Client Ċ import Ġorg . http 4 k . core . Uri Ċ import Ġorg . http 4 k . websocket . Ws Message Ċ Ċ class ĠWebSocket St ress Test Ġ: ĠWord Spec (), ĠTest Listener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () ĊĊĠĠĠ Ġoverride Ġfun ĠtestCase Order () Ġ= ĠTestCase Order . Random Ġ// Ġmake Ġsure Ġtests Ġare Ġnot Ġdependent Ġon Ġeach Ġother ĊĊĠĠĠ Ġprivate Ġval Ġport Ġ= Ġfind Free Port () ĊĠĠĠ Ġprivate Ġval Ġapp Ġ= ĠJ aval in . create (). start ( port ) !! ĊĠĠĠ Ġprivate Ġval Ġservice Ġ= ĠClient Service () ĊĠĠĠ Ġprivate Ġval Ġws Uri Ġ= ĠUri . of (" ws :// localhost :$ port $ WEB SOCKET _ PATH ") ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ" two ĠWebSocket Ġclients Ġsending Ġmany Ġmessages " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 5 . seconds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWebSocket Handler ( app , Ġservice ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient One Ġ= ĠWeb socket Client . blocking ( ws Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Two Ġ= ĠWeb socket Client . blocking ( ws Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient One Id Message Ġ= Ġclient One . received (). take ( 1 ). toList (). first (). body String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient One Id Ġ= Ġjson To < WebSocket Id Message >( client One Id Message ). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Two Id Message Ġ= Ġclient Two . received (). take ( 1 ). toList (). first (). body String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Two Id Ġ= Ġjson To < WebSocket Id Message >( client Two Id Message ). id ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsent Messages Ġ= Ġmutable ListOf < Ws Message >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. n ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġexplicitly Ġset Ġthe Ġsender SessionId , Ġso Ġthe Ġlist Ġmatches Ġexactly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠClient Message (" Signal ing Message ", Ġclient Two Id , Ġclient One Id , Ġn . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġws Message Ġ= ĠW s Message ( toJson ( message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent Messages . add ( ws Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Two . send ( ws Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceived Messages Ġ= Ġclient One . received (). take ( n ). toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" receive Ġall Ġthe Ġmessages " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Messages . size . shouldBe ( sent Messages . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Messages . size . shouldBe ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Messages . should Contain All ( sent Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ