package Ġnet . cord a . node . services . network Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . any Ċ import Ġcom . n ha ar man . mockito _ kotlin . never Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . internal . Network Parameters Storage Ċ import Ġnet . cord a . core . node . Network Parameters Ċ import Ġnet . cord a . core . node . Not ary Info Ċ import Ġnet . cord a . core . serialization . serialize Ċ import Ġnet . cord a . core testing . internal . DEV _ ROOT _ CA Ċ import Ġnet . cord a . node . internal . Network Parameters Reader Ċ import Ġnet . cord a . node api . internal . create Dev Network Map Ca Ċ import Ġnet . cord a . node api . internal . crypto . Certificate And KeyPair Ċ import Ġnet . cord a . testing . common . internal . add Not ary Ċ import Ġnet . cord a . testing . common . internal . test Network Parameters Ċ import Ġnet . cord a . testing . core . Serialization Environment Rule Ċ import Ġnet . cord a . testing . core . Test Identity Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito Ċ Ċ class ĠNetwork Parameters Hot loader Test Ġ{ ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġtest Serialization Ġ= ĠSerialization Environment Rule ( true ) ĊĠĠĠ Ġprivate Ġval Ġnetwork Map Cert And KeyPair : ĠCertificate And KeyPair Ġ= Ġcreate Dev Network Map Ca () ĊĠĠĠ Ġprivate Ġval Ġtrust Root Ġ= ĠDEV _ ROOT _ CA . certificate ĊĊĠĠĠ Ġprivate Ġval Ġoriginal Network Parameters Ġ= Ġtest Network Parameters () ĊĠĠĠ Ġprivate Ġval Ġnot ary : ĠParty Ġ= ĠTest Identity . fresh (" test Ġnot ary "). party ĊĠĠĠ Ġprivate Ġval Ġnetwork Parameters With Not ary Ġ= Ġoriginal Network Parameters . add Not ary ( not ary ) ĊĠĠĠ Ġprivate Ġval Ġnetwork Parameters Storage Ġ= ĠMockito . mock ( Network Parameters Storage :: class . java ) ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġhot load Ġif Ġnot ary Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ` can Ġhot load `( network Parameters With Not ary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġnot Ġhot load Ġif Ġnot ary Ġchanges Ġbut Ġanother Ġnon - hot load able Ġproperty Ġalso Ġchanges `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġnew net Params With New Not ary And Max Msg Size Ġ= Ġnetwork Parameters With Not ary . copy ( max Message Size Ġ= Ġnetwork Parameters With Not ary . max Message Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ` can Ġnot Ġhot load `( new net Params With New Not ary And Max Msg Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġhot load Ġif Ġonly Ġalways Ġhot load able Ġproperties Ġchange `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Parameters With Always Hot load able Properties Ġ= Ġoriginal Network Parameters . copy ( epoch Ġ= Ġoriginal Network Parameters . epoch Ġ+ Ġ 1 , Ġmodified Time Ġ= Ġoriginal Network Parameters . modified Time . plus Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠ Ġ` can Ġhot load `( new Parameters With Always Hot load able Properties ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġnot Ġhot load Ġif Ġmax Message Size Ġchanges `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters With New Max Message Size Ġ= Ġoriginal Network Parameters . copy ( max Message Size Ġ= Ġoriginal Network Parameters . max Message Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ` can Ġnot Ġhot load `( parameters With New Max Message Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġnot Ġhot load Ġif Ġmax Transaction Size Ġchanges `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters With New Max Transaction Size Ġ= Ġoriginal Network Parameters . copy ( max Transaction Size Ġ= Ġoriginal Network Parameters . max Message Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ` can Ġnot Ġhot load `( parameters With New Max Transaction Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġnot Ġhot load Ġif Ġminimum Platform Version Ġchanges `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters With New Minimum Platform Version Ġ= Ġoriginal Network Parameters . copy ( minimum Platform Version Ġ= Ġoriginal Network Parameters . minimum Platform Version Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ` can Ġnot Ġhot load `( parameters With New Minimum Platform Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ` can Ġhot load `( new Network Parameters : ĠNetwork Parameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Update Listener Ġ= ĠMockito . spy ( object Ġ: ĠNot ary Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Not ary List ( not aries : ĠList < Not ary Info >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters Changed Listener Ġ= ĠMockito . spy ( object Ġ: ĠNetwork Parameter Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Network Parameters ( network Parameters : ĠNetwork Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters Hot loader Ġ= Ġcreate Hot loader With Mock ed Services ( new Network Parameters ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Not ary Update Listener ( not ary Update Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Network Parameters Changed Listeners ( network Parameters Changed Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( network Parameters Hot loader . attempt Hot load ( new Network Parameters . serialize (). hash )) ĊĠĠĠĠĠĠĠ Ġverify ( not ary Update Listener ). on New Not ary List ( new Network Parameters . not aries ) ĊĠĠĠĠĠĠĠ Ġverify ( network Parameters Changed Listener ). on New Network Parameters ( new Network Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ` can Ġnot Ġhot load `( new Network Parameters : ĠNetwork Parameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Update Listener Ġ= ĠMockito . spy ( object Ġ: ĠNot ary Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Not ary List ( not aries : ĠList < Not ary Info >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters Changed Listener Ġ= ĠMockito . spy ( object Ġ: ĠNetwork Parameter Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Network Parameters ( network Parameters : ĠNetwork Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters Hot loader Ġ= Ġcreate Hot loader With Mock ed Services ( new Network Parameters ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Not ary Update Listener ( not ary Update Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Network Parameters Changed Listeners ( network Parameters Changed Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAssert . assertFalse ( network Parameters Hot loader . attempt Hot load ( new Network Parameters . serialize (). hash )) ĊĠĠĠĠĠĠĠ Ġverify ( not ary Update Listener , Ġnever ()). on New Not ary List ( any ()); ĊĠĠĠĠĠĠĠ Ġverify ( network Parameters Changed Listener , Ġnever ()). on New Network Parameters ( any ()); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Hot loader With Mock ed Services ( new Network Parameters : ĠNetwork Parameters ): ĠNetwork Parameters Hot loader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsigned Network Parameters Ġ= Ġnetwork Map Cert And KeyPair . sign ( new Network Parameters ) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Map Client Ġ= ĠMockito . mock ( Network Map Client :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( network Map Client . get Network Parameters ( new Network Parameters . serialize (). hash )). thenReturn ( signed Network Parameters ) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters Reader Ġ= ĠMockito . mock ( Network Parameters Reader :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( network Parameters Reader . read ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Network Parameters Reader . Network Parameters And Signed ( signed Network Parameters , Ġtrust Root )) ĊĠĠĠĠĠĠĠ Ġreturn ĠNetwork Parameters Hot loader ( network Map Client , Ġtrust Root , Ġoriginal Network Parameters , Ġnetwork Parameters Reader , Ġnetwork Parameters Storage ) ĊĠĠĠ Ġ} Ċ } ĊĊ