package Ġapps . games . ser ious . ma f ia . sub games Ċ Ċ import Ġapps . chat . Chat Ċ import Ġapps . games . Game Manager Class Ċ import Ġapps . games . ser ious . ma f ia . roles . Role Ċ import Ġapps . games . ser ious . ma f ia . sub games . role . distribution . Role Distribution Game Ċ import Ġapps . games . ser ious . ma f ia . sub games . role . generation . Role Generation Game Ċ import Ġbroker . Net ty Group Broker Ċ import Ġentity . Group Ċ import Ġentity . User Ċ import Ġnetwork . ConnectionManager Class Ċ import Ġorg . apache . log 4 j . Basic Configurator Ċ import Ġorg . bouncycastle . j ce . EC Named Curve Table Ċ import Ġorg . junit . After Class Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito Ċ import Ġjava . net . Inet SocketAddress Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġuser Ġon Ġ 8 / 2 4 / 1 6 . Ċ Ġ*/ ĊĊ Ċ class ĠRole Distribution Game Test Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġch ats : ĠArray < Chat > ĊĠĠĠ Ġlateinit Ġvar Ġgroups : ĠArray < Group > ĊĊĠĠĠ Ġprivate Ġval ĠEC Params Ġ= ĠEC Named Curve Table . getParameter Spec (" secp 2 5 6 k 1 ") ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Configurator . configure () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Client Ad resses Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠInet SocketAddress (" 1 2 7 . 0 . 0 . 1 ", Ġ 1 2 3 1 Ġ+ Ġ 2 Ġ* Ġi ) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġuser Host Ad resses Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠInet SocketAddress (" 1 2 7 . 0 . 0 . 1 ", Ġ 1 2 3 2 Ġ+ Ġ 2 Ġ* Ġi ) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġusers Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠUser ( user Host Ad resses [ i ], Ġ" Test User Ġ$ i ") Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Managers Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠConnection Manager Class ( user Client Ad resses [ i ], Ġuser Host Ad resses [ i ]) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġgame Managers Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠGame Manager Class ( connection Managers [ i ]) Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass Ġ@ Jvm Static Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Managers . forEach Ġ{ Ġx Ġ-> Ġx . start () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Class Ġ@ Jvm Static Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Managers . forEach Ġ{ Ġx Ġ-> Ġx . close () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Managers . forEach Ġ{ Ġx Ġ-> Ġx . close () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit Game () Ġ{ ĊĠĠĠĠĠĠĠ Ġch ats Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠMockito . mock ( Chat :: class . java ) Ġ?: Ġthrow ĠAssertionError (" Initialization Ġerror ") Ġ}) ĊĠĠĠĠĠĠĠ Ġgroups Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠGroup ( mutable Set Of (* users )) Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. MAX _ USERS Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch ats [ i ]. username Ġ= Ġ" Test User Ġ$ i " ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( ch ats [ i ]. me ()). thenReturn ( users [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito . do Nothing (). ` when `( ch ats [ i ]). showMessage ( Mockito . any String ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito . do Return ( Net ty Group Broker ( connection Managers [ i ])). ` when `( ch ats [ i ]). group Broker ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito . do Return ( groups [ i ]). ` when `( ch ats [ i ]). group ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġrole Ġdeck , Ġdistribute Ġroles Ġand Ġverify , Ġthat Ġnumber ĊĠĠĠĠ Ġ* Ġof Ġoccurrences Ġof Ġeach Ġrole Ġis Ġexactly Ġas Ġwas Ġplanned ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Roles () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠMath . sqrt ( MAX _ USERS Ġ* Ġ 1 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġroles Count Ġ= Ġmutable Map Of < Role , ĠInt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( role Ġin ĠRole . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( role ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRole . MA FI A Ġ-> Ġroles Count [ role ] Ġ= Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( role Ġ!= ĠRole . IN NO CENT Ġ&& Ġrole Ġ!= ĠRole . UNKNOWN ) Ġroles Count [ role ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroles Count [ Role . IN NO CENT ] Ġ= ĠMAX _ USERS Ġ- Ġroles Count . values . sum () ĊĠĠĠĠĠĠĠ Ġval Ġuser Roles Deck Games Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠRole Generation Game ( ch ats [ i ], Ġgroups [ i ], Ġ" Role Deck Roles ", ĠEC Params , Ġroles Count , Ġgame Managers [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Role De cks Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġgame Managers [ i ]. init Sub Game ( user Roles Deck Games [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġrole De cks Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġfuture Role De cks [ i ]. get (). first Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġrole Distribution Games Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠRole Distribution Game ( ch ats [ i ], Ġgroups [ i ], Ġ" Role Distribution ", ĠEC Params , Ġrole De cks [ i ], Ġgame Managers [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Roles Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġgame Managers [ i ]. init Sub Game ( role Distribution Games [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġroles Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġfuture Roles [ i ]. get (). first Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġentries Count Ġ= Ġroles . associate Ġ{ Ġx Ġ-> Ġx . role Ġto Ġroles . count Ġ{ Ġt Ġ-> Ġt . role Ġ== Ġx . role Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( roles Count , Ġentries Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġrole Ġdeck , Ġdistribute Ġroles Ġand Ġverify , Ġthat Ġnumber ĊĠĠĠĠ Ġ* Ġof Ġoccurrences Ġof Ġeach Ġrole Ġis Ġexactly Ġas Ġwas Ġplanned ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Com r ades () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠMath . sqrt ( MAX _ USERS Ġ* Ġ 1 . 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġroles Count Ġ= Ġmutable Map Of < Role , ĠInt >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( role Ġin ĠRole . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( role ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRole . MA FI A Ġ-> Ġroles Count [ role ] Ġ= Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( role Ġ!= ĠRole . IN NO CENT Ġ&& Ġrole Ġ!= ĠRole . UNKNOWN ) Ġroles Count [ role ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroles Count [ Role . IN NO CENT ] Ġ= ĠMAX _ USERS Ġ- Ġroles Count . values . sum () ĊĠĠĠĠĠĠĠ Ġval Ġuser Roles Deck Games Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠRole Generation Game ( ch ats [ i ], Ġgroups [ i ], Ġ" Role Deck Com r ades ", ĠEC Params , Ġroles Count , Ġgame Managers [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Role De cks Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġgame Managers [ i ]. init Sub Game ( user Roles Deck Games [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġrole De cks Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġfuture Role De cks [ i ]. get (). first Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġrole Distribution Games Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> ĠRole Distribution Game ( ch ats [ i ], Ġgroups [ i ], Ġ" Role Distribution ", ĠEC Params , Ġrole De cks [ i ], Ġgame Managers [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Roles Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġgame Managers [ i ]. init Sub Game ( role Distribution Games [ i ]) Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġroles Ġ= ĠArray ( MAX _ USERS , Ġ{ Ġi Ġ-> Ġfuture Roles [ i ]. get (). first Ġ}) ĊĠĠĠĠĠĠĠ Ġfor Ġ( role Ġin Ġroles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( role . role Ġ== ĠRole . IN NO CENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġrole . get Com r ades (). size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("${ role . role }", Ġroles Count [ role . role ], Ġrole . get Com r ades (). size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ